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>
diff --git a/commit.c b/commit.c
index 56efc69..b8bf35e 100644
--- a/commit.c
+++ b/commit.c
@@ -359,8 +359,10 @@
 	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 5548a16..cc95eb0 100644
--- a/describe.c
+++ b/describe.c
@@ -98,7 +98,7 @@
 	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 @@
 		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 @@
 		cmit = lookup_commit_reference(sha1);
 		if (!cmit)
 			usage(describe_usage);
-		describe(cmit);
+		describe(cmit, i == argc - 1);
 	}
 	return 0;
 }