t / t4111-apply-subdir.shon commit Merge branch 'nd/maint-hide-checkout-index-from-error' (6a79be3)
   1#!/bin/sh
   2
   3test_description='patching from inconvenient places'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        cat >patch <<-\EOF &&
   9        diff file.orig file
  10        --- a/file.orig
  11        +++ b/file
  12        @@ -1 +1,2 @@
  13         1
  14        +2
  15        EOF
  16        patch="$(pwd)/patch" &&
  17
  18        echo 1 >preimage &&
  19        printf "%s\n" 1 2 >postimage &&
  20        echo 3 >other &&
  21
  22        test_tick &&
  23        git commit --allow-empty -m basis
  24'
  25
  26test_expect_success 'setup: subdir' '
  27        reset_subdir() {
  28                git reset &&
  29                mkdir -p sub/dir/b &&
  30                mkdir -p objects &&
  31                cp "$1" file &&
  32                cp "$1" objects/file &&
  33                cp "$1" sub/dir/file &&
  34                cp "$1" sub/dir/b/file &&
  35                git add file sub/dir/file sub/dir/b/file objects/file &&
  36                cp "$2" file &&
  37                cp "$2" sub/dir/file &&
  38                cp "$2" sub/dir/b/file &&
  39                cp "$2" objects/file &&
  40                test_might_fail git update-index --refresh -q
  41        }
  42'
  43
  44test_expect_success 'apply from subdir of toplevel' '
  45        cp postimage expected &&
  46        reset_subdir other preimage &&
  47        (
  48                cd sub/dir &&
  49                git apply "$patch"
  50        ) &&
  51        test_cmp expected sub/dir/file
  52'
  53
  54test_expect_success 'apply --cached from subdir of toplevel' '
  55        cp postimage expected &&
  56        cp other expected.working &&
  57        reset_subdir preimage other &&
  58        (
  59                cd sub/dir &&
  60                git apply --cached "$patch"
  61        ) &&
  62        git show :sub/dir/file >actual &&
  63        test_cmp expected actual &&
  64        test_cmp expected.working sub/dir/file
  65'
  66
  67test_expect_success 'apply --index from subdir of toplevel' '
  68        cp postimage expected &&
  69        reset_subdir preimage other &&
  70        (
  71                cd sub/dir &&
  72                test_must_fail git apply --index "$patch"
  73        ) &&
  74        reset_subdir other preimage &&
  75        (
  76                cd sub/dir &&
  77                test_must_fail git apply --index "$patch"
  78        ) &&
  79        reset_subdir preimage preimage &&
  80        (
  81                cd sub/dir &&
  82                git apply --index "$patch"
  83        ) &&
  84        git show :sub/dir/file >actual &&
  85        test_cmp expected actual &&
  86        test_cmp expected sub/dir/file
  87'
  88
  89test_expect_success 'apply from .git dir' '
  90        cp postimage expected &&
  91        cp preimage .git/file &&
  92        cp preimage .git/objects/file &&
  93        (
  94                cd .git &&
  95                git apply "$patch"
  96        ) &&
  97        test_cmp expected .git/file
  98'
  99
 100test_expect_success 'apply from subdir of .git dir' '
 101        cp postimage expected &&
 102        cp preimage .git/file &&
 103        cp preimage .git/objects/file &&
 104        (
 105                cd .git/objects &&
 106                git apply "$patch"
 107        ) &&
 108        test_cmp expected .git/objects/file
 109'
 110
 111test_expect_success 'apply --cached from .git dir' '
 112        cp postimage expected &&
 113        cp other expected.working &&
 114        cp other .git/file &&
 115        reset_subdir preimage other &&
 116        (
 117                cd .git &&
 118                git apply --cached "$patch"
 119        ) &&
 120        git show :file >actual &&
 121        test_cmp expected actual &&
 122        test_cmp expected.working file &&
 123        test_cmp expected.working .git/file
 124'
 125
 126test_expect_success 'apply --cached from subdir of .git dir' '
 127        cp postimage expected &&
 128        cp preimage expected.subdir &&
 129        cp other .git/file &&
 130        cp other .git/objects/file &&
 131        reset_subdir preimage other &&
 132        (
 133                cd .git/objects &&
 134                git apply --cached "$patch"
 135        ) &&
 136        git show :file >actual &&
 137        git show :objects/file >actual.subdir &&
 138        test_cmp expected actual &&
 139        test_cmp expected.subdir actual.subdir
 140'
 141
 142test_done