Skip to content

Commit

Permalink
revision.c: make default history consider bottom commits
Browse files Browse the repository at this point in the history
Previously, the default history treated bottom commits the same as any
other UNINTERESTING commit, which could force it down side branches.

Consider the following history:

   *A--*B---D--*F         * marks !TREESAME parent paths
     \     /*
      `-C-'

When requesting "B..F", B is UNINTERESTING but TREESAME to D. C is
!UNINTERESTING.

So default following would go from D into the irrelevant side branch C
to A, rather than to B.  Note also that if there had been an extra
!UNINTERESTING commit B1 between B and D, it wouldn't have gone down C.

Change the default following to test relevant_commit() instead of
!UNINTERESTING, so it can proceed straight from D to B, thus finishing
the traversal of that path.

Signed-off-by: Kevin Bracey <kevin@bracey.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kevin Bracey authored and Junio C Hamano committed May 16, 2013
1 parent bf3418b commit 141efdb
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -684,7 +684,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
sha1_to_hex(p->object.sha1));
switch (rev_compare_tree(revs, p, commit)) {
case REV_TREE_SAME:
if (!revs->simplify_history || (p->object.flags & UNINTERESTING)) {
if (!revs->simplify_history || !relevant_commit(p)) {
/* Even if a merge with an uninteresting
* side branch brought the entire change
* we are interested in, we do not want
Expand Down
12 changes: 6 additions & 6 deletions t/t6111-rev-list-treesame.sh
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ check_result '(LH)M (E)H (J)L (I)J (E)I' E..M --ancestry-path --simplify-merges
# to G.
check_result 'M L K J I H' G..M
check_result 'M H L K J I' G..M --topo-order
check_outcome failure 'M L H' G..M -- file # includes J I
check_outcome failure '(LH)M (G)L (G)H' G..M --parents -- file # includes J I
check_result 'M L H' G..M -- file
check_result '(LH)M (G)L (G)H' G..M --parents -- file
check_result 'M L J I H' G..M --full-history -- file
check_result 'M L K J I H' G..M --full-history --parents -- file
check_result 'M H L J I' G..M --simplify-merges -- file
Expand All @@ -161,8 +161,8 @@ check_result 'M H L J I' G..M --ancestry-path --simplify-merges -- file
# But --full-history shouldn't drop D on its own - without simplification,
# we can't decide if the merge from INTERESTING commit C was sensible.
check_result 'F D C' B..F
check_outcome failure 'F' B..F -- file # includes D
check_outcome failure '(B)F' B..F --parents -- file # includes D
check_result 'F' B..F -- file
check_result '(B)F' B..F --parents -- file
check_result 'F D' B..F --full-history -- file
check_result '(D)F (BA)D' B..F --full-history --parents -- file
check_result '(B)F' B..F --simplify-merges -- file
Expand All @@ -174,8 +174,8 @@ check_result 'F D' B..F --first-parent
check_result 'F' B..F --first-parent -- file

# E...F should be equivalent to E F ^B, and be able to drop D as above.
check_outcome failure 'F' E F ^B -- file # includes D
check_outcome failure 'F' E...F -- file # includes D
check_result 'F' E F ^B -- file # includes D
check_result 'F' E...F -- file # includes D

# Any sort of full history of C..F should show D, as it's the connection to C,
# and it differs from it.
Expand Down

0 comments on commit 141efdb

Please sign in to comment.