build-remote.pl: Fix building multiple output derivations
We were importing paths without sorting them topologically, leading to "path is not valid" errors. See e.g. http://hydra.nixos.org/build/12451761
This commit is contained in:
		
							parent
							
								
									b2e0293f02
								
							
						
					
					
						commit
						fa13d3f4f3
					
				
					 3 changed files with 6 additions and 4 deletions
				
			
		|  | @ -35,7 +35,6 @@ template<class T> T readStorePaths(Source & from) | |||
| } | ||||
| 
 | ||||
| template PathSet readStorePaths(Source & from); | ||||
| template Paths readStorePaths(Source & from); | ||||
| 
 | ||||
| 
 | ||||
| RemoteStore::RemoteStore() | ||||
|  |  | |||
|  | @ -992,7 +992,9 @@ static void opServe(Strings opFlags, Strings opArgs) | |||
|             } | ||||
| 
 | ||||
|             case cmdExportPaths: { | ||||
|                 exportPaths(*store, readStorePaths<Paths>(in), false, out); | ||||
|                 Paths sorted = topoSortPaths(*store, readStorePaths<PathSet>(in)); | ||||
|                 reverse(sorted.begin(), sorted.end()); | ||||
|                 exportPaths(*store, sorted, false, out); | ||||
|                 break; | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -25,7 +25,8 @@ let | |||
|         system = "i686-linux"; | ||||
|         PATH = "''${utils}/bin"; | ||||
|         builder = "''${utils}/bin/sh"; | ||||
|         args = [ "-c" "echo Hello; mkdir $out; cat /proc/sys/kernel/hostname > $out/host; sleep 3" ]; | ||||
|         args = [ "-c" "echo Hello; mkdir $out $foo; cat /proc/sys/kernel/hostname > $out/host; ln -s $out $foo/bar; sleep 5" ]; | ||||
|         outputs = [ "out" "foo" ]; | ||||
|       } | ||||
|     ''; | ||||
| 
 | ||||
|  | @ -86,7 +87,7 @@ in | |||
| 
 | ||||
|       # And a parallel build. | ||||
|       my ($out1, $out2) = split /\s/, | ||||
|           $client->succeed("nix-store -r \$(nix-instantiate ${expr nodes.client.config 2} ${expr nodes.client.config 3})"); | ||||
|           $client->succeed('nix-store -r $(nix-instantiate ${expr nodes.client.config 2})\!out $(nix-instantiate ${expr nodes.client.config 3})\!out'); | ||||
|       $slave1->succeed("test -e $out1 -o -e $out2"); | ||||
|       $slave2->succeed("test -e $out1 -o -e $out2"); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue