about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/exec.cc6
-rw-r--r--src/globals.cc3
-rw-r--r--src/globals.hh6
-rw-r--r--src/nix-help.txt1
-rw-r--r--src/nix.cc2
5 files changed, 17 insertions, 1 deletions
diff --git a/src/exec.cc b/src/exec.cc
index d82f5effaaea..fdfb467cca71 100644
--- a/src/exec.cc
+++ b/src/exec.cc
@@ -122,7 +122,11 @@ void runProgram(const string & program,
         throw Error("unable to wait for child");
     
     if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
-        delTmpDir.cancel();
+	if (keepFailed) {
+	    msg(lvlTalkative, 
+		format("build failed; keeping build directory `%1%'") % tmpDir);
+	    delTmpDir.cancel();
+	}
         throw Error("unable to build package");
     }
 }
diff --git a/src/globals.cc b/src/globals.cc
index 1ec0c4f9ba21..f21820f59771 100644
--- a/src/globals.cc
+++ b/src/globals.cc
@@ -17,6 +17,9 @@ string nixLogDir = "/UNINIT";
 string nixDBPath = "/UNINIT";
 
 
+bool keepFailed = false;
+
+
 void openDB()
 {
     nixDB.open(nixDBPath);
diff --git a/src/globals.hh b/src/globals.hh
index 2c4d3392077d..107d617bc895 100644
--- a/src/globals.hh
+++ b/src/globals.hh
@@ -69,6 +69,12 @@ extern string nixLogDir;
 extern string nixDBPath;
 
 
+/* Misc. global flags. */
+
+/* Whether to keep temporary directories of failed builds. */
+extern bool keepFailed;
+
+
 /* Open the database environment. */
 void openDB();
 
diff --git a/src/nix-help.txt b/src/nix-help.txt
index 0e54d162de05..4e1d707c8926 100644
--- a/src/nix-help.txt
+++ b/src/nix-help.txt
@@ -34,3 +34,4 @@ Query flags:
 Options:
 
   --verbose / -v: verbose operation (may be repeated)
+  --keep-failed / -K: keep temporary directories of failed builds
diff --git a/src/nix.cc b/src/nix.cc
index 4beeb5da8943..704442c313e4 100644
--- a/src/nix.cc
+++ b/src/nix.cc
@@ -372,6 +372,8 @@ void run(Strings args)
             pathArgs = true;
         else if (arg == "--verbose" || arg == "-v")
             verbosity = (Verbosity) ((int) verbosity + 1);
+        else if (arg == "--keep-failed" || arg == "-K")
+            keepFailed = true;
         else if (arg == "--help")
             printHelp();
         else if (arg[0] == '-')