#!/bin/sh # # Copyright (c) 2007 Shawn O. Pearce # test_description='git apply -p handling.' . ./test-lib.sh test_expect_success setup ' mkdir sub && echo A >sub/file1 && cp sub/file1 file1.saved && git add sub/file1 && echo B >sub/file1 && git diff >patch.file && git checkout -- sub/file1 && git mv sub süb && echo B >süb/file1 && git diff >patch.escaped && grep "[\]" patch.escaped && rm süb/file1 && rmdir süb ' test_expect_success 'apply git diff with -p2' ' cp file1.saved file1 && git apply -p2 patch.file ' test_expect_success 'apply with too large -p' ' cp file1.saved file1 && test_must_fail git apply --stat -p3 patch.file 2>err && test_i18ngrep "removing 3 leading" err ' test_expect_success 'apply (-p2) traditional diff with funny filenames' ' cat >patch.quotes <<-\EOF && diff -u "a/"sub/file1 "b/"sub/file1 --- "a/"sub/file1 +++ "b/"sub/file1 @@ -1 +1 @@ -A +B EOF echo B >expected && cp file1.saved file1 && git apply -p2 patch.quotes && test_cmp expected file1 ' test_expect_success 'apply with too large -p and fancy filename' ' cp file1.saved file1 && test_must_fail git apply --stat -p3 patch.escaped 2>err && test_i18ngrep "removing 3 leading" err ' test_expect_success 'apply (-p2) diff, mode change only' ' cat >patch.chmod <<-\EOF && diff --git a/sub/file1 b/sub/file1 old mode 100644 new mode 100755 EOF test_chmod -x file1 && git apply --index -p2 patch.chmod && case $(git ls-files -s file1) in 100755*) : good;; *) false;; esac ' test_expect_success FILEMODE 'file mode was changed' ' test -x file1 ' test_expect_success 'apply (-p2) diff, rename' ' cat >patch.rename <<-\EOF && diff --git a/sub/file1 b/sub/file2 similarity index 100% rename from sub/file1 rename to sub/file2 EOF echo A >expected && cp file1.saved file1 && rm -f file2 && git apply -p2 patch.rename && test_cmp expected file2 ' test_done