git am will break when using diff.submodule=log; add some test cases
to illustrate this breakage as simply as possible. There are
currently two ways this can fail:
* With errors ("unrecognized input"), if only change
* Silently (no submodule change), if other files change
Test for both conditions and ensure without diff.submodule this works.
Signed-off-by: Doug Kelly <[email protected]>
---
t/t4255-am-submodule.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 84 insertions(+)
diff --git a/t/t4255-am-submodule.sh b/t/t4255-am-submodule.sh
index 8bde7db..a2dc083 100755
--- a/t/t4255-am-submodule.sh
+++ b/t/t4255-am-submodule.sh
@@ -18,4 +18,88 @@ am_3way () {
KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
test_submodule_switch "am_3way"
+test_expect_success 'setup diff.submodule' '
+ echo one >one &&
+ git add one &&
+ test_tick &&
+ git commit -m initial &&
+ INITIAL=$(git rev-parse HEAD) &&
+
+ git init submodule &&
+ (
+ cd submodule &&
+ echo two >two &&
+ git add two &&
+ test_tick &&
+ git commit -m "initial submodule" &&
+ git rev-parse HEAD >../initial-submodule
+ ) &&
+ git submodule add ./submodule &&
+ test_tick &&
+ git commit -m first &&
+
+ (
+ cd submodule &&
+ echo three >three &&
+ git add three &&
+ test_tick &&
+ git commit -m "first submodule" &&
+ git rev-parse HEAD >../first-submodule
+ ) &&
+ git add submodule &&
+ test_tick &&
+ git commit -m second &&
+ SECOND=$(git rev-parse HEAD) &&
+
+ (
+ cd submodule &&
+ git mv two four &&
+ test_tick &&
+ git commit -m "second submodule" &&
+ git rev-parse HEAD >../second-submodule
+ ) &&
+ git add submodule &&
+ echo four >four &&
+ git add four &&
+ test_tick &&
+ git commit -m third &&
+ THIRD=$(git rev-parse HEAD) &&
+ git submodule update --init
+'
+
+run_test() {
+ START_COMMIT=$1 &&
+ EXPECT=$2 &&
+ (git am --abort || true) &&
+ git reset --hard $START_COMMIT &&
+ rm -f *.patch &&
+ git format-patch -1 &&
+ git reset --hard $START_COMMIT^ &&
+ git submodule update &&
+ git am *.patch &&
+ git submodule update &&
+ (cd submodule && git rev-parse HEAD >../actual) &&
+ test_cmp $EXPECT actual
+}
+
+test_expect_success 'diff.submodule unset' '
+ (git config --unset diff.submodule || true) &&
+ run_test $SECOND first-submodule
+'
+
+test_expect_success 'diff.submodule unset with extra file' '
+ (git config --unset diff.submodule || true) &&
+ run_test $THIRD second-submodule
+'
+
+test_expect_failure 'diff.submodule=log' '
+ git config diff.submodule log &&
+ run_test $SECOND first-submodule
+'
+
+test_expect_failure 'diff.submodule=log with extra file' '
+ git config diff.submodule log &&
+ run_test $THIRD second-submodule
+'
+
test_done
--
2.0.5
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html