t / t4151-am-abort.shon commit t5801: don't use test_when_finished in a subshell (c545bc6)
   1#!/bin/sh
   2
   3test_description='am --abort'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8        for i in a b c d e f g
   9        do
  10                echo $i
  11        done >file-1 &&
  12        cp file-1 file-2 &&
  13        test_tick &&
  14        git add file-1 file-2 &&
  15        git commit -m initial &&
  16        git tag initial &&
  17        git format-patch --stdout --root initial >initial.patch &&
  18        for i in 2 3 4 5 6
  19        do
  20                echo $i >>file-1 &&
  21                echo $i >otherfile-$i &&
  22                git add otherfile-$i &&
  23                test_tick &&
  24                git commit -a -m $i || return 1
  25        done &&
  26        git format-patch --no-numbered initial &&
  27        git checkout -b side initial &&
  28        echo local change >file-2-expect
  29'
  30
  31for with3 in '' ' -3'
  32do
  33        test_expect_success "am$with3 stops at a patch that does not apply" '
  34
  35                git reset --hard initial &&
  36                cp file-2-expect file-2 &&
  37
  38                test_must_fail git am$with3 000[1245]-*.patch &&
  39                git log --pretty=tformat:%s >actual &&
  40                for i in 3 2 initial
  41                do
  42                        echo $i
  43                done >expect &&
  44                test_cmp expect actual
  45        '
  46
  47        test_expect_success "am$with3 --skip continue after failed am$with3" '
  48                test_must_fail git am$with3 --skip >output &&
  49                test_i18ngrep "^Applying" output >output.applying &&
  50                test_i18ngrep "^Applying: 6$" output.applying &&
  51                test_i18ncmp file-2-expect file-2 &&
  52                test ! -f .git/MERGE_RR
  53        '
  54
  55        test_expect_success "am --abort goes back after failed am$with3" '
  56                git am --abort &&
  57                git rev-parse HEAD >actual &&
  58                git rev-parse initial >expect &&
  59                test_cmp expect actual &&
  60                test_cmp file-2-expect file-2 &&
  61                git diff-index --exit-code --cached HEAD &&
  62                test ! -f .git/MERGE_RR
  63        '
  64
  65done
  66
  67test_expect_success 'am -3 --skip removes otherfile-4' '
  68        git reset --hard initial &&
  69        test_must_fail git am -3 0003-*.patch &&
  70        test 3 -eq $(git ls-files -u | wc -l) &&
  71        test 4 = "$(cat otherfile-4)" &&
  72        git am --skip &&
  73        test_cmp_rev initial HEAD &&
  74        test -z "$(git ls-files -u)" &&
  75        test_path_is_missing otherfile-4
  76'
  77
  78test_expect_success 'am -3 --abort removes otherfile-4' '
  79        git reset --hard initial &&
  80        test_must_fail git am -3 0003-*.patch &&
  81        test 3 -eq $(git ls-files -u | wc -l) &&
  82        test 4 = "$(cat otherfile-4)" &&
  83        git am --abort &&
  84        test_cmp_rev initial HEAD &&
  85        test -z $(git ls-files -u) &&
  86        test_path_is_missing otherfile-4
  87'
  88
  89test_expect_success 'am --abort will keep the local commits intact' '
  90        test_must_fail git am 0004-*.patch &&
  91        test_commit unrelated &&
  92        git rev-parse HEAD >expect &&
  93        git am --abort &&
  94        git rev-parse HEAD >actual &&
  95        test_cmp expect actual
  96'
  97
  98test_expect_success 'am -3 stops on conflict on unborn branch' '
  99        git checkout -f --orphan orphan &&
 100        git reset &&
 101        rm -f otherfile-4 &&
 102        test_must_fail git am -3 0003-*.patch &&
 103        test 2 -eq $(git ls-files -u | wc -l) &&
 104        test 4 = "$(cat otherfile-4)"
 105'
 106
 107test_expect_success 'am -3 --skip clears index on unborn branch' '
 108        test_path_is_dir .git/rebase-apply &&
 109        echo tmpfile >tmpfile &&
 110        git add tmpfile &&
 111        git am --skip &&
 112        test -z "$(git ls-files)" &&
 113        test_path_is_missing otherfile-4 &&
 114        test_path_is_missing tmpfile
 115'
 116
 117test_expect_success 'am -3 --abort removes otherfile-4 on unborn branch' '
 118        git checkout -f --orphan orphan &&
 119        git reset &&
 120        rm -f otherfile-4 file-1 &&
 121        test_must_fail git am -3 0003-*.patch &&
 122        test 2 -eq $(git ls-files -u | wc -l) &&
 123        test 4 = "$(cat otherfile-4)" &&
 124        git am --abort &&
 125        test -z "$(git ls-files -u)" &&
 126        test_path_is_missing otherfile-4
 127'
 128
 129test_expect_success 'am -3 --abort on unborn branch removes applied commits' '
 130        git checkout -f --orphan orphan &&
 131        git reset &&
 132        rm -f otherfile-4 otherfile-2 file-1 file-2 &&
 133        test_must_fail git am -3 initial.patch 0003-*.patch &&
 134        test 3 -eq $(git ls-files -u | wc -l) &&
 135        test 4 = "$(cat otherfile-4)" &&
 136        git am --abort &&
 137        test -z "$(git ls-files -u)" &&
 138        test_path_is_missing otherfile-4 &&
 139        test_path_is_missing file-1 &&
 140        test_path_is_missing file-2 &&
 141        test 0 -eq $(git log --oneline 2>/dev/null | wc -l) &&
 142        test refs/heads/orphan = "$(git symbolic-ref HEAD)"
 143'
 144
 145test_expect_success 'am --abort on unborn branch will keep local commits intact' '
 146        git checkout -f --orphan orphan &&
 147        git reset &&
 148        test_must_fail git am 0004-*.patch &&
 149        test_commit unrelated2 &&
 150        git rev-parse HEAD >expect &&
 151        git am --abort &&
 152        git rev-parse HEAD >actual &&
 153        test_cmp expect actual
 154'
 155
 156test_done