mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
describe: omit clearing marks on the last one.
When describing more than one, we need to clear the commit marks before handling the next one, but most of the time we are running it for only one commit, and in such a case this clearing phase is totally unnecessary. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7cb038a692
commit
181dc77695
6
commit.c
6
commit.c
|
@ -359,8 +359,10 @@ void clear_commit_marks(struct commit *commit, unsigned int mark)
|
|||
parents = commit->parents;
|
||||
commit->object.flags &= ~mark;
|
||||
while (parents) {
|
||||
if (parents->item && parents->item->object.parsed)
|
||||
clear_commit_marks(parents->item, mark);
|
||||
struct commit *parent = parents->item;
|
||||
if (parent && parent->object.parsed &&
|
||||
(parent->object.flags & mark))
|
||||
clear_commit_marks(parent, mark);
|
||||
parents = parents->next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ static int compare_names(const void *_a, const void *_b)
|
|||
return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
|
||||
}
|
||||
|
||||
static void describe(struct commit *cmit)
|
||||
static void describe(struct commit *cmit, int last_one)
|
||||
{
|
||||
struct commit_list *list;
|
||||
static int initialized = 0;
|
||||
|
@ -124,7 +124,8 @@ static void describe(struct commit *cmit)
|
|||
if (n) {
|
||||
printf("%s-g%s\n", n->path,
|
||||
find_unique_abbrev(cmit->object.sha1, abbrev));
|
||||
clear_commit_marks(cmit, SEEN);
|
||||
if (!last_one)
|
||||
clear_commit_marks(cmit, SEEN);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +160,7 @@ int main(int argc, char **argv)
|
|||
cmit = lookup_commit_reference(sha1);
|
||||
if (!cmit)
|
||||
usage(describe_usage);
|
||||
describe(cmit);
|
||||
describe(cmit, i == argc - 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue