drop support of log formats < 4
authorEvan Martin <martine@danga.com>
Mon, 18 Jun 2012 22:47:38 +0000 (15:47 -0700)
committerEvan Martin <martine@danga.com>
Mon, 18 Jun 2012 22:59:13 +0000 (15:59 -0700)
Log format 4 was introduced in January.
There's been plenty of time to migrate.

src/build_log.cc
src/build_log_test.cc

index 4baff42..86b660f 100644 (file)
@@ -39,6 +39,7 @@
 namespace {
 
 const char kFileSignature[] = "# ninja log v%d\n";
+const int kOldestSupportedVersion = 4;
 const int kCurrentVersion = 5;
 
 // 64bit MurmurHash2, by Austin Appleby
@@ -229,19 +230,23 @@ bool BuildLog::Load(const string& path, string* err) {
   char* line_end = 0;
   while (reader.ReadLine(&line_start, &line_end)) {
     if (!log_version) {
-      log_version = 1;  // Assume by default.
-      if (sscanf(line_start, kFileSignature, &log_version) > 0)
-        continue;
+      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";
+        return false;
+      }
     }
 
     // If no newline was found in this chunk, read the next.
     if (!line_end)
       continue;
 
-    char field_separator = log_version >= 4 ? '\t' : ' ';
+    const char kFieldSeparator = '\t';
 
     char* start = line_start;
-    char* end = (char*)memchr(start, field_separator, line_end - start);
+    char* end = (char*)memchr(start, kFieldSeparator, line_end - start);
     if (!end)
       continue;
     *end = 0;
@@ -252,21 +257,21 @@ bool BuildLog::Load(const string& path, string* err) {
     start_time = atoi(start);
     start = end + 1;
 
-    end = (char*)memchr(start, field_separator, line_end - start);
+    end = (char*)memchr(start, kFieldSeparator, line_end - start);
     if (!end)
       continue;
     *end = 0;
     end_time = atoi(start);
     start = end + 1;
 
-    end = (char*)memchr(start, field_separator, line_end - start);
+    end = (char*)memchr(start, kFieldSeparator, line_end - start);
     if (!end)
       continue;
     *end = 0;
     restat_mtime = atol(start);
     start = end + 1;
 
-    end = (char*)memchr(start, field_separator, line_end - start);
+    end = (char*)memchr(start, kFieldSeparator, line_end - start);
     if (!end)
       continue;
     string output = string(start, end - start);
@@ -293,10 +298,10 @@ bool BuildLog::Load(const string& path, string* err) {
       char c = *end; *end = '\0';
       entry->command_hash = (uint64_t)strtoull(start, NULL, 10);
       *end = c;
-    }
-    else
+    } else {
       entry->command_hash = LogEntry::HashCommand(StringPiece(start,
                                                               end - start));
+    }
   }
   fclose(file);
 
index afd3b81..9fb42c9 100644 (file)
@@ -98,9 +98,9 @@ TEST_F(BuildLogTest, FirstWriteAddsSignature) {
 
 TEST_F(BuildLogTest, DoubleEntry) {
   FILE* f = fopen(kTestFilename, "wb");
-  fprintf(f, "# ninja log v3\n");
-  fprintf(f, "0 1 2 out command abc\n");
-  fprintf(f, "3 4 5 out command def\n");
+  fprintf(f, "# ninja log v4\n");
+  fprintf(f, "0\t1\t2\tout\tcommand abc\n");
+  fprintf(f, "3\t4\t5\tout\tcommand def\n");
   fclose(f);
 
   string err;
@@ -148,7 +148,7 @@ TEST_F(BuildLogTest, Truncate) {
   }
 }
 
-TEST_F(BuildLogTest, UpgradeV3) {
+TEST_F(BuildLogTest, ObsoleteOldVersion) {
   FILE* f = fopen(kTestFilename, "wb");
   fprintf(f, "# ninja log v3\n");
   fprintf(f, "123 456 0 out command\n");
@@ -156,15 +156,8 @@ TEST_F(BuildLogTest, UpgradeV3) {
 
   string err;
   BuildLog log;
-  EXPECT_TRUE(log.Load(kTestFilename, &err));
-  ASSERT_EQ("", err);
-
-  BuildLog::LogEntry* e = log.LookupByOutput("out");
-  ASSERT_TRUE(e);
-  ASSERT_EQ(123, e->start_time);
-  ASSERT_EQ(456, e->end_time);
-  ASSERT_EQ(0, e->restat_mtime);
-  ASSERT_NO_FATAL_FAILURE(AssertHash("command", e->command_hash));
+  EXPECT_FALSE(log.Load(kTestFilename, &err));
+  ASSERT_NE(err.find("version"), string::npos);
 }
 
 TEST_F(BuildLogTest, SpacesInOutputV4) {