From 697350d1220f50c32043875b49c71c8a294098a4 Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Fri, 17 Aug 2012 10:25:21 -0700 Subject: make it more explicit that a bad build log causes us to rebuild (Committing this on top of b56fe80 since they're related, but I may end up reverting both.) --- src/build_log.cc | 9 ++++++--- src/build_log_test.cc | 2 +- src/ninja.cc | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/build_log.cc b/src/build_log.cc index e72a93e..73c2b5d 100644 --- a/src/build_log.cc +++ b/src/build_log.cc @@ -235,10 +235,13 @@ bool BuildLog::Load(const string& path, string* err) { sscanf(line_start, kFileSignature, &log_version); if (log_version < kOldestSupportedVersion) { - *err = "unable to extract version from build log, perhaps due to " - "being too old; you must clobber your build output and rebuild"; + *err = ("build log version invalid, perhaps due to being too old; " + "starting over"); fclose(file); - return false; + unlink(path.c_str()); + // Don't report this as a failure. An empty build log will cause + // us to rebuild the outputs anyway. + return true; } } diff --git a/src/build_log_test.cc b/src/build_log_test.cc index 186dad9..3005333 100644 --- a/src/build_log_test.cc +++ b/src/build_log_test.cc @@ -154,7 +154,7 @@ TEST_F(BuildLogTest, ObsoleteOldVersion) { string err; BuildLog log; - EXPECT_FALSE(log.Load(kTestFilename, &err)); + EXPECT_TRUE(log.Load(kTestFilename, &err)); ASSERT_NE(err.find("version"), string::npos); } diff --git a/src/ninja.cc b/src/ninja.cc index 00bd104..19438e5 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -759,6 +759,11 @@ reload: Error("loading build log %s: %s", log_path.c_str(), err.c_str()); return 1; } + if (!err.empty()) { + // Hack: Load() can return a warning via err by returning true. + Warning("%s", err.c_str()); + err.clear(); + } if (!build_log.OpenForWrite(log_path, &err)) { Error("opening build log: %s", err.c_str()); -- cgit v0.12