nix dump-path: Add
This is primarily useful for extracting NARs from other stores (like binary caches), which "nix-store --dump" cannot do.
This commit is contained in:
		
							parent
							
								
									44309c5067
								
							
						
					
					
						commit
						2da6a42448
					
				
					 3 changed files with 55 additions and 0 deletions
				
			
		|  | @ -129,4 +129,14 @@ void StorePathsCommand::run(ref<Store> store) | |||
|     run(store, storePaths); | ||||
| } | ||||
| 
 | ||||
| void StorePathCommand::run(ref<Store> store) | ||||
| { | ||||
|     auto storePaths = buildInstallables(store, false); | ||||
| 
 | ||||
|     if (storePaths.size() != 1) | ||||
|         throw UsageError("this command requires exactly one store path"); | ||||
| 
 | ||||
|     run(store, *storePaths.begin()); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -118,6 +118,16 @@ public: | |||
|     bool useDefaultInstallables() override { return !all; } | ||||
| }; | ||||
| 
 | ||||
| /* A command that operates on exactly one store path. */ | ||||
| struct StorePathCommand : public InstallablesCommand | ||||
| { | ||||
|     using StoreCommand::run; | ||||
| 
 | ||||
|     virtual void run(ref<Store> store, const Path & storePath) = 0; | ||||
| 
 | ||||
|     void run(ref<Store> store) override; | ||||
| }; | ||||
| 
 | ||||
| typedef std::map<std::string, ref<Command>> Commands; | ||||
| 
 | ||||
| /* An argument parser that supports multiple subcommands,
 | ||||
|  |  | |||
							
								
								
									
										35
									
								
								src/nix/dump-path.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/nix/dump-path.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| #include "command.hh" | ||||
| #include "store-api.hh" | ||||
| 
 | ||||
| using namespace nix; | ||||
| 
 | ||||
| struct CmdDumpPath : StorePathCommand | ||||
| { | ||||
|     std::string name() override | ||||
|     { | ||||
|         return "dump-path"; | ||||
|     } | ||||
| 
 | ||||
|     std::string description() override | ||||
|     { | ||||
|         return "dump a store path to stdout (in NAR format)"; | ||||
|     } | ||||
| 
 | ||||
|     Examples examples() override | ||||
|     { | ||||
|         return { | ||||
|             Example{ | ||||
|                 "To get a NAR from the binary cache https://cache.nixos.org/:", | ||||
|                 "nix dump-path --store https://cache.nixos.org/ /nix/store/7crrmih8c52r8fbnqb933dxrsp44md93-glibc-2.25" | ||||
|             }, | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     void run(ref<Store> store, const Path & storePath) override | ||||
|     { | ||||
|         FdSink sink(STDOUT_FILENO); | ||||
|         store->narFromPath(storePath, sink); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| static RegisterCommand r1(make_ref<CmdDumpPath>()); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue