diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01 13:48:46 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01 13:48:46 +0000 |
commit | 630ae0c9d7f65a2d6bef85a5194b4d704e54eded (patch) | |
tree | 1cbb2dce71e58abb4617239857bbd144b1f355c1 /src/nix-instantiate/main.cc | |
parent | dcc37c236c66ba463bd61fec23d046485d8a412f (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.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index 7d12c201f..3e9fad4ae 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 |