aboutsummaryrefslogtreecommitdiff
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 3f138a53e..2fa6f7f40 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..."));