summaryrefslogtreecommitdiff
path: root/t/t4059-diff-cc-not-affected-by-path-filtering.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t4059-diff-cc-not-affected-by-path-filtering.sh')
-rwxr-xr-xt/t4059-diff-cc-not-affected-by-path-filtering.sh84
1 files changed, 59 insertions, 25 deletions
diff --git a/t/t4059-diff-cc-not-affected-by-path-filtering.sh b/t/t4059-diff-cc-not-affected-by-path-filtering.sh
index ab3dbd2f87..f4232b09ee 100755
--- a/t/t4059-diff-cc-not-affected-by-path-filtering.sh
+++ b/t/t4059-diff-cc-not-affected-by-path-filtering.sh
@@ -6,11 +6,20 @@ test_description='combined diff filtering is not affected by preliminary path fi
# spot changes which were discarded during conflict resolution.
. ./test-lib.sh
+. "$TEST_DIRECTORY"/diff-lib.sh
+# history is:
+# (mergebase) --> (branch1) --\
+# | V
+# \ --> (branch2) ----------(merge)
+# there are files in 2 subdirectories, "long" and "short"
+# each file in "long" subdirecty has exactly same history as same file in "short" one,
+# but it has added lines with changes in both branches which merge without conflict
+# so the long files are always selected at path filtering
test_expect_success setup '
mkdir short &&
mkdir long &&
- for fn in win1 win2 merge delete base only1 only2
+ for fn in win1 win2 merge delete base only1 only2 only1discard only2discard
do
test_seq 3 >short/$fn &&
git add short/$fn &&
@@ -29,9 +38,12 @@ test_expect_success setup '
git add $dir/$fn || return $?
done || return $?
done &&
- sed -e "s/^7/7change1/" long/only2 >sed.new &&
- mv sed.new long/only2 &&
- git add long/only2 &&
+ for fn in only2 only2discard
+ do
+ sed -e "s/^7/7change1/" long/$fn >sed.new &&
+ mv sed.new long/$fn &&
+ git add long/$fn || return $?
+ done &&
git commit -m branch1 &&
git branch branch1 &&
@@ -45,9 +57,12 @@ test_expect_success setup '
git add $dir/$fn || return $?
done || return $?
done &&
- sed -e "s/^11/11change2/" long/only1 >sed.new &&
- mv sed.new long/only1 &&
- git add long/only1 &&
+ for fn in only1 only1discard
+ do
+ sed -e "s/^11/11change2/" long/$fn >sed.new &&
+ mv sed.new long/$fn &&
+ git add long/$fn || return $?
+ done &&
git commit -m branch2 &&
git branch branch2 &&
@@ -55,6 +70,10 @@ test_expect_success setup '
git checkout mergebase -- . &&
test_seq 11 | sed -e "s/^7/7change1/" -e "s/^11/11change2/" >long/base &&
git add long/base &&
+ test_seq 11 | sed -e "s/^7/7change1/" -e "s/^11/11change2/" >long/only1discard &&
+ git add long/only1discard &&
+ test_seq 11 | sed -e "s/^7/7change1/" -e "s/^11/11change2/" >long/only2discard &&
+ git add long/only2discard &&
test_seq 11 | sed -e "s/^7/7change1/" -e "s/^11/11change2/" -e "s/^2/2change1/" >long/win1 &&
git add long/win1 &&
test_seq 11 | sed -e "s/^7/7change1/" -e "s/^11/11change2/" -e "s/^2/2change2/" >long/win2 &&
@@ -69,6 +88,10 @@ test_expect_success setup '
git add long/only2 &&
test_seq 3 >short/base &&
git add short/base &&
+ test_seq 3 >short/only1discard &&
+ git add short/only1discard &&
+ test_seq 3 >short/only2discard &&
+ git add short/only2discard &&
test_seq 3 | sed -e "s/^2/2change1/" >short/win1 &&
git add short/win1 &&
test_seq 3 | sed -e "s/^2/2change2/" >short/win2 &&
@@ -85,24 +108,35 @@ test_expect_success setup '
git branch merge
'
-test_expect_success 'diff with mergebase shows discarded change from parent 2 in merged file' '
- git diff --cc merge branch1 branch2 mergebase -- long/win1 >actual &&
- test -s actual
-'
-
-test_expect_success 'diff with mergebase shows discarded change from parent 1 in merged file' '
- git diff --cc merge branch1 branch2 mergebase -- long/win2 >actual &&
- test -s actual
-'
+# the difference in short file must be returned if and only if it is shown in long file
+for fn in win1 win2 merge delete base only1 only2 only1discard only2discard; do
+ if git diff --cc merge branch1 branch2 mergebase -- long/$fn | grep -q '^[ +-]\{3\}2\(change[12]|merge\)\?$'
+ then
+ test_expect_success "diff --cc contains short/$fn" '
+ git diff --cc merge branch1 branch2 mergebase -- short/'"$fn"' >actual &&
+ test -s actual
+ '
+ else
+ test_expect_success "diff --cc does not contain short/$fn" '
+ git diff --cc merge branch1 branch2 mergebase -- short/'"$fn"' >actual &&
+ ! test -s actual
+ '
+ fi
+done
-test_expect_success 'diff with mergebase shows fully discarded file from parent 2' '
- git diff --cc merge branch1 branch2 mergebase -- short/win1 >actual &&
- test -s actual
-'
-
-test_expect_success 'diff with mergebase shows fully discarded file from parent 1' '
- git diff --cc merge branch1 branch2 mergebase -- short/win2 >actual &&
- test -s actual
-'
+for fn in win1 win2 merge delete base only1 only2 only1discard only2discard; do
+ if git diff -c merge branch1 branch2 mergebase -- long/$fn | grep -q '^[ +-]\{3\}2\(change[12]|merge\)\?$'
+ then
+ test_expect_success "diff -c contains short/$fn" '
+ git diff -c merge branch1 branch2 mergebase -- short/'"$fn"' >actual &&
+ test -s actual
+ '
+ else
+ test_expect_success "diff -c does not contain short/$fn" '
+ git diff -c merge branch1 branch2 mergebase -- short/'"$fn"' >actual &&
+ ! test -s actual
+ '
+ fi
+done
test_done