about summary refs log tree commit diff
path: root/src/nix-env
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-21T10·04+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-05-21T10·04+0200
commita1c1bf3a56fbe7c01dd86fa6b089a2a281f00fc4 (patch)
treec91c4c2db02d1f2e9bea4c7ec03352f7b41160bc /src/nix-env
parent1529db702b8eaf7b5699f08034ac3b501068d26d (diff)
parent12a888894bc528fbfa9d4c1ef2dbeb5909550894 (diff)
Merge branch 'submit/sparse-generation-symlinks' of https://github.com/ctheune/nix
Diffstat (limited to 'src/nix-env')
-rw-r--r--src/nix-env/profiles.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/nix-env/profiles.cc b/src/nix-env/profiles.cc
index d93d7fd80920..5b7a533df290 100644
--- a/src/nix-env/profiles.cc
+++ b/src/nix-env/profiles.cc
@@ -80,7 +80,25 @@ Path createGeneration(Path profile, Path outPath)
        previous ones. */
     int dummy;
     Generations gens = findGenerations(profile, dummy);
-    unsigned int num = gens.size() > 0 ? gens.back().number : 0;
+
+    unsigned int num;
+    if (gens.size() > 0) {
+        Generation last = gens.back();
+
+        if (readLink(last.path) == outPath) {
+            /* We only create a new generation symlink if it differs
+               from the last one.
+
+               This helps keeping gratuitous installs/rebuilds from piling
+               up uncontrolled numbers of generations, cluttering up the
+               UI like grub. */
+            return last.path;
+        }
+
+        num = gens.back().number;
+    } else {
+        num = 0;
+    }
 
     /* Create the new generation.  Note that addPermRoot() blocks if
        the garbage collector is running to prevent the stuff we've