Merge branch 'dk/format-patch-ignore-diff-submodule'
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2015 21:41:51 +0000 (13:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2015 21:41:52 +0000 (13:41 -0800)
Setting diff.submodule to 'log' made "git format-patch" produce
broken patches.

* dk/format-patch-ignore-diff-submodule:
format-patch: ignore diff.submodule setting
t4255: test am submodule with diff.submodule

builtin/log.c
t/t4255-am-submodule.sh
index 923ffe72ced41f12a2258f732be418731bc2e4a8..a131992c52f96daeb7c72b447c5ed6929c01a96a 100644 (file)
@@ -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")) {
index 8bde7dbb6dba8f65797204fee38951e213e80cdd..0ba8194403f6740807cbd63d1bda8a69091e3d6b 100755 (executable)
@@ -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_success 'diff.submodule=log' '
+       test_config diff.submodule log &&
+       run_test $SECOND first-submodule
+'
+
+test_expect_success 'diff.submodule=log with extra file' '
+       test_config diff.submodule log &&
+       run_test $THIRD second-submodule
+'
+
 test_done