revision.c: make default history consider bottom commits

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>

Kevin Bracey committed May 16, 2013 at 18:32 UTC 141efdba57b1769fc60ff9a3925afbc6af398faf
2 files changed +7 -7
revision.c
+1 -1
@@ -684,7 +684,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
684 sha1_to_hex(p->object.sha1));
685 switch (rev_compare_tree(revs, p, commit)) {
686 case REV_TREE_SAME:
687 - if (!revs->simplify_history || (p->object.flags & UNINTERESTING)) {
687 + if (!revs->simplify_history || !relevant_commit(p)) {
688 /* Even if a merge with an uninteresting
689 * side branch brought the entire change
690 * we are interested in, we do not want
t/t6111-rev-list-treesame.sh
+6 -6
@@ -146,8 +146,8 @@ check_result '(LH)M (E)H (J)L (I)J (E)I' E..M --ancestry-path --simplify-merges
146 # to G.
147 check_result 'M L K J I H' G..M
148 check_result 'M H L K J I' G..M --topo-order
149 -check_outcome failure 'M L H' G..M -- file # includes J I
150 -check_outcome failure '(LH)M (G)L (G)H' G..M --parents -- file # includes J I
149 +check_result 'M L H' G..M -- file
150 +check_result '(LH)M (G)L (G)H' G..M --parents -- file
151 check_result 'M L J I H' G..M --full-history -- file
152 check_result 'M L K J I H' G..M --full-history --parents -- file
153 check_result 'M H L J I' G..M --simplify-merges -- file
@@ -161,8 +161,8 @@ check_result 'M H L J I' G..M --ancestry-path --simplify-merges -- file
161 # But --full-history shouldn't drop D on its own - without simplification,
162 # we can't decide if the merge from INTERESTING commit C was sensible.
163 check_result 'F D C' B..F
164 -check_outcome failure 'F' B..F -- file # includes D
165 -check_outcome failure '(B)F' B..F --parents -- file # includes D
164 +check_result 'F' B..F -- file
165 +check_result '(B)F' B..F --parents -- file
166 check_result 'F D' B..F --full-history -- file
167 check_result '(D)F (BA)D' B..F --full-history --parents -- file
168 check_result '(B)F' B..F --simplify-merges -- file
@@ -174,8 +174,8 @@ check_result 'F D' B..F --first-parent
174 check_result 'F' B..F --first-parent -- file
175
176 # E...F should be equivalent to E F ^B, and be able to drop D as above.
177 -check_outcome failure 'F' E F ^B -- file # includes D
178 -check_outcome failure 'F' E...F -- file # includes D
177 +check_result 'F' E F ^B -- file # includes D
178 +check_result 'F' E...F -- file # includes D
179
180 # Any sort of full history of C..F should show D, as it's the connection to C,
181 # and it differs from it.