summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorStephen R. van den Berg <srb@cuci.nl>2008-04-27 17:32:46 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-04-30 00:47:37 (GMT)
commitd9c292e8bbd51c84cb9ecd86cb89b8a1b35a2a82 (patch)
tree43b2a394017dba66ca78ad2d8ead7e94cde9a4c5 /revision.c
parentf0ec47b8e7f46e17e6b6fe1cead728fa24477e43 (diff)
downloadgit-d9c292e8bbd51c84cb9ecd86cb89b8a1b35a2a82.zip
git-d9c292e8bbd51c84cb9ecd86cb89b8a1b35a2a82.tar.gz
git-d9c292e8bbd51c84cb9ecd86cb89b8a1b35a2a82.tar.bz2
Simplify and fix --first-parent implementation
The purpose of --first-parent is to view the tree without looking at side branche. This is accomplished by pretending there are no other parents than the first parent when encountering a merge. The current code marks the other parents as seen, which means that the tree traversal will behave differently depending on the order merges are handled. When a fast forward is artificially recorded as a merge, ----- / \ D---E---F---G master the current first-parent code considers E to be seen and stops the traversal after showing G and F. Signed-off-by: Stephen R. van den Berg <srb@cuci.nl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/revision.c b/revision.c
index 4231ea2..bcfcd2a 100644
--- a/revision.c
+++ b/revision.c
@@ -415,7 +415,6 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit, str
{
struct commit_list *parent = commit->parents;
unsigned left_flag;
- int add, rest;
if (commit->object.flags & ADDED)
return 0;
@@ -462,19 +461,18 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit, str
left_flag = (commit->object.flags & SYMMETRIC_LEFT);
- rest = !revs->first_parent_only;
- for (parent = commit->parents, add = 1; parent; add = rest) {
+ for (parent = commit->parents; parent; parent = parent->next) {
struct commit *p = parent->item;
- parent = parent->next;
if (parse_commit(p) < 0)
return -1;
p->object.flags |= left_flag;
if (p->object.flags & SEEN)
continue;
p->object.flags |= SEEN;
- if (add)
- insert_by_date(p, list);
+ insert_by_date(p, list);
+ if(revs->first_parent_only)
+ break;
}
return 0;
}