about summary refs log tree commit diff
path: root/src/nix-instantiate/main.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-02-01T13·48+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-02-01T13·48+0000
commit630ae0c9d7f65a2d6bef85a5194b4d704e54eded (patch)
tree1cbb2dce71e58abb4617239857bbd144b1f355c1 /src/nix-instantiate/main.cc
parentdcc37c236c66ba463bd61fec23d046485d8a412f (diff)
* nix-build: use an indirection scheme to make it easier for users to
  get rid of GC roots.  Nix-build places a symlink `result' in the
  current directory.  Previously, removing that symlink would not
  remove the store path being linked to as a GC root.  Now, the GC
  root created by nix-build is actually a symlink in
  `/nix/var/nix/gcroots/auto' to `result'.  So if that symlink is
  removed the GC root automatically becomes invalid (since it can no
  longer be resolved).  The root itself is not automatically removed -
  the garbage collector should delete dangling roots.

Diffstat (limited to 'src/nix-instantiate/main.cc')
-rw-r--r--src/nix-instantiate/main.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc
index 7d12c201fb14..3e9fad4ae4c3 100644
--- a/src/nix-instantiate/main.cc
+++ b/src/nix-instantiate/main.cc
@@ -29,6 +29,7 @@ static Expr evalStdin(EvalState & state, bool parseOnly)
 
 static Path gcRoot;
 static int rootNr = 0;
+static bool indirectRoot = false;
 
 
 /* Print out the paths of the resulting derivation(s).  If the user
@@ -51,7 +52,8 @@ static void printDrvPaths(EvalState & state, Expr e)
                     printGCWarning();
                 else
                     drvPath = addPermRoot(drvPath,
-                        makeRootName(gcRoot, rootNr));
+                        makeRootName(gcRoot, rootNr),
+                        indirectRoot);
                 cout << format("%1%\n") % drvPath;
                 return;
             }
@@ -110,8 +112,10 @@ void run(Strings args)
         else if (arg == "--add-root") {
             if (i == args.end())
                 throw UsageError("`--add-root requires an argument");
-            gcRoot = *i++;
+            gcRoot = absPath(*i++);
         }
+        else if (arg == "--indirect")
+            indirectRoot = true;
         else if (arg[0] == '-')
             throw UsageError(format("unknown flag `%1%`") % arg);
         else