daemon: Add 'buildMode' parameter to 'buildPaths' RPC
This commit is contained in:
		
							parent
							
								
									8063fc497a
								
							
						
					
					
						commit
						d1e3bf01bc
					
				
					 3 changed files with 20 additions and 5 deletions
				
			
		|  | @ -438,12 +438,18 @@ Paths RemoteStore::importPaths(bool requireSignature, Source & source) | |||
| 
 | ||||
| void RemoteStore::buildPaths(const PathSet & drvPaths, BuildMode buildMode) | ||||
| { | ||||
|     if (buildMode != bmNormal) throw Error("repairing or checking is not supported when building through the Nix daemon"); | ||||
|     openConnection(); | ||||
|     to << wopBuildPaths; | ||||
|     if (GET_PROTOCOL_MINOR(daemonVersion) >= 13) | ||||
|     if (GET_PROTOCOL_MINOR(daemonVersion) >= 13) { | ||||
|         to << drvPaths; | ||||
|     else { | ||||
|         if (GET_PROTOCOL_MINOR(daemonVersion) >= 15) | ||||
|             to << buildMode; | ||||
|         else | ||||
|             /* Old daemons did not take a 'buildMode' parameter, so we
 | ||||
|                need to validate it here on the client side.  */ | ||||
|             if (buildMode != bmNormal) | ||||
|                 throw Error("repairing or checking is not supported when building through the Nix daemon"); | ||||
|     } else { | ||||
|         /* For backwards compatibility with old daemons, strip output
 | ||||
|            identifiers. */ | ||||
|         PathSet drvPaths2; | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ namespace nix { | |||
| #define WORKER_MAGIC_1 0x6e697863 | ||||
| #define WORKER_MAGIC_2 0x6478696f | ||||
| 
 | ||||
| #define PROTOCOL_VERSION 0x10e | ||||
| #define PROTOCOL_VERSION 0x10f | ||||
| #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00) | ||||
| #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff) | ||||
| 
 | ||||
|  |  | |||
|  | @ -319,8 +319,17 @@ static void performOp(bool trusted, unsigned int clientVersion, | |||
| 
 | ||||
|     case wopBuildPaths: { | ||||
|         PathSet drvs = readStorePaths<PathSet>(from); | ||||
|         BuildMode mode = bmNormal; | ||||
|         if (GET_PROTOCOL_MINOR(clientVersion) >= 15) { | ||||
|             mode = (BuildMode)readInt(from); | ||||
| 
 | ||||
| 	    /* Repairing is not atomic, so disallowed for "untrusted"
 | ||||
| 	       clients.  */ | ||||
|             if (mode == bmRepair && !trusted) | ||||
|                 throw Error("repairing is not supported when building through the Nix daemon"); | ||||
|         } | ||||
|         startWork(); | ||||
|         store->buildPaths(drvs); | ||||
|         store->buildPaths(drvs, mode); | ||||
|         stopWork(); | ||||
|         to << 1; | ||||
|         break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue