aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-01-07 18:52:42 -0800
committerJunio C Hamano <junkio@cox.net>2006-01-07 21:43:01 -0800
commitf8f9c73c7d835ec1e5b665c66623aed49fcd4888 (patch)
tree64fc23b181b3c0e9b5a6edaa8c65a0035c857c63
parent78c2cff61f87d43c1f4ef5a03547f093c4c6e0c9 (diff)
downloadgit-f8f9c73c7d835ec1e5b665c66623aed49fcd4888.tar.gz
git-f8f9c73c7d835ec1e5b665c66623aed49fcd4888.tar.xz
describe: allow more than one revs to be named.
The main loop was prepared to take more than one revs, but the actual naming logic wad not (it used pop_most_recent_commit while forgetting that the commit marks stay after it's done). Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--commit.c13
-rw-r--r--commit.h2
-rw-r--r--describe.c3
3 files changed, 17 insertions, 1 deletions
diff --git a/commit.c b/commit.c
index edd4dedcd..e9a29caa2 100644
--- a/commit.c
+++ b/commit.c
@@ -352,6 +352,19 @@ struct commit *pop_most_recent_commit(struct commit_list **list,
return ret;
}
+void clear_commit_marks(struct commit *commit, unsigned int mark)
+{
+ struct commit_list *parents;
+
+ parents = commit->parents;
+ commit->object.flags &= ~mark;
+ while (parents) {
+ if (parents->item && parents->item->object.parsed)
+ clear_commit_marks(parents->item, mark);
+ parents = parents->next;
+ }
+}
+
/*
* Generic support for pretty-printing the header
*/
diff --git a/commit.h b/commit.h
index 6738a696d..9c4a244bd 100644
--- a/commit.h
+++ b/commit.h
@@ -58,6 +58,8 @@ struct commit *pop_most_recent_commit(struct commit_list **list,
struct commit *pop_commit(struct commit_list **stack);
+void clear_commit_marks(struct commit *commit, unsigned int mark);
+
int count_parents(struct commit * commit);
/*
diff --git a/describe.c b/describe.c
index 84d96b5b8..00fa02adc 100644
--- a/describe.c
+++ b/describe.c
@@ -124,9 +124,10 @@ static void describe(struct commit *cmit)
if (n) {
printf("%s-g%s\n", n->path,
find_unique_abbrev(cmit->object.sha1, abbrev));
- return;
+ break;
}
}
+ clear_commit_marks(cmit, SEEN);
}
int main(int argc, char **argv)