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 & handler(std::function<void(Strings)> handler) { flag->handler = handler; return *this; };
 | 
				
			||||||
        FlagMaker & category(const std::string & s) { flag->category = s; return *this; };
 | 
					        FlagMaker & category(const std::string & s) { flag->category = s; return *this; };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FlagMaker & dest(std::string * dest) {
 | 
					        template<class T>
 | 
				
			||||||
            assert(flag->arity == 1);
 | 
					        FlagMaker & dest(T * dest) {
 | 
				
			||||||
 | 
					            flag->arity = 1;
 | 
				
			||||||
            flag->handler = [=](Strings ss) { *dest = ss.front(); };
 | 
					            flag->handler = [=](Strings ss) { *dest = ss.front(); };
 | 
				
			||||||
            return *this;
 | 
					            return *this;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template<class T>
 | 
					        template<class T>
 | 
				
			||||||
        FlagMaker & set(T * dest, const T & val) {
 | 
					        FlagMaker & set(T * dest, const T & val) {
 | 
				
			||||||
            assert(flag->arity == 0);
 | 
					            flag->arity = 1;
 | 
				
			||||||
            flag->handler = [=](Strings ss) { *dest = val; };
 | 
					            flag->handler = [=](Strings ss) { *dest = val; };
 | 
				
			||||||
            return *this;
 | 
					            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")
 | 
					            .longName("out-link")
 | 
				
			||||||
            .shortName('o')
 | 
					            .shortName('o')
 | 
				
			||||||
            .description("path of the symlink to the build result")
 | 
					            .description("path of the symlink to the build result")
 | 
				
			||||||
            .arity(1)
 | 
					 | 
				
			||||||
            .labels({"path"})
 | 
					            .labels({"path"})
 | 
				
			||||||
            .dest(&outLink);
 | 
					            .dest(&outLink);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -233,6 +233,8 @@ struct CmdWhyDepends : SourceExprCommand
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // FIXME: should use scanForReferences().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            visitPath(node.path);
 | 
					            visitPath(node.path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (auto & ref : refs) {
 | 
					            for (auto & ref : refs) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue