aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-08-19 09:04:47 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-08-19 09:04:47 +0000
commit2de850479101e5a378c87d1392ea03c63ce224cf (patch)
tree4a7782e4ec3439cc73311d68e272546c486f9116
parent31e4aa64396858e3b6ef8477397c84cbd80670fc (diff)
* Delete the temporary directories of failed builds by default, and an
option `--keep-failed' to override this behaviour.
-rw-r--r--doc/manual/nix-reference.xml17
-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
6 files changed, 34 insertions, 1 deletions
diff --git a/doc/manual/nix-reference.xml b/doc/manual/nix-reference.xml
index 75009b1d0..d9c78ff07 100644
--- a/doc/manual/nix-reference.xml
+++ b/doc/manual/nix-reference.xml
@@ -15,6 +15,10 @@
<arg><option>--verbose</option></arg>
<arg><option>-v</option></arg>
</group>
+ <group choice='opt' rep='repeat'>
+ <arg><option>--keep-failed</option></arg>
+ <arg><option>-K</option></arg>
+ </group>
<arg choice='plain'><replaceable>operation</replaceable></arg>
<arg rep='repeat'><replaceable>options</replaceable></arg>
<arg rep='repeat'><replaceable>arguments</replaceable></arg>
@@ -121,6 +125,19 @@
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><option>--keep-failed</option></term>
+ <listitem>
+ <para>
+ Specifies that in case of a build failure, the temporary directory
+ (usually in <filename>/tmp</filename>) in which the build takes
+ place should not be deleted. The path of the build directory is
+ printed as an informational message.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</refsect1>
diff --git a/src/exec.cc b/src/exec.cc
index d82f5effa..fdfb467cc 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 1ec0c4f9b..f21820f59 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 2c4d33920..107d617bc 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 0e54d162d..4e1d707c8 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 4beeb5da8..704442c31 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] == '-')