t / t4255-am-submodule.shon commit Merge branch 'jk/sanity' (4b16573)
   1#!/bin/sh
   2
   3test_description='git am handling submodules'
   4
   5. ./test-lib.sh
   6. "$TEST_DIRECTORY"/lib-submodule-update.sh
   7
   8am () {
   9        git format-patch --stdout --ignore-submodules=dirty "..$1" | git am -
  10}
  11
  12test_submodule_switch "am"
  13
  14am_3way () {
  15        git format-patch --stdout --ignore-submodules=dirty "..$1" | git am --3way -
  16}
  17
  18KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
  19test_submodule_switch "am_3way"
  20
  21test_expect_success 'setup diff.submodule' '
  22        test_commit one &&
  23        INITIAL=$(git rev-parse HEAD) &&
  24
  25        git init submodule &&
  26        (
  27                cd submodule &&
  28                test_commit two &&
  29                git rev-parse HEAD >../initial-submodule
  30        ) &&
  31        git submodule add ./submodule &&
  32        git commit -m first &&
  33
  34        (
  35                cd submodule &&
  36                test_commit three &&
  37                git rev-parse HEAD >../first-submodule
  38        ) &&
  39        git add submodule &&
  40        git commit -m second &&
  41        SECOND=$(git rev-parse HEAD) &&
  42
  43        (
  44                cd submodule &&
  45                git mv two.t four.t &&
  46                git commit -m "second submodule" &&
  47                git rev-parse HEAD >../second-submodule
  48        ) &&
  49        test_commit four &&
  50        git add submodule &&
  51        git commit --amend --no-edit &&
  52        THIRD=$(git rev-parse HEAD) &&
  53        git submodule update --init
  54'
  55
  56run_test() {
  57        START_COMMIT=$1 &&
  58        EXPECT=$2 &&
  59        # Abort any merges in progress: the previous
  60        # test may have failed, and we should clean up.
  61        test_might_fail git am --abort &&
  62        git reset --hard $START_COMMIT &&
  63        rm -f *.patch &&
  64        git format-patch -1 &&
  65        git reset --hard $START_COMMIT^ &&
  66        git submodule update &&
  67        git am *.patch &&
  68        git submodule update &&
  69        git -C submodule rev-parse HEAD >actual &&
  70        test_cmp $EXPECT actual
  71}
  72
  73test_expect_success 'diff.submodule unset' '
  74        test_unconfig diff.submodule &&
  75        run_test $SECOND first-submodule
  76'
  77
  78test_expect_success 'diff.submodule unset with extra file' '
  79        test_unconfig diff.submodule &&
  80        run_test $THIRD second-submodule
  81'
  82
  83test_expect_success 'diff.submodule=log' '
  84        test_config diff.submodule log &&
  85        run_test $SECOND first-submodule
  86'
  87
  88test_expect_success 'diff.submodule=log with extra file' '
  89        test_config diff.submodule log &&
  90        run_test $THIRD second-submodule
  91'
  92
  93test_done