Make "revision.h" slightly better to use.
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 17 Apr 2005 19:07:00 +0000 (12:07 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 17 Apr 2005 19:07:00 +0000 (12:07 -0700)
 - 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
revision.h

index 3fbcd2c..a8050f8 100644 (file)
@@ -186,7 +186,7 @@ int main(int argc, char **argv)
                        continue;
                }
                if (!get_sha1_hex(argv[i], head_sha1)) {
                        continue;
                }
                if (!get_sha1_hex(argv[i], head_sha1)) {
-                       mark_reachable(lookup_rev(head_sha1));
+                       mark_reachable(lookup_rev(head_sha1), REACHABLE);
                        heads++;
                        continue;
                }
                        heads++;
                        continue;
                }
index 2bad6c0..f965f3f 100644 (file)
@@ -97,22 +97,24 @@ static struct revision *add_relationship(struct revision *rev, unsigned char *ne
        return parent_rev;
 }
 
        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 */
 {
        struct parent *p = rev->parent;
 
        /* If we've been here already, don't bother */
-       if (rev->flags & REACHABLE)
+       if (rev->flags & mask)
                return;
                return;
-       rev->flags |= REACHABLE | USED;
+       rev->flags |= mask | USED;
        while (p) {
        while (p) {
-               mark_reachable(p->parent);
+               mark_reachable(p->parent, mask);
                p = p->next;
        }
 }
 
 static unsigned long parse_commit_date(const char *buf)
 {
                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')
        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 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)
 }
 
 static int parse_commit(unsigned char *sha1)