daemon: Fix --repair failure on multiple-output derivations.
authorEelco Dolstra <eelco.dolstra@logicblox.com>
Wed, 6 Jan 2016 20:49:32 +0000 (21:49 +0100)
committerLudovic Courtès <ludo@gnu.org>
Tue, 31 May 2016 12:25:28 +0000 (14:25 +0200)
If repair found a corrupted/missing path that depended on a
multiple-output derivation, and some of the outputs of the latter were
not present, it failed with a message like

  error: path ‘/nix/store/cnfn9d5fjys1y93cz9shld2xwaibd7nn-bash-4.3-p42-doc’ is not valid

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
nix/libstore/build.cc

index f0f60d7..bbcb55a 100644 (file)
@@ -1106,8 +1106,10 @@ void DerivationGoal::repairClosure()
 
     /* Get the output closure. */
     PathSet outputClosure;
-    foreach (DerivationOutputs::iterator, i, drv.outputs)
+    foreach (DerivationOutputs::iterator, i, drv.outputs) {
+        if (!wantOutput(i->first, wantedOutputs)) continue;
         computeFSClosure(worker.store, i->second.path, outputClosure);
+    }
 
     /* Filter out our own outputs (which we have already checked). */
     foreach (DerivationOutputs::iterator, i, drv.outputs)