Implement nar-based addToStore for remote-store
This commit is contained in:
		
							parent
							
								
									ecba88de93
								
							
						
					
					
						commit
						584f8a62de
					
				
					 3 changed files with 31 additions and 2 deletions
				
			
		|  | @ -345,7 +345,12 @@ Path RemoteStore::queryPathFromHashPart(const string & hashPart) | |||
| void RemoteStore::addToStore(const ValidPathInfo & info, const std::string & nar, | ||||
|     bool repair, bool dontCheckSigs) | ||||
| { | ||||
|     throw Error("RemoteStore::addToStore() not implemented"); | ||||
|     auto conn(connections->get()); | ||||
|     conn->to << wopAddToStoreNar | ||||
|              << info.path << info.deriver << printHash(info.narHash) | ||||
|              << info.references << info.registrationTime << info.narSize | ||||
|              << info.ultimate << info.sigs << nar << repair << dontCheckSigs; | ||||
|     conn->processStderr(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,7 +46,8 @@ typedef enum { | |||
|     wopVerifyStore = 35, | ||||
|     wopBuildDerivation = 36, | ||||
|     wopAddSignatures = 37, | ||||
|     wopNarFromPath = 38 | ||||
|     wopNarFromPath = 38, | ||||
|     wopAddToStoreNar = 39 | ||||
| } WorkerOp; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -579,7 +579,30 @@ static void performOp(ref<LocalStore> store, bool trusted, unsigned int clientVe | |||
|     case wopNarFromPath: { | ||||
|         auto path = readStorePath(*store, from); | ||||
|         startWork(); | ||||
|         stopWork(); | ||||
|         dumpPath(path, to); | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     case wopAddToStoreNar: { | ||||
|         ValidPathInfo info; | ||||
|         info.path = readStorePath(*store, from); | ||||
|         info.deriver = readString(from); | ||||
|         if (!info.deriver.empty()) | ||||
|             store->assertStorePath(info.deriver); | ||||
|         info.narHash = parseHash(htSHA256, readString(from)); | ||||
|         info.references = readStorePaths<PathSet>(*store, from); | ||||
|         info.registrationTime = readInt(from); | ||||
|         info.narSize = readLongLong(from); | ||||
|         info.ultimate = readLongLong(from); | ||||
|         info.sigs = readStrings<StringSet>(from); | ||||
|         auto nar = readString(from); | ||||
|         auto repair = readInt(from) ? true : false; | ||||
|         auto dontCheckSigs = readInt(from) ? true : false; | ||||
|         if (!trusted && dontCheckSigs) | ||||
|             dontCheckSigs = false; | ||||
|         startWork(); | ||||
|         store->addToStore(info, nar, repair, dontCheckSigs); | ||||
|         stopWork(); | ||||
|         break; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue