From 630ae0c9d7f65a2d6bef85a5194b4d704e54eded Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 1 Feb 2005 13:48:46 +0000 Subject: * 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. --- src/nix-instantiate/main.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/nix-instantiate') 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 -- cgit 1.4.1