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:
parent
89d21f4b64
commit
01796b0e91
@ -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;
|
||||
}
|
||||
|
16
revision.h
16
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)
|
||||
|
Loading…
Reference in New Issue
Block a user