diff options
author | Nico Weber <nicolasweber@gmx.de> | 2013-04-29 07:42:21 (GMT) |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2013-04-29 07:42:21 (GMT) |
commit | 92f48ca30762447864ef808cf62ccd1ca76cd23d (patch) | |
tree | 2c91a4dad7586b068d51e673d6d9edd26223ba70 /src | |
parent | 3699cb6aa2fb29125bf725cb50fbcc593da8a8a1 (diff) | |
download | Ninja-92f48ca30762447864ef808cf62ccd1ca76cd23d.zip Ninja-92f48ca30762447864ef808cf62ccd1ca76cd23d.tar.gz Ninja-92f48ca30762447864ef808cf62ccd1ca76cd23d.tar.bz2 |
Make sure that recompaction writes a pristine new depslog.
...even if a prior run of DepsLog::Recompact() exited without cleaning
up, for example due to a crash or because someone added a `return true;`
in the middle of the function while debugging. Or because someone hits
ctrl-c during deps log recompaction.
No test, because I can't think of a way to trigger this scenario
programmatically.
Part of issue #554.
Diffstat (limited to 'src')
-rw-r--r-- | src/deps_log.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/deps_log.cc b/src/deps_log.cc index c52503b..d0d0202 100644 --- a/src/deps_log.cc +++ b/src/deps_log.cc @@ -244,6 +244,11 @@ bool DepsLog::Recompact(const string& path, string* err) { printf("Recompacting deps...\n"); string temp_path = path + ".recompact"; + + // OpenForWrite() opens for append. Make sure it's not appending to a + // left-over file from a previous recompaction attempt that crashed somehow. + unlink(temp_path.c_str()); + DepsLog new_log; if (!new_log.OpenForWrite(temp_path, err)) return false; |