From fe7611c46f34cc4164a719a94e88e13ca5c978b1 Mon Sep 17 00:00:00 2001 From: Doug Kelly Date: Wed, 7 Jan 2015 14:32:11 -0600 Subject: [PATCH 1/2] t4255: test am submodule with diff.submodule 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. Helped-by: Eric Sunshine Helped-by: Junio C Hamano Signed-off-by: Doug Kelly Signed-off-by: Junio C Hamano --- t/t4255-am-submodule.sh | 72 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/t/t4255-am-submodule.sh b/t/t4255-am-submodule.sh index 8bde7dbb6d..450d26136a 100755 --- a/t/t4255-am-submodule.sh +++ b/t/t4255-am-submodule.sh @@ -18,4 +18,76 @@ am_3way () { KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 test_submodule_switch "am_3way" +test_expect_success 'setup diff.submodule' ' + test_commit one && + INITIAL=$(git rev-parse HEAD) && + + git init submodule && + ( + cd submodule && + test_commit two && + git rev-parse HEAD >../initial-submodule + ) && + git submodule add ./submodule && + git commit -m first && + + ( + cd submodule && + test_commit three && + git rev-parse HEAD >../first-submodule + ) && + git add submodule && + git commit -m second && + SECOND=$(git rev-parse HEAD) && + + ( + cd submodule && + git mv two.t four.t && + git commit -m "second submodule" && + git rev-parse HEAD >../second-submodule + ) && + test_commit four && + git add submodule && + git commit --amend --no-edit && + THIRD=$(git rev-parse HEAD) && + git submodule update --init +' + +run_test() { + START_COMMIT=$1 && + EXPECT=$2 && + # Abort any merges in progress: the previous + # test may have failed, and we should clean up. + test_might_fail git am --abort && + 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 && + git -C submodule rev-parse HEAD >actual && + test_cmp $EXPECT actual +} + +test_expect_success 'diff.submodule unset' ' + test_unconfig diff.submodule && + run_test $SECOND first-submodule +' + +test_expect_success 'diff.submodule unset with extra file' ' + test_unconfig diff.submodule && + run_test $THIRD second-submodule +' + +test_expect_failure 'diff.submodule=log' ' + test_config diff.submodule log && + run_test $SECOND first-submodule +' + +test_expect_failure 'diff.submodule=log with extra file' ' + test_config diff.submodule log && + run_test $THIRD second-submodule +' + test_done From 339de5089115b6d8d85c73c1b8d2aa281e9625d2 Mon Sep 17 00:00:00 2001 From: Doug Kelly Date: Wed, 7 Jan 2015 14:32:12 -0600 Subject: [PATCH 2/2] format-patch: ignore diff.submodule setting diff.submodule when set to log produces output which git-am cannot handle. Ignore this setting when generating patch output. Signed-off-by: Doug Kelly Signed-off-by: Junio C Hamano --- builtin/log.c | 2 +- t/t4255-am-submodule.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index 734aab3a73..cb14db4898 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -705,7 +705,7 @@ static int git_format_config(const char *var, const char *value, void *cb) return 0; } if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff") || - !strcmp(var, "color.ui")) { + !strcmp(var, "color.ui") || !strcmp(var, "diff.submodule")) { return 0; } if (!strcmp(var, "format.numbered")) { diff --git a/t/t4255-am-submodule.sh b/t/t4255-am-submodule.sh index 450d26136a..0ba8194403 100755 --- a/t/t4255-am-submodule.sh +++ b/t/t4255-am-submodule.sh @@ -80,12 +80,12 @@ test_expect_success 'diff.submodule unset with extra file' ' run_test $THIRD second-submodule ' -test_expect_failure 'diff.submodule=log' ' +test_expect_success 'diff.submodule=log' ' test_config diff.submodule log && run_test $SECOND first-submodule ' -test_expect_failure 'diff.submodule=log with extra file' ' +test_expect_success 'diff.submodule=log with extra file' ' test_config diff.submodule log && run_test $THIRD second-submodule '