summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-01-29 13:18:54 -0800
committerJunio C Hamano <gitster@pobox.com>2012-01-29 13:18:54 -0800
commit731218c18f493cc6c6e3fc22be837e49e5399768 (patch)
tree87e9210c371e9ac917c83e3e2387dab4e4ac9190 /revision.c
parenta734e7ef6c14d8eb476fe8b2d6f861b3ed2c211d (diff)
parent36ed1913e1d5de0930e59db6eeec3ccb2bd58bd9 (diff)
downloadgit-731218c18f493cc6c6e3fc22be837e49e5399768.tar.gz
Merge branch 'jc/maint-log-first-parent-pathspec'
* jc/maint-log-first-parent-pathspec: Making pathspec limited log play nicer with --first-parent
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/revision.c b/revision.c
index 064e351084..eb0be4206d 100644
--- a/revision.c
+++ b/revision.c
@@ -416,7 +416,7 @@ static int rev_same_tree_as_empty(struct rev_info *revs, struct commit *commit)
static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
{
struct commit_list **pp, *parent;
- int tree_changed = 0, tree_same = 0;
+ int tree_changed = 0, tree_same = 0, nth_parent = 0;
/*
* If we don't do pruning, everything is interesting
@@ -444,6 +444,14 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
while ((parent = *pp) != NULL) {
struct commit *p = parent->item;
+ /*
+ * Do not compare with later parents when we care only about
+ * the first parent chain, in order to avoid derailing the
+ * traversal to follow a side branch that brought everything
+ * in the path we are limited to by the pathspec.
+ */
+ if (revs->first_parent_only && nth_parent++)
+ break;
if (parse_commit(p) < 0)
die("cannot simplify commit %s (because of %s)",
sha1_to_hex(commit->object.sha1),