diff options
author | Junio C Hamano <junkio@cox.net> | 2007-03-13 01:57:22 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-03-14 16:22:18 -0700 |
commit | 0053e902b4f777ba454b62263d3695e5292b1559 (patch) | |
tree | b2157ead5624e27e0c6963ace42ee5ac6ae35f1f /revision.c | |
parent | 803527f1d9b284fa848d4a4bad23158c162a5d54 (diff) | |
download | git-0053e902b4f777ba454b62263d3695e5292b1559.tar.gz git-0053e902b4f777ba454b62263d3695e5292b1559.tar.xz |
git-log --first-parent: show only the first parent log
If your development history does not have fast-forward merges,
i.e. the "first parent" of commits in your history are special
than other parents, this option gives a better overview of the
evolution of a particular branch.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'revision.c')
-rw-r--r-- | revision.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/revision.c b/revision.c index 3c2eb125e..8afc19684 100644 --- a/revision.c +++ b/revision.c @@ -350,6 +350,7 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st { struct commit_list *parent = commit->parents; unsigned left_flag; + int add, rest; if (commit->object.flags & ADDED) return; @@ -395,18 +396,19 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st return; left_flag = (commit->object.flags & SYMMETRIC_LEFT); - parent = commit->parents; - while (parent) { + + rest = !revs->first_parent_only; + for (parent = commit->parents, add = 1; parent; add = rest) { struct commit *p = parent->item; parent = parent->next; - parse_commit(p); p->object.flags |= left_flag; if (p->object.flags & SEEN) continue; p->object.flags |= SEEN; - insert_by_date(p, list); + if (add) + insert_by_date(p, list); } } @@ -836,6 +838,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch handle_all(revs, flags); continue; } + if (!strcmp(arg, "--first-parent")) { + revs->first_parent_only = 1; + continue; + } if (!strcmp(arg, "--reflog")) { handle_reflog(revs, flags); continue; |