summaryrefslogtreecommitdiffstats
path: root/src/build_log.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-06-18 22:47:38 (GMT)
committerEvan Martin <martine@danga.com>2012-06-18 22:59:13 (GMT)
commit91b986fe22f327df3ed69234f4472d10e5bd883f (patch)
tree9e7f74a187002622c114872165034d622ef95d09 /src/build_log.cc
parentb77614301e032e19e7cb2b3b5a6dea9464c05a5e (diff)
downloadNinja-91b986fe22f327df3ed69234f4472d10e5bd883f.zip
Ninja-91b986fe22f327df3ed69234f4472d10e5bd883f.tar.gz
Ninja-91b986fe22f327df3ed69234f4472d10e5bd883f.tar.bz2
drop support of log formats < 4
Log format 4 was introduced in January. There's been plenty of time to migrate.
Diffstat (limited to 'src/build_log.cc')
-rw-r--r--src/build_log.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/build_log.cc b/src/build_log.cc
index 4baff42..86b660f 100644
--- a/src/build_log.cc
+++ b/src/build_log.cc
@@ -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);