forked from lix-project/lix
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
|
@ -35,7 +35,6 @@ template<class T> T readStorePaths(Source & from)
|
||||||
}
|
}
|
||||||
|
|
||||||
template PathSet readStorePaths(Source & from);
|
template PathSet readStorePaths(Source & from);
|
||||||
template Paths readStorePaths(Source & from);
|
|
||||||
|
|
||||||
|
|
||||||
RemoteStore::RemoteStore()
|
RemoteStore::RemoteStore()
|
||||||
|
|
|
@ -992,7 +992,9 @@ static void opServe(Strings opFlags, Strings opArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
case cmdExportPaths: {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,8 @@ let
|
||||||
system = "i686-linux";
|
system = "i686-linux";
|
||||||
PATH = "''${utils}/bin";
|
PATH = "''${utils}/bin";
|
||||||
builder = "''${utils}/bin/sh";
|
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.
|
# And a parallel build.
|
||||||
my ($out1, $out2) = split /\s/,
|
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");
|
$slave1->succeed("test -e $out1 -o -e $out2");
|
||||||
$slave2->succeed("test -e $out1 -o -e $out2");
|
$slave2->succeed("test -e $out1 -o -e $out2");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue