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.
This commit is contained in:
Linus Torvalds 2005-04-17 12:07:00 -07:00
Родитель 89d21f4b64
Коммит 01796b0e91
2 изменённых файлов: 11 добавлений и 7 удалений

Просмотреть файл

@ -186,7 +186,7 @@ int main(int argc, char **argv)
continue; continue;
} }
if (!get_sha1_hex(argv[i], head_sha1)) { if (!get_sha1_hex(argv[i], head_sha1)) {
mark_reachable(lookup_rev(head_sha1)); mark_reachable(lookup_rev(head_sha1), REACHABLE);
heads++; heads++;
continue; continue;
} }

Просмотреть файл

@ -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; struct parent *p = rev->parent;
/* If we've been here already, don't bother */ /* 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; p = p->next;
} }
} }
static unsigned long parse_commit_date(const char *buf) static unsigned long parse_commit_date(const char *buf)
{ {
unsigned long date;
if (memcmp(buf, "author", 6)) if (memcmp(buf, "author", 6))
return 0; return 0;
while (*buf++ != '\n') while (*buf++ != '\n')
@ -121,8 +123,10 @@ static unsigned long parse_commit_date(const char *buf)
return 0; return 0;
while (*buf++ != '>') while (*buf++ != '>')
/* nada */; /* nada */;
date = strtoul(buf, NULL, 10);
return 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)