aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-01-15 22:15:37 -0800
committerJunio C Hamano <junkio@cox.net>2006-01-15 22:15:37 -0800
commit181dc776956b4d265891ac70514ed214e4b7564a (patch)
tree9cec4e555400d7df29d9c110f9ac12abed8ae110
parent7cb038a692ec0bdc0f442380678e8e87e26d4e68 (diff)
downloadgit-181dc776956b4d265891ac70514ed214e4b7564a.tar.gz
git-181dc776956b4d265891ac70514ed214e4b7564a.tar.xz
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>
-rw-r--r--commit.c6
-rw-r--r--describe.c7
2 files changed, 8 insertions, 5 deletions
diff --git a/commit.c b/commit.c
index 56efc69f1..b8bf35e86 100644
--- a/commit.c
+++ b/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;
}
}
diff --git a/describe.c b/describe.c
index 5548a16e4..cc95eb0f2 100644
--- a/describe.c
+++ b/describe.c
@@ -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;
}