@matheusbsbs / matheus-bagliano / commits / 9f41a91a7d
Fork 0

tests: try git apply from subdir of toplevel

Make sure git apply can apply patches with paths relative to the toplevel of a work tree, a subdirectory, or within the repository metadata directory. Relative paths are broken for most commands when run from a subdirectory of $GIT_DIR, "git apply" being no exception. The other tests are meant to keep the demonstration of that company. Based on a test by Duy. Cc: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Jul 24, 2010 at 06:18 UTC 9f41a91a7d100055fbd527f35b8cddae0bd91cac
1 file changed +141
t/t4111-apply-subdir.sh new
+141
@@ -0,0 +1,141 @@
1 +#!/bin/sh
2 +
3 +test_description='patching from inconvenient places'
4 +
5 +. ./test-lib.sh
6 +
7 +test_expect_success 'setup' '
8 + cat >patch <<-\EOF &&
9 + diff file.orig file
10 + --- a/file.orig
11 + +++ b/file
12 + @@ -1 +1,2 @@
13 + 1
14 + +2
15 + EOF
16 + patch="$(pwd)/patch" &&
17 +
18 + echo 1 >preimage &&
19 + printf "%s\n" 1 2 >postimage &&
20 + echo 3 >other &&
21 +
22 + test_tick &&
23 + git commit --allow-empty -m basis
24 +'
25 +
26 +test_expect_success 'setup: subdir' '
27 + reset_subdir() {
28 + git reset &&
29 + mkdir -p sub/dir/b &&
30 + mkdir -p objects &&
31 + cp "$1" file &&
32 + cp "$1" objects/file &&
33 + cp "$1" sub/dir/file &&
34 + cp "$1" sub/dir/b/file &&
35 + git add file sub/dir/file sub/dir/b/file objects/file &&
36 + cp "$2" file &&
37 + cp "$2" sub/dir/file &&
38 + cp "$2" sub/dir/b/file &&
39 + cp "$2" objects/file
40 + }
41 +'
42 +
43 +test_expect_success 'apply from subdir of toplevel' '
44 + cp postimage expected &&
45 + reset_subdir other preimage &&
46 + (
47 + cd sub/dir &&
48 + git apply "$patch"
49 + ) &&
50 + test_cmp expected sub/dir/file
51 +'
52 +
53 +test_expect_success 'apply --cached from subdir of toplevel' '
54 + cp postimage expected &&
55 + cp other expected.working &&
56 + reset_subdir preimage other &&
57 + (
58 + cd sub/dir &&
59 + git apply --cached "$patch"
60 + ) &&
61 + git show :sub/dir/file >actual &&
62 + test_cmp expected actual &&
63 + test_cmp expected.working sub/dir/file
64 +'
65 +
66 +test_expect_success 'apply --index from subdir of toplevel' '
67 + cp postimage expected &&
68 + reset_subdir preimage other &&
69 + (
70 + cd sub/dir &&
71 + test_must_fail git apply --index "$patch"
72 + ) &&
73 + reset_subdir other preimage &&
74 + (
75 + cd sub/dir &&
76 + test_must_fail git apply --index "$patch"
77 + ) &&
78 + reset_subdir preimage preimage &&
79 + (
80 + cd sub/dir &&
81 + git apply --index "$patch"
82 + ) &&
83 + git show :sub/dir/file >actual &&
84 + test_cmp expected actual &&
85 + test_cmp expected sub/dir/file
86 +'
87 +
88 +test_expect_success 'apply from .git dir' '
89 + cp postimage expected &&
90 + cp preimage .git/file &&
91 + cp preimage .git/objects/file
92 + (
93 + cd .git &&
94 + git apply "$patch"
95 + ) &&
96 + test_cmp expected .git/file
97 +'
98 +
99 +test_expect_failure 'apply from subdir of .git dir' '
100 + cp postimage expected &&
101 + cp preimage .git/file &&
102 + cp preimage .git/objects/file
103 + (
104 + cd .git/objects &&
105 + git apply "$patch"
106 + ) &&
107 + test_cmp expected .git/objects/file
108 +'
109 +
110 +test_expect_success 'apply --cached from .git dir' '
111 + cp postimage expected &&
112 + cp other expected.working &&
113 + cp other .git/file &&
114 + reset_subdir preimage other &&
115 + (
116 + cd .git &&
117 + git apply --cached "$patch"
118 + ) &&
119 + git show :file >actual &&
120 + test_cmp expected actual &&
121 + test_cmp expected.working file &&
122 + test_cmp expected.working .git/file
123 +'
124 +
125 +test_expect_success 'apply --cached from subdir of .git dir' '
126 + cp postimage expected &&
127 + cp preimage expected.subdir &&
128 + cp other .git/file &&
129 + cp other .git/objects/file &&
130 + reset_subdir preimage other &&
131 + (
132 + cd .git/objects &&
133 + git apply --cached "$patch"
134 + ) &&
135 + git show :file >actual &&
136 + git show :objects/file >actual.subdir &&
137 + test_cmp expected actual &&
138 + test_cmp expected.subdir actual.subdir
139 +'
140 +
141 +test_done