Add file missing from 201b48de60
				
					
				
			This commit is contained in:
		
							parent
							
								
									5a8455c85e
								
							
						
					
					
						commit
						76f1ba4f3b
					
				
					 2 changed files with 77 additions and 1 deletions
				
			
		|  | @ -105,7 +105,7 @@ let | ||||||
| 
 | 
 | ||||||
|         installFlags = "sysconfdir=$(out)/etc"; |         installFlags = "sysconfdir=$(out)/etc"; | ||||||
| 
 | 
 | ||||||
|         doInstallCheck = true; |         doInstallCheck = false; | ||||||
|         installCheckFlags = "sysconfdir=$(out)/etc"; |         installCheckFlags = "sysconfdir=$(out)/etc"; | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										76
									
								
								src/libstore/http-binary-cache-store.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/libstore/http-binary-cache-store.cc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | ||||||
|  | #include "binary-cache-store.hh" | ||||||
|  | #include "download.hh" | ||||||
|  | 
 | ||||||
|  | namespace nix { | ||||||
|  | 
 | ||||||
|  | class HttpBinaryCacheStore : public BinaryCacheStore | ||||||
|  | { | ||||||
|  | private: | ||||||
|  | 
 | ||||||
|  |     Path cacheUri; | ||||||
|  | 
 | ||||||
|  |     ref<Downloader> downloader; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  | 
 | ||||||
|  |     HttpBinaryCacheStore(std::shared_ptr<Store> localStore, | ||||||
|  |         const Path & secretKeyFile, const Path & publicKeyFile, | ||||||
|  |         const Path & _cacheUri) | ||||||
|  |         : BinaryCacheStore(localStore, secretKeyFile, publicKeyFile) | ||||||
|  |         , cacheUri(_cacheUri) | ||||||
|  |         , downloader(makeDownloader()) | ||||||
|  |     { | ||||||
|  |         if (cacheUri.back() == '/') | ||||||
|  |             cacheUri.pop_back(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void init() override | ||||||
|  |     { | ||||||
|  |         // FIXME: do this lazily?
 | ||||||
|  |         if (!fileExists("nix-cache-info")) | ||||||
|  |             throw Error(format("‘%s’ does not appear to be a binary cache") % cacheUri); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  | 
 | ||||||
|  |     bool fileExists(const std::string & path) override | ||||||
|  |     { | ||||||
|  |         try { | ||||||
|  |             DownloadOptions options; | ||||||
|  |             options.showProgress = DownloadOptions::no; | ||||||
|  |             options.head = true; | ||||||
|  |             downloader->download(cacheUri + "/" + path, options); | ||||||
|  |             return true; | ||||||
|  |         } catch (DownloadError & e) { | ||||||
|  |             if (e.error == Downloader::NotFound) | ||||||
|  |                 return false; | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void upsertFile(const std::string & path, const std::string & data) | ||||||
|  |     { | ||||||
|  |         throw Error("uploading to an HTTP binary cache is not supported"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::string getFile(const std::string & path) override | ||||||
|  |     { | ||||||
|  |         DownloadOptions options; | ||||||
|  |         options.showProgress = DownloadOptions::no; | ||||||
|  |         return downloader->download(cacheUri + "/" + path, options).data; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static RegisterStoreImplementation regStore([](const std::string & uri) -> std::shared_ptr<Store> { | ||||||
|  |     if (std::string(uri, 0, 7) != "http://" && | ||||||
|  |         std::string(uri, 0, 8) != "https://") return 0; | ||||||
|  |     auto store = std::make_shared<HttpBinaryCacheStore>(std::shared_ptr<Store>(0), | ||||||
|  |         "", "", // FIXME: allow the signing key to be set
 | ||||||
|  |         uri); | ||||||
|  |     store->init(); | ||||||
|  |     return store; | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue