From: Max Kirillov <max@max630.net>
To: Kirill Smelkov <kirr@mns.spb.ru>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>
Cc: Max Kirillov <max@max630.net>, git@vger.kernel.org
Subject: [PATCH 4/4] t4059: rewrite to be adaptive to hunk filtering
Date: Thu, 2 Apr 2015 23:34:13 +0300 [thread overview]
Message-ID: <1428006853-21212-5-git-send-email-max@max630.net> (raw)
In-Reply-To: <1428006853-21212-1-git-send-email-max@max630.net>
Looks like there is no exact specification what `diff -c` and
`diff --cc` should output. Considering this it is not reasonable to
hardcode any specific output in test. Rather, it should verify that file
selection behaves the same as hunk selection.
Rewrite test so that it makes sure that a "short" file is shown if and
only if the corresponding "long" file's contains the changed hunk.
Signed-off-by: Max Kirillov <max@max630.net>
---
t/t4059-diff-merge-with-base.sh | 84 ++++++++++++++++++++++++++++-------------
1 file changed, 58 insertions(+), 26 deletions(-)
diff --git a/t/t4059-diff-merge-with-base.sh b/t/t4059-diff-merge-with-base.sh
index 6341f7c..75a3820 100755
--- a/t/t4059-diff-merge-with-base.sh
+++ b/t/t4059-diff-merge-with-base.sh
@@ -1,13 +1,22 @@
#!/bin/sh
-test_description='Diff aware of merge base'
+test_description='combined diff filtering is not affected by preliminary path filtering'
. ./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; do
+ for fn in win1 win2 merge delete base only1 only2 only1discard only2discard; do
test_seq 3 >short/$fn
git add short/$fn &&
test_seq 11 >long/$fn &&
@@ -23,9 +32,11 @@ test_expect_success setup '
git add $dir/$fn
done
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
+ done &&
git commit -m branch1 &&
git branch branch1 &&
@@ -37,9 +48,11 @@ test_expect_success setup '
git add $dir/$fn
done
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
+ done &&
git commit -m branch2 &&
git branch branch2 &&
@@ -47,6 +60,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 &&
@@ -61,6 +78,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 &&
@@ -77,24 +98,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
--
2.3.4.2801.g3d0809b
next prev parent reply other threads:[~2015-04-02 20:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-02 20:34 [PATCH 0/4] diff --cc: relax path filtering Max Kirillov
2015-04-02 20:34 ` [PATCH 1/4] Add test for showing discarded changes with diff --cc Max Kirillov
2015-04-02 20:55 ` Junio C Hamano
2015-04-03 16:03 ` Max Kirillov
2015-04-02 20:34 ` [PATCH 2/4] combine-diff.c: refactor: extract insert_path() Max Kirillov
2015-04-02 20:34 ` [PATCH 3/4] diff --cc: relax too strict paths picking Max Kirillov
2015-04-02 20:59 ` Junio C Hamano
2015-04-02 20:34 ` Max Kirillov [this message]
2015-04-02 21:13 ` [PATCH 0/4] diff --cc: relax path filtering Jeff King
2015-04-03 16:29 ` Max Kirillov
2015-04-03 15:58 ` [PATCH v2 " Max Kirillov
2015-04-03 15:58 ` [PATCH v2 1/4] t4059: test 'diff --cc' with a change from only few parents Max Kirillov
2015-04-11 20:04 ` Junio C Hamano
2015-04-11 21:07 ` Junio C Hamano
2015-04-11 21:20 ` Junio C Hamano
2015-04-12 5:43 ` Max Kirillov
2015-04-12 5:51 ` Junio C Hamano
2015-04-14 4:22 ` Max Kirillov
2015-04-14 4:09 ` [PATCH/RFC] combine-diff.c: make intersect_paths() behave like hunk filtering Max Kirillov
2015-04-03 15:58 ` [PATCH v2 2/4] combine-diff.c: refactor: extract insert_path() Max Kirillov
2015-04-11 20:14 ` Junio C Hamano
2015-04-03 15:58 ` [PATCH v2 3/4] diff --cc: relax too strict paths picking Max Kirillov
2015-04-03 15:58 ` [PATCH v2 4/4] t4059: rewrite to be adaptive to hunk filtering Max Kirillov
2015-04-12 5:48 ` Junio C Hamano
2015-04-14 4:18 ` Max Kirillov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1428006853-21212-5-git-send-email-max@max630.net \
--to=max@max630.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kirr@mns.spb.ru \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).