#!/bin/sh # # Copyright (c) 2007 Shawn O. Pearce # global test_description := ''git apply -p handling.'' source ./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 (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git apply -p handling.">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\tmkdir sub &&\n"> <"\techo A >sub/file1 &&\n"> <"\tcp sub/file1 file1.saved &&\n"> <"\tgit add sub/file1 &&\n"> <"\techo B >sub/file1 &&\n"> <"\tgit diff >patch.file &&\n"> <"\tgit checkout -- sub/file1 &&\n"> <"\tgit mv sub s\u00fcb &&\n"> <"\techo B >s\u00fcb/file1 &&\n"> <"\tgit diff >patch.escaped &&\n"> <"\tgrep \"[\\]\" patch.escaped &&\n"> <"\trm s\u00fcb/file1 &&\n"> <"\trmdir s\u00fcb\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply git diff with -p2">)} {(SQ <"\n"> <"\tcp file1.saved file1 &&\n"> <"\tgit apply -p2 patch.file\n">)} ) (C {(test_expect_success)} {(SQ <"apply with too large -p">)} { (SQ <"\n"> <"\tcp file1.saved file1 &&\n"> <"\ttest_must_fail git apply --stat -p3 patch.file 2>err &&\n"> <"\ttest_i18ngrep \"removing 3 leading\" err\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply (-p2) traditional diff with funny filenames">)} { (SQ <"\n"> <"\tcat >patch.quotes <<-\\EOF &&\n"> <"\tdiff -u \"a/\"sub/file1 \"b/\"sub/file1\n"> <"\t--- \"a/\"sub/file1\n"> <"\t+++ \"b/\"sub/file1\n"> <"\t@@ -1 +1 @@\n"> <"\t-A\n"> <"\t+B\n"> <"\tEOF\n"> <"\techo B >expected &&\n"> <"\n"> <"\tcp file1.saved file1 &&\n"> <"\tgit apply -p2 patch.quotes &&\n"> <"\ttest_cmp expected file1\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply with too large -p and fancy filename">)} { (SQ <"\n"> <"\tcp file1.saved file1 &&\n"> <"\ttest_must_fail git apply --stat -p3 patch.escaped 2>err &&\n"> <"\ttest_i18ngrep \"removing 3 leading\" err\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply (-p2) diff, mode change only">)} { (SQ <"\n"> <"\tcat >patch.chmod <<-\\EOF &&\n"> <"\tdiff --git a/sub/file1 b/sub/file1\n"> <"\told mode 100644\n"> <"\tnew mode 100755\n"> <"\tEOF\n"> <"\ttest_chmod -x file1 &&\n"> <"\tgit apply --index -p2 patch.chmod &&\n"> <"\tcase $(git ls-files -s file1) in 100755*) : good;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(FILEMODE)} {(SQ <"file mode was changed">)} {(SQ <"\n"> <"\ttest -x file1\n">)} ) (C {(test_expect_success)} {(SQ <"apply (-p2) diff, rename">)} { (SQ <"\n"> <"\tcat >patch.rename <<-\\EOF &&\n"> <"\tdiff --git a/sub/file1 b/sub/file2\n"> <"\tsimilarity index 100%\n"> <"\trename from sub/file1\n"> <"\trename to sub/file2\n"> <"\tEOF\n"> <"\techo A >expected &&\n"> <"\n"> <"\tcp file1.saved file1 &&\n"> <"\trm -f file2 &&\n"> <"\tgit apply -p2 patch.rename &&\n"> <"\ttest_cmp expected file2\n"> ) } ) (C {(test_done)}) ] )