* Substitute fixes.

This commit is contained in:
Eelco Dolstra 2003-07-16 20:00:51 +00:00
parent b9ecadee6e
commit 9d56ca219f
8 changed files with 86 additions and 36 deletions

View file

@ -21,15 +21,22 @@ typedef map<string, string> Environment;
class AutoDelete
{
string path;
bool del;
public:
AutoDelete(const string & p) : path(p)
{
del = true;
}
~AutoDelete()
{
deletePath(path);
if (del) deletePath(path);
}
void cancel()
{
del = false;
}
};
@ -114,8 +121,10 @@ static void runProgram(const string & program, Environment env)
if (waitpid(pid, &status, 0) != pid)
throw Error("unable to wait for child");
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
delTmpDir.cancel();
throw Error("unable to build package");
}
}
@ -336,7 +345,7 @@ static Slice normaliseFState2(FSId id, StringSet & usedPaths)
bnds = ATgetNext(bnds);
}
/* Check that none of the output paths exist. */
/* Parse the outputs. */
typedef map<string, FSId> OutPaths;
OutPaths outPaths;
while (!ATisEmpty(outs)) {
@ -349,14 +358,36 @@ static Slice normaliseFState2(FSId id, StringSet & usedPaths)
outs = ATgetNext(outs);
}
/* We can skip running the builder if we can expand all output
paths from their ids. */
bool fastBuild = false;
#if 0
for (OutPaths::iterator i = outPaths.begin();
i != outPaths.end(); i++)
if (pathExists(i->first))
throw Error(format("path `%1%' exists") % i->first);
{
try {
expandId(i->second, i->first);
} catch (...) {
fastBuild = false;
break;
}
}
#endif
/* Run the builder. */
runProgram(builder, env);
if (!fastBuild) {
/* Check that none of the outputs exist. */
for (OutPaths::iterator i = outPaths.begin();
i != outPaths.end(); i++)
if (pathExists(i->first))
throw Error(format("path `%1%' exists") % i->first);
/* Run the builder. */
runProgram(builder, env);
} else
debug(format("skipping build"));
Slice slice;
/* Check whether the output paths were created, and register each