t / t4129-apply-samemode.shon commit Merge branch 'ab/perl-fixes' (ae1644b)
   1#!/bin/sh
   2
   3test_description='applying patch with mode bits'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8        echo original >file &&
   9        git add file &&
  10        test_tick &&
  11        git commit -m initial &&
  12        git tag initial &&
  13        echo modified >file &&
  14        git diff --stat -p >patch-0.txt &&
  15        chmod +x file &&
  16        git diff --stat -p >patch-1.txt &&
  17        sed "s/^\(new mode \).*/\1/" <patch-1.txt >patch-empty-mode.txt &&
  18        sed "s/^\(new mode \).*/\1garbage/" <patch-1.txt >patch-bogus-mode.txt
  19'
  20
  21test_expect_success FILEMODE 'same mode (no index)' '
  22        git reset --hard &&
  23        chmod +x file &&
  24        git apply patch-0.txt &&
  25        test -x file
  26'
  27
  28test_expect_success FILEMODE 'same mode (with index)' '
  29        git reset --hard &&
  30        chmod +x file &&
  31        git add file &&
  32        git apply --index patch-0.txt &&
  33        test -x file &&
  34        git diff --exit-code
  35'
  36
  37test_expect_success FILEMODE 'same mode (index only)' '
  38        git reset --hard &&
  39        chmod +x file &&
  40        git add file &&
  41        git apply --cached patch-0.txt &&
  42        git ls-files -s file | grep "^100755"
  43'
  44
  45test_expect_success FILEMODE 'mode update (no index)' '
  46        git reset --hard &&
  47        git apply patch-1.txt &&
  48        test -x file
  49'
  50
  51test_expect_success FILEMODE 'mode update (with index)' '
  52        git reset --hard &&
  53        git apply --index patch-1.txt &&
  54        test -x file &&
  55        git diff --exit-code
  56'
  57
  58test_expect_success FILEMODE 'mode update (index only)' '
  59        git reset --hard &&
  60        git apply --cached patch-1.txt &&
  61        git ls-files -s file | grep "^100755"
  62'
  63
  64test_expect_success FILEMODE 'empty mode is rejected' '
  65        git reset --hard &&
  66        test_must_fail git apply patch-empty-mode.txt 2>err &&
  67        test_i18ngrep "invalid mode" err
  68'
  69
  70test_expect_success FILEMODE 'bogus mode is rejected' '
  71        git reset --hard &&
  72        test_must_fail git apply patch-bogus-mode.txt 2>err &&
  73        test_i18ngrep "invalid mode" err
  74'
  75
  76test_done