Add "nix add-to-store" command
This commit is contained in:
		
							parent
							
								
									1c58ad2ffa
								
							
						
					
					
						commit
						970366266b
					
				
					 4 changed files with 67 additions and 4 deletions
				
			
		|  | @ -81,15 +81,16 @@ public: | |||
|         FlagMaker & handler(std::function<void(Strings)> handler) { flag->handler = handler; return *this; }; | ||||
|         FlagMaker & category(const std::string & s) { flag->category = s; return *this; }; | ||||
| 
 | ||||
|         FlagMaker & dest(std::string * dest) { | ||||
|             assert(flag->arity == 1); | ||||
|         template<class T> | ||||
|         FlagMaker & dest(T * dest) { | ||||
|             flag->arity = 1; | ||||
|             flag->handler = [=](Strings ss) { *dest = ss.front(); }; | ||||
|             return *this; | ||||
|         }; | ||||
| 
 | ||||
|         template<class T> | ||||
|         FlagMaker & set(T * dest, const T & val) { | ||||
|             assert(flag->arity == 0); | ||||
|             flag->arity = 1; | ||||
|             flag->handler = [=](Strings ss) { *dest = val; }; | ||||
|             return *this; | ||||
|         }; | ||||
|  |  | |||
							
								
								
									
										61
									
								
								src/nix/add-to-store.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								src/nix/add-to-store.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| #include "command.hh" | ||||
| #include "common-args.hh" | ||||
| #include "store-api.hh" | ||||
| #include "archive.hh" | ||||
| 
 | ||||
| using namespace nix; | ||||
| 
 | ||||
| struct CmdAddToStore : MixDryRun, StoreCommand | ||||
| { | ||||
|     Path path; | ||||
|     std::experimental::optional<std::string> namePart; | ||||
| 
 | ||||
|     CmdAddToStore() | ||||
|     { | ||||
|         expectArg("path", &path); | ||||
| 
 | ||||
|         mkFlag() | ||||
|             .longName("name") | ||||
|             .shortName('n') | ||||
|             .description("name component of the store path") | ||||
|             .labels({"name"}) | ||||
|             .dest(&namePart); | ||||
|     } | ||||
| 
 | ||||
|     std::string name() override | ||||
|     { | ||||
|         return "add-to-store"; | ||||
|     } | ||||
| 
 | ||||
|     std::string description() override | ||||
|     { | ||||
|         return "add a path to the Nix store"; | ||||
|     } | ||||
| 
 | ||||
|     Examples examples() override | ||||
|     { | ||||
|         return { | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     void run(ref<Store> store) override | ||||
|     { | ||||
|         if (!namePart) namePart = baseNameOf(path); | ||||
| 
 | ||||
|         StringSink sink; | ||||
|         dumpPath(path, sink); | ||||
| 
 | ||||
|         ValidPathInfo info; | ||||
|         info.narHash = hashString(htSHA256, *sink.s); | ||||
|         info.narSize = sink.s->size(); | ||||
|         info.path = store->makeFixedOutputPath(true, info.narHash, *namePart); | ||||
|         info.ca = makeFixedOutputCA(true, info.narHash); | ||||
| 
 | ||||
|         if (!dryRun) | ||||
|             store->addToStore(info, sink.s); | ||||
| 
 | ||||
|         std::cout << fmt("%s\n", info.path); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| static RegisterCommand r1(make_ref<CmdAddToStore>()); | ||||
|  | @ -15,7 +15,6 @@ struct CmdBuild : MixDryRun, InstallablesCommand | |||
|             .longName("out-link") | ||||
|             .shortName('o') | ||||
|             .description("path of the symlink to the build result") | ||||
|             .arity(1) | ||||
|             .labels({"path"}) | ||||
|             .dest(&outLink); | ||||
| 
 | ||||
|  |  | |||
|  | @ -233,6 +233,8 @@ struct CmdWhyDepends : SourceExprCommand | |||
|                 } | ||||
|             }; | ||||
| 
 | ||||
|             // FIXME: should use scanForReferences().
 | ||||
| 
 | ||||
|             visitPath(node.path); | ||||
| 
 | ||||
|             for (auto & ref : refs) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue