about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/normalise.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/normalise.cc b/src/normalise.cc
index 3f138a53eafd..2fa6f7f4011c 100644
--- a/src/normalise.cc
+++ b/src/normalise.cc
@@ -152,11 +152,20 @@ FSId normaliseFState(FSId id, FSIdSet pending)
 
     if (!fastBuild) {
 
-        /* Check that none of the outputs exist. */
+        /* If any of the outputs already exist but are not registered,
+           delete them. */
         for (OutPaths::iterator i = outPaths.begin(); 
              i != outPaths.end(); i++)
-            if (pathExists(i->first))
-                throw Error(format("path `%1%' exists") % i->first);
+        {
+            string path = i->first;
+            FSId id;
+            if (queryPathId(path, id))
+                throw Error(format("obstructed build: path `%1%' exists") % path);
+            if (pathExists(path)) {
+                debug(format("removing unregistered path `%1%'") % path);
+                deletePath(path);
+            }
+        }
 
         /* Run the builder. */
         msg(lvlChatty, format("building..."));