about summary refs log tree commit diff
path: root/src/nix-store/nix-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2009-11-23T17·23+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2009-11-23T17·23+0000
commitae6bf87273b30258408dc292611f3f50015b843c (patch)
tree78c8140f4d93888ab927dd9db317dfd21981ebc5 /src/nix-store/nix-store.cc
parentc364d5d1e36a9f790b0d610aae1d30d8732b58ce (diff)
* `nix-store --gc --print-roots': also print the path of the actual
  root symlink, not just its target.  E.g.:

  /nix/var/nix/profiles/system-99-link -> /nix/store/76kwf88657nq7wgk1hx3l1z5q91zb9wd-system

Diffstat (limited to 'src/nix-store/nix-store.cc')
-rw-r--r--src/nix-store/nix-store.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index 3740d0bf9546..b951393092b9 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -520,6 +520,7 @@ struct PrintFreed
 
 static void opGC(Strings opFlags, Strings opArgs)
 {
+    bool printRoots = false;
     GCOptions options;
     options.action = GCOptions::gcDeleteDead;
     
@@ -527,7 +528,7 @@ static void opGC(Strings opFlags, Strings opArgs)
     
     /* Do what? */
     foreach (Strings::iterator, i, opFlags)
-        if (*i == "--print-roots") options.action = GCOptions::gcReturnRoots;
+        if (*i == "--print-roots") printRoots = true;
         else if (*i == "--print-live") options.action = GCOptions::gcReturnLive;
         else if (*i == "--print-dead") options.action = GCOptions::gcReturnDead;
         else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
@@ -539,13 +540,21 @@ static void opGC(Strings opFlags, Strings opArgs)
         else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
 
     if (!opArgs.empty()) throw UsageError("no arguments expected");
-    
-    PrintFreed freed(options.action == GCOptions::gcDeleteDead, results);
-    store->collectGarbage(options, results);
 
-    if (options.action != GCOptions::gcDeleteDead)
-        foreach (PathSet::iterator, i, results.paths)
-            cout << *i << std::endl;
+    if (printRoots) {
+        Roots roots = store->findRoots();
+        foreach (Roots::iterator, i, roots)
+            cout << i->first << " -> " << i->second << std::endl;
+    }
+
+    else {
+        PrintFreed freed(options.action == GCOptions::gcDeleteDead, results);
+        store->collectGarbage(options, results);
+
+        if (options.action != GCOptions::gcDeleteDead)
+            foreach (PathSet::iterator, i, results.paths)
+                cout << *i << std::endl;
+    }
 }