about summary refs log tree commit diff
path: root/src/nix-env
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/main.cc24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/nix-env/main.cc b/src/nix-env/main.cc
index 6150b2fb6c00..7bced5be07a2 100644
--- a/src/nix-env/main.cc
+++ b/src/nix-env/main.cc
@@ -439,6 +439,7 @@ static void upgradeDerivations(EvalState & state,
     loadDerivations(state, nePath, availDrvs);
 
     /* Go through all installed derivations. */
+    DrvInfos newDrvs;
     for (DrvInfos::iterator i = installedDrvs.begin();
          i != installedDrvs.end(); ++i)
     {
@@ -455,31 +456,32 @@ static void upgradeDerivations(EvalState & state,
                 break;
             }
         }
-        if (!upgrade) continue;
 
         /* If yes, find the derivation in the input Nix expression
            with the same name and the highest version number. */
         DrvInfos::iterator bestDrv = i;
         DrvName bestName = drvName;
-        for (DrvInfos::iterator j = availDrvs.begin();
-             j != availDrvs.end(); ++j)
-        {
-            DrvName newName(j->second.name);
-            if (newName.name == bestName.name &&
-                compareVersions(newName.version, bestName.version) > 0)
-                bestDrv = j;
+        if (upgrade) {
+            for (DrvInfos::iterator j = availDrvs.begin();
+                 j != availDrvs.end(); ++j)
+            {
+                DrvName newName(j->second.name);
+                if (newName.name == bestName.name &&
+                    compareVersions(newName.version, bestName.version) > 0)
+                    bestDrv = j;
+            }
         }
 
         if (bestDrv != i) {
             printMsg(lvlInfo,
                 format("upgrading `%1%' to `%2%'")
                 % i->second.name % bestDrv->second.name);
-            installedDrvs.erase(i);
-            installedDrvs.insert(*bestDrv);
         }
+        
+        newDrvs.insert(*bestDrv);
     }
     
-    createUserEnv(state, installedDrvs, linkPath);
+    createUserEnv(state, newDrvs, linkPath);
 }