From 01796b0e9180f92ed23aa8dc2261857b9dec7d13 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 17 Apr 2005 12:07:00 -0700 Subject: [PATCH] Make "revision.h" slightly better to use. - mark_reachable() can be more generic, marking the reachable revisions with an arbitrary mask. - date parsing will parse to a date of 0 rather than ULONG_MAX for the bad old case, sorting the dates correctly. --- fsck-cache.c | 2 +- revision.h | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/fsck-cache.c b/fsck-cache.c index 3fbcd2c7e9..a8050f84a9 100644 --- a/fsck-cache.c +++ b/fsck-cache.c @@ -186,7 +186,7 @@ int main(int argc, char **argv) continue; } if (!get_sha1_hex(argv[i], head_sha1)) { - mark_reachable(lookup_rev(head_sha1)); + mark_reachable(lookup_rev(head_sha1), REACHABLE); heads++; continue; } diff --git a/revision.h b/revision.h index 2bad6c01a4..f965f3fc5f 100644 --- a/revision.h +++ b/revision.h @@ -97,22 +97,24 @@ static struct revision *add_relationship(struct revision *rev, unsigned char *ne return parent_rev; } -static void mark_reachable(struct revision *rev) +static void mark_reachable(struct revision *rev, unsigned int mask) { struct parent *p = rev->parent; /* If we've been here already, don't bother */ - if (rev->flags & REACHABLE) + if (rev->flags & mask) return; - rev->flags |= REACHABLE | USED; + rev->flags |= mask | USED; while (p) { - mark_reachable(p->parent); + mark_reachable(p->parent, mask); p = p->next; } } static unsigned long parse_commit_date(const char *buf) { + unsigned long date; + if (memcmp(buf, "author", 6)) return 0; while (*buf++ != '\n') @@ -121,8 +123,10 @@ static unsigned long parse_commit_date(const char *buf) return 0; while (*buf++ != '>') /* nada */; - - return strtoul(buf, NULL, 10); + date = strtoul(buf, NULL, 10); + if (date == ULONG_MAX) + date = 0; + return date; } static int parse_commit(unsigned char *sha1)