t / t4119-apply-config.shon commit revision: new rev^-n shorthand for rev^n..rev (8779351)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Junio C Hamano
   4#
   5
   6test_description='git apply --whitespace=strip and configuration file.
   7
   8'
   9
  10. ./test-lib.sh
  11
  12test_expect_success setup '
  13        mkdir sub &&
  14        echo A >sub/file1 &&
  15        cp sub/file1 saved &&
  16        git add sub/file1 &&
  17        echo "B " >sub/file1 &&
  18        git diff >patch.file
  19'
  20
  21# Also handcraft GNU diff output; note this has trailing whitespace.
  22tr '_' ' ' >gpatch.file <<\EOF &&
  23--- file1       2007-02-21 01:04:24.000000000 -0800
  24+++ file1+      2007-02-21 01:07:44.000000000 -0800
  25@@ -1 +1 @@
  26-A
  27+B_
  28EOF
  29
  30sed -e 's|file1|sub/&|' gpatch.file >gpatch-sub.file &&
  31sed -e '
  32        /^--- /s|file1|a/sub/&|
  33        /^+++ /s|file1|b/sub/&|
  34' gpatch.file >gpatch-ab-sub.file &&
  35
  36check_result () {
  37        if grep " " "$1"
  38        then
  39                echo "Eh?"
  40                false
  41        elif grep B "$1"
  42        then
  43                echo Happy
  44        else
  45                echo "Huh?"
  46                false
  47        fi
  48}
  49
  50test_expect_success 'apply --whitespace=strip' '
  51
  52        rm -f sub/file1 &&
  53        cp saved sub/file1 &&
  54        git update-index --refresh &&
  55
  56        git apply --whitespace=strip patch.file &&
  57        check_result sub/file1
  58'
  59
  60test_expect_success 'apply --whitespace=strip from config' '
  61
  62        rm -f sub/file1 &&
  63        cp saved sub/file1 &&
  64        git update-index --refresh &&
  65
  66        git config apply.whitespace strip &&
  67        git apply patch.file &&
  68        check_result sub/file1
  69'
  70
  71D=$(pwd)
  72
  73test_expect_success 'apply --whitespace=strip in subdir' '
  74
  75        cd "$D" &&
  76        git config --unset-all apply.whitespace &&
  77        rm -f sub/file1 &&
  78        cp saved sub/file1 &&
  79        git update-index --refresh &&
  80
  81        cd sub &&
  82        git apply --whitespace=strip ../patch.file &&
  83        check_result file1
  84'
  85
  86test_expect_success 'apply --whitespace=strip from config in subdir' '
  87
  88        cd "$D" &&
  89        git config apply.whitespace strip &&
  90        rm -f sub/file1 &&
  91        cp saved sub/file1 &&
  92        git update-index --refresh &&
  93
  94        cd sub &&
  95        git apply ../patch.file &&
  96        check_result file1
  97'
  98
  99test_expect_success 'same in subdir but with traditional patch input' '
 100
 101        cd "$D" &&
 102        git config apply.whitespace strip &&
 103        rm -f sub/file1 &&
 104        cp saved sub/file1 &&
 105        git update-index --refresh &&
 106
 107        cd sub &&
 108        git apply ../gpatch.file &&
 109        check_result file1
 110'
 111
 112test_expect_success 'same but with traditional patch input of depth 1' '
 113
 114        cd "$D" &&
 115        git config apply.whitespace strip &&
 116        rm -f sub/file1 &&
 117        cp saved sub/file1 &&
 118        git update-index --refresh &&
 119
 120        cd sub &&
 121        git apply ../gpatch-sub.file &&
 122        check_result file1
 123'
 124
 125test_expect_success 'same but with traditional patch input of depth 2' '
 126
 127        cd "$D" &&
 128        git config apply.whitespace strip &&
 129        rm -f sub/file1 &&
 130        cp saved sub/file1 &&
 131        git update-index --refresh &&
 132
 133        cd sub &&
 134        git apply ../gpatch-ab-sub.file &&
 135        check_result file1
 136'
 137
 138test_expect_success 'same but with traditional patch input of depth 1' '
 139
 140        cd "$D" &&
 141        git config apply.whitespace strip &&
 142        rm -f sub/file1 &&
 143        cp saved sub/file1 &&
 144        git update-index --refresh &&
 145
 146        git apply -p0 gpatch-sub.file &&
 147        check_result sub/file1
 148'
 149
 150test_expect_success 'same but with traditional patch input of depth 2' '
 151
 152        cd "$D" &&
 153        git config apply.whitespace strip &&
 154        rm -f sub/file1 &&
 155        cp saved sub/file1 &&
 156        git update-index --refresh &&
 157
 158        git apply gpatch-ab-sub.file &&
 159        check_result sub/file1
 160'
 161
 162test_expect_success 'in subdir with traditional patch input' '
 163        cd "$D" &&
 164        git config apply.whitespace strip &&
 165        cat >.gitattributes <<-EOF &&
 166        /* whitespace=blank-at-eol
 167        sub/* whitespace=-blank-at-eol
 168        EOF
 169        rm -f sub/file1 &&
 170        cp saved sub/file1 &&
 171        git update-index --refresh &&
 172
 173        cd sub &&
 174        git apply ../gpatch.file &&
 175        echo "B " >expect &&
 176        test_cmp expect file1
 177'
 178
 179test_done