summaryrefslogtreecommitdiff
path: root/t/t4211-line-log.sh
diff options
context:
space:
mode:
authorEric Sunshine <sunshine@sunshineco.com>2013-07-09 01:55:04 -0400
committerJunio C Hamano <gitster@pobox.com>2013-07-09 09:24:59 -0700
commit18d472db6fe3909537ceb7e0c54cf01fa3466b8f (patch)
tree02ffb5f8f67370a7334d4901baa66154ab4da460 /t/t4211-line-log.sh
parent1ddac3ff9aa29d1103aa05f59772812289b4cefa (diff)
downloadgit-18d472db6fe3909537ceb7e0c54cf01fa3466b8f.tar.gz
t4211: fix broken test when one -L range is subset of another
t4211 attempts to test multiple git-log -L ranges where one range is a superset of the other, and falsely succeeds because its "expected" output is incorrect. Overlapping -L ranges handed to git-log are coalesced by line-log.c:sort_and_merge_range_set() into a set of non-overlapping, disjoint ranges. When one range is a subset of another, sort_and_merge_range_set() should coalesce both ranges to the superset range, but instead the coalesced range often is incorrectly truncated to the end of the subset range. For example, ranges 2-8 and 3-4 are coalesced incorrectly to 2-4. One can observe this incorrect behavior with git-log -L using the test repository created by t4211. The superset/subset ranges t4211 employs are 4-$ and 8-12 (where $ represents end-of-file). The coalesced range should be 4-$. Manually invoking git-log with the same ranges the test employs, we see: % git log -L 4:a.c simple | awk '/^commit [0-9a-f]{40}/ { print substr($2,1,7) }' 4659538 100b61a 39b6eb2 a6eb826 f04fb20 de4c48a % git log -L 8,12:a.c simple | awk ... f04fb20 de4c48a % git log -L 4:a.c -L 8,12:a.c simple | awk ... a6eb826 f04fb20 de4c48a This last output is incorrect. 8-12 is a subset of 4-$, hence the output of the coalesced range should be the same as the 4-$ output shown first. In fact, the above incorrect output is the truncated bogus range 4-12: % git log -L 4,12:a.c simple | awk ... a6eb826 f04fb20 de4c48a Fix the test to correctly fail in the presence of the sort_and_merge_range_set() coalescing bug. Do so by changing the "expected" output to the commits mentioned in the 4-$ output above. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4211-line-log.sh')
-rwxr-xr-xt/t4211-line-log.sh4
1 files changed, 2 insertions, 2 deletions
diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh
index 7776f93e3d..549df9e054 100755
--- a/t/t4211-line-log.sh
+++ b/t/t4211-line-log.sh
@@ -50,8 +50,8 @@ canned_test "-M -L ':f:b.c' parallel-change" parallel-change-f-to-main
canned_test "-L 4,12:a.c -L :main:a.c simple" multiple
canned_test "-L 4,18:a.c -L :main:a.c simple" multiple-overlapping
canned_test "-L :main:a.c -L 4,18:a.c simple" multiple-overlapping
-canned_test "-L 4:a.c -L 8,12:a.c simple" multiple-superset
-canned_test "-L 8,12:a.c -L 4:a.c simple" multiple-superset
+canned_test_failure "-L 4:a.c -L 8,12:a.c simple" multiple-superset
+canned_test_failure "-L 8,12:a.c -L 4:a.c simple" multiple-superset
test_bad_opts "-L" "switch.*requires a value"
test_bad_opts "-L b.c" "argument.*not of the form"