Show More
@@ -129,3 +129,104 b' attack /tmp/test' | |||||
129 | [255] |
|
129 | [255] | |
130 |
|
130 | |||
131 | $ cd .. |
|
131 | $ cd .. | |
|
132 | ||||
|
133 | Test symlink traversal on merge: | |||
|
134 | -------------------------------- | |||
|
135 | ||||
|
136 | #if symlink | |||
|
137 | ||||
|
138 | set up symlink hell | |||
|
139 | ||||
|
140 | $ mkdir merge-symlink-out | |||
|
141 | $ hg init merge-symlink | |||
|
142 | $ cd merge-symlink | |||
|
143 | $ touch base | |||
|
144 | $ hg commit -qAm base | |||
|
145 | $ ln -s ../merge-symlink-out a | |||
|
146 | $ hg commit -qAm 'symlink a -> ../merge-symlink-out' | |||
|
147 | $ hg up -q 0 | |||
|
148 | $ mkdir a | |||
|
149 | $ touch a/poisoned | |||
|
150 | $ hg commit -qAm 'file a/poisoned' | |||
|
151 | $ hg log -G -T '{rev}: {desc}\n' | |||
|
152 | @ 2: file a/poisoned | |||
|
153 | | | |||
|
154 | | o 1: symlink a -> ../merge-symlink-out | |||
|
155 | |/ | |||
|
156 | o 0: base | |||
|
157 | ||||
|
158 | ||||
|
159 | try trivial merge | |||
|
160 | ||||
|
161 | $ hg up -qC 1 | |||
|
162 | $ hg merge 2 | |||
|
163 | abort: path 'a/poisoned' traverses symbolic link 'a' | |||
|
164 | [255] | |||
|
165 | ||||
|
166 | try rebase onto other revision: cache of audited paths should be discarded, | |||
|
167 | and the rebase should fail (issue5628) | |||
|
168 | ||||
|
169 | $ hg up -qC 2 | |||
|
170 | $ hg rebase -s 2 -d 1 --config extensions.rebase= | |||
|
171 | rebasing 2:e73c21d6b244 "file a/poisoned" (tip) | |||
|
172 | saved backup bundle to * (glob) | |||
|
173 | $ ls ../merge-symlink-out | |||
|
174 | poisoned | |||
|
175 | ||||
|
176 | $ cd .. | |||
|
177 | ||||
|
178 | Test symlink traversal on update: | |||
|
179 | --------------------------------- | |||
|
180 | ||||
|
181 | $ mkdir update-symlink-out | |||
|
182 | $ hg init update-symlink | |||
|
183 | $ cd update-symlink | |||
|
184 | $ ln -s ../update-symlink-out a | |||
|
185 | $ hg commit -qAm 'symlink a -> ../update-symlink-out' | |||
|
186 | $ hg rm a | |||
|
187 | $ mkdir a && touch a/b | |||
|
188 | $ hg ci -qAm 'file a/b' a/b | |||
|
189 | $ hg up -qC 0 | |||
|
190 | $ hg rm a | |||
|
191 | $ mkdir a && touch a/c | |||
|
192 | $ hg ci -qAm 'rm a, file a/c' | |||
|
193 | $ hg log -G -T '{rev}: {desc}\n' | |||
|
194 | @ 2: rm a, file a/c | |||
|
195 | | | |||
|
196 | | o 1: file a/b | |||
|
197 | |/ | |||
|
198 | o 0: symlink a -> ../update-symlink-out | |||
|
199 | ||||
|
200 | ||||
|
201 | try linear update where symlink already exists: | |||
|
202 | ||||
|
203 | $ hg up -qC 0 | |||
|
204 | $ hg up 1 | |||
|
205 | abort: path 'a/b' traverses symbolic link 'a' | |||
|
206 | [255] | |||
|
207 | ||||
|
208 | try linear update including symlinked directory and its content: paths are | |||
|
209 | audited first by calculateupdates(), where no symlink is created so both | |||
|
210 | 'a' and 'a/b' are taken as good paths. still applyupdates() should fail. | |||
|
211 | ||||
|
212 | $ hg up -qC null | |||
|
213 | $ hg up 1 | |||
|
214 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
215 | $ ls ../update-symlink-out | |||
|
216 | b | |||
|
217 | $ rm ../update-symlink-out/b | |||
|
218 | ||||
|
219 | try branch update replacing directory with symlink, and its content: the | |||
|
220 | path 'a' is audited as a directory first, which should be audited again as | |||
|
221 | a symlink. | |||
|
222 | ||||
|
223 | $ rm -f a | |||
|
224 | $ hg up -qC 2 | |||
|
225 | $ hg up 1 | |||
|
226 | 2 files updated, 0 files merged, 1 files removed, 0 files unresolved | |||
|
227 | $ ls ../update-symlink-out | |||
|
228 | b | |||
|
229 | ||||
|
230 | $ cd .. | |||
|
231 | ||||
|
232 | #endif |
@@ -908,3 +908,80 b' cases.' | |||||
908 | *** runcommand log |
|
908 | *** runcommand log | |
909 | 0 bar (bar) |
|
909 | 0 bar (bar) | |
910 | *** runcommand verify -q |
|
910 | *** runcommand verify -q | |
|
911 | ||||
|
912 | $ cd .. | |||
|
913 | ||||
|
914 | Test symlink traversal over cached audited paths: | |||
|
915 | ------------------------------------------------- | |||
|
916 | ||||
|
917 | #if symlink | |||
|
918 | ||||
|
919 | set up symlink hell | |||
|
920 | ||||
|
921 | $ mkdir merge-symlink-out | |||
|
922 | $ hg init merge-symlink | |||
|
923 | $ cd merge-symlink | |||
|
924 | $ touch base | |||
|
925 | $ hg commit -qAm base | |||
|
926 | $ ln -s ../merge-symlink-out a | |||
|
927 | $ hg commit -qAm 'symlink a -> ../merge-symlink-out' | |||
|
928 | $ hg up -q 0 | |||
|
929 | $ mkdir a | |||
|
930 | $ touch a/poisoned | |||
|
931 | $ hg commit -qAm 'file a/poisoned' | |||
|
932 | $ hg log -G -T '{rev}: {desc}\n' | |||
|
933 | @ 2: file a/poisoned | |||
|
934 | | | |||
|
935 | | o 1: symlink a -> ../merge-symlink-out | |||
|
936 | |/ | |||
|
937 | o 0: base | |||
|
938 | ||||
|
939 | ||||
|
940 | try trivial merge after update: cache of audited paths should be discarded, | |||
|
941 | and the merge should fail (issue5628) | |||
|
942 | ||||
|
943 | $ hg up -q null | |||
|
944 | >>> from hgclient import readchannel, runcommand, check | |||
|
945 | >>> @check | |||
|
946 | ... def merge(server): | |||
|
947 | ... readchannel(server) | |||
|
948 | ... # audit a/poisoned as a good path | |||
|
949 | ... runcommand(server, ['up', '-qC', '2']) | |||
|
950 | ... runcommand(server, ['up', '-qC', '1']) | |||
|
951 | ... # here a is a symlink, so a/poisoned is bad | |||
|
952 | ... runcommand(server, ['merge', '2']) | |||
|
953 | *** runcommand up -qC 2 | |||
|
954 | *** runcommand up -qC 1 | |||
|
955 | *** runcommand merge 2 | |||
|
956 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |||
|
957 | (branch merge, don't forget to commit) | |||
|
958 | $ ls ../merge-symlink-out | |||
|
959 | poisoned | |||
|
960 | ||||
|
961 | cache of repo.auditor should be discarded, so matcher would never traverse | |||
|
962 | symlinks: | |||
|
963 | ||||
|
964 | $ hg up -qC 0 | |||
|
965 | $ touch ../merge-symlink-out/poisoned | |||
|
966 | >>> from hgclient import readchannel, runcommand, check | |||
|
967 | >>> @check | |||
|
968 | ... def files(server): | |||
|
969 | ... readchannel(server) | |||
|
970 | ... runcommand(server, ['up', '-qC', '2']) | |||
|
971 | ... # audit a/poisoned as a good path | |||
|
972 | ... runcommand(server, ['files', 'a/poisoned']) | |||
|
973 | ... runcommand(server, ['up', '-qC', '0']) | |||
|
974 | ... runcommand(server, ['up', '-qC', '1']) | |||
|
975 | ... # here 'a' is a symlink, so a/poisoned should be warned | |||
|
976 | ... runcommand(server, ['files', 'a/poisoned']) | |||
|
977 | *** runcommand up -qC 2 | |||
|
978 | *** runcommand files a/poisoned | |||
|
979 | a/poisoned | |||
|
980 | *** runcommand up -qC 0 | |||
|
981 | *** runcommand up -qC 1 | |||
|
982 | *** runcommand files a/poisoned | |||
|
983 | [1] | |||
|
984 | ||||
|
985 | $ cd .. | |||
|
986 | ||||
|
987 | #endif |
General Comments 0
You need to be logged in to leave comments.
Login now