t / t4120-apply-popt.shon commit Merge branch 'da/difftool' (3f78278)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Shawn O. Pearce
   4#
   5
   6test_description='git apply -p handling.'
   7
   8. ./test-lib.sh
   9
  10test_expect_success setup '
  11        mkdir sub &&
  12        echo A >sub/file1 &&
  13        cp sub/file1 file1.saved &&
  14        git add sub/file1 &&
  15        echo B >sub/file1 &&
  16        git diff >patch.file &&
  17        git checkout -- sub/file1 &&
  18        git mv sub süb &&
  19        echo B >süb/file1 &&
  20        git diff >patch.escaped &&
  21        grep "[\]" patch.escaped &&
  22        rm süb/file1 &&
  23        rmdir süb
  24'
  25
  26test_expect_success 'apply git diff with -p2' '
  27        cp file1.saved file1 &&
  28        git apply -p2 patch.file
  29'
  30
  31test_expect_success 'apply with too large -p' '
  32        cp file1.saved file1 &&
  33        test_must_fail git apply --stat -p3 patch.file 2>err &&
  34        test_i18ngrep "removing 3 leading" err
  35'
  36
  37test_expect_success 'apply (-p2) traditional diff with funny filenames' '
  38        cat >patch.quotes <<-\EOF &&
  39        diff -u "a/"sub/file1 "b/"sub/file1
  40        --- "a/"sub/file1
  41        +++ "b/"sub/file1
  42        @@ -1 +1 @@
  43        -A
  44        +B
  45        EOF
  46        echo B >expected &&
  47
  48        cp file1.saved file1 &&
  49        git apply -p2 patch.quotes &&
  50        test_cmp expected file1
  51'
  52
  53test_expect_success 'apply with too large -p and fancy filename' '
  54        cp file1.saved file1 &&
  55        test_must_fail git apply --stat -p3 patch.escaped 2>err &&
  56        test_i18ngrep "removing 3 leading" err
  57'
  58
  59test_expect_success 'apply (-p2) diff, mode change only' '
  60        cat >patch.chmod <<-\EOF &&
  61        diff --git a/sub/file1 b/sub/file1
  62        old mode 100644
  63        new mode 100755
  64        EOF
  65        test_chmod -x file1 &&
  66        git apply --index -p2 patch.chmod &&
  67        case $(git ls-files -s file1) in 100755*) : good;; *) false;; esac
  68'
  69
  70test_expect_success FILEMODE 'file mode was changed' '
  71        test -x file1
  72'
  73
  74test_expect_success 'apply (-p2) diff, rename' '
  75        cat >patch.rename <<-\EOF &&
  76        diff --git a/sub/file1 b/sub/file2
  77        similarity index 100%
  78        rename from sub/file1
  79        rename to sub/file2
  80        EOF
  81        echo A >expected &&
  82
  83        cp file1.saved file1 &&
  84        rm -f file2 &&
  85        git apply -p2 patch.rename &&
  86        test_cmp expected file2
  87'
  88
  89test_done