##// END OF EJS Templates
test-revert: removing a missing file has no effect...
Martin von Zweigbergk -
r23155:25e12d49 default
parent child Browse files
Show More
@@ -1,1134 +1,1090 b''
1 $ hg init repo
1 $ hg init repo
2 $ cd repo
2 $ cd repo
3 $ echo 123 > a
3 $ echo 123 > a
4 $ echo 123 > c
4 $ echo 123 > c
5 $ echo 123 > e
5 $ echo 123 > e
6 $ hg add a c e
6 $ hg add a c e
7 $ hg commit -m "first" a c e
7 $ hg commit -m "first" a c e
8
8
9 nothing changed
9 nothing changed
10
10
11 $ hg revert
11 $ hg revert
12 abort: no files or directories specified
12 abort: no files or directories specified
13 (use --all to revert all files)
13 (use --all to revert all files)
14 [255]
14 [255]
15 $ hg revert --all
15 $ hg revert --all
16
16
17 Introduce some changes and revert them
17 Introduce some changes and revert them
18 --------------------------------------
18 --------------------------------------
19
19
20 $ echo 123 > b
20 $ echo 123 > b
21
21
22 $ hg status
22 $ hg status
23 ? b
23 ? b
24 $ echo 12 > c
24 $ echo 12 > c
25
25
26 $ hg status
26 $ hg status
27 M c
27 M c
28 ? b
28 ? b
29 $ hg add b
29 $ hg add b
30
30
31 $ hg status
31 $ hg status
32 M c
32 M c
33 A b
33 A b
34 $ hg rm a
34 $ hg rm a
35
35
36 $ hg status
36 $ hg status
37 M c
37 M c
38 A b
38 A b
39 R a
39 R a
40
40
41 revert removal of a file
41 revert removal of a file
42
42
43 $ hg revert a
43 $ hg revert a
44 $ hg status
44 $ hg status
45 M c
45 M c
46 A b
46 A b
47
47
48 revert addition of a file
48 revert addition of a file
49
49
50 $ hg revert b
50 $ hg revert b
51 $ hg status
51 $ hg status
52 M c
52 M c
53 ? b
53 ? b
54
54
55 revert modification of a file (--no-backup)
55 revert modification of a file (--no-backup)
56
56
57 $ hg revert --no-backup c
57 $ hg revert --no-backup c
58 $ hg status
58 $ hg status
59 ? b
59 ? b
60
60
61 revert deletion (! status) of a added file
61 revert deletion (! status) of a added file
62 ------------------------------------------
62 ------------------------------------------
63
63
64 $ hg add b
64 $ hg add b
65
65
66 $ hg status b
66 $ hg status b
67 A b
67 A b
68 $ rm b
68 $ rm b
69 $ hg status b
69 $ hg status b
70 ! b
70 ! b
71 $ hg revert -v b
71 $ hg revert -v b
72 forgetting b
72 forgetting b
73 $ hg status b
73 $ hg status b
74 b: * (glob)
74 b: * (glob)
75
75
76 $ ls
76 $ ls
77 a
77 a
78 c
78 c
79 e
79 e
80
80
81 Test creation of backup (.orig) files
81 Test creation of backup (.orig) files
82 -------------------------------------
82 -------------------------------------
83
83
84 $ echo z > e
84 $ echo z > e
85 $ hg revert --all -v
85 $ hg revert --all -v
86 saving current version of e as e.orig
86 saving current version of e as e.orig
87 reverting e
87 reverting e
88
88
89 revert on clean file (no change)
89 revert on clean file (no change)
90 --------------------------------
90 --------------------------------
91
91
92 $ hg revert a
92 $ hg revert a
93 no changes needed to a
93 no changes needed to a
94
94
95 revert on an untracked file
95 revert on an untracked file
96 ---------------------------
96 ---------------------------
97
97
98 $ echo q > q
98 $ echo q > q
99 $ hg revert q
99 $ hg revert q
100 file not managed: q
100 file not managed: q
101 $ rm q
101 $ rm q
102
102
103 revert on file that does not exists
103 revert on file that does not exists
104 -----------------------------------
104 -----------------------------------
105
105
106 $ hg revert notfound
106 $ hg revert notfound
107 notfound: no such file in rev 334a9e57682c
107 notfound: no such file in rev 334a9e57682c
108 $ touch d
108 $ touch d
109 $ hg add d
109 $ hg add d
110 $ hg rm a
110 $ hg rm a
111 $ hg commit -m "second"
111 $ hg commit -m "second"
112 $ echo z > z
112 $ echo z > z
113 $ hg add z
113 $ hg add z
114 $ hg st
114 $ hg st
115 A z
115 A z
116 ? e.orig
116 ? e.orig
117
117
118 revert to another revision (--rev)
118 revert to another revision (--rev)
119 ----------------------------------
119 ----------------------------------
120
120
121 $ hg revert --all -r0
121 $ hg revert --all -r0
122 adding a
122 adding a
123 removing d
123 removing d
124 forgetting z
124 forgetting z
125
125
126 revert explicitly to parent (--rev)
126 revert explicitly to parent (--rev)
127 -----------------------------------
127 -----------------------------------
128
128
129 $ hg revert --all -rtip
129 $ hg revert --all -rtip
130 forgetting a
130 forgetting a
131 undeleting d
131 undeleting d
132 $ rm a *.orig
132 $ rm a *.orig
133
133
134 revert to another revision (--rev) and exact match
134 revert to another revision (--rev) and exact match
135 --------------------------------------------------
135 --------------------------------------------------
136
136
137 exact match are more silent
137 exact match are more silent
138
138
139 $ hg revert -r0 a
139 $ hg revert -r0 a
140 $ hg st a
140 $ hg st a
141 A a
141 A a
142 $ hg rm d
142 $ hg rm d
143 $ hg st d
143 $ hg st d
144 R d
144 R d
145
145
146 should keep d removed
146 should keep d removed
147
147
148 $ hg revert -r0 d
148 $ hg revert -r0 d
149 no changes needed to d
149 no changes needed to d
150 $ hg st d
150 $ hg st d
151 R d
151 R d
152
152
153 $ hg update -C
153 $ hg update -C
154 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
154 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
155
155
156 revert of exec bit
156 revert of exec bit
157 ------------------
157 ------------------
158
158
159 #if execbit
159 #if execbit
160 $ chmod +x c
160 $ chmod +x c
161 $ hg revert --all
161 $ hg revert --all
162 reverting c
162 reverting c
163
163
164 $ test -x c || echo non-executable
164 $ test -x c || echo non-executable
165 non-executable
165 non-executable
166
166
167 $ chmod +x c
167 $ chmod +x c
168 $ hg commit -m exe
168 $ hg commit -m exe
169
169
170 $ chmod -x c
170 $ chmod -x c
171 $ hg revert --all
171 $ hg revert --all
172 reverting c
172 reverting c
173
173
174 $ test -x c && echo executable
174 $ test -x c && echo executable
175 executable
175 executable
176 #endif
176 #endif
177
177
178 $ cd ..
178 $ cd ..
179
179
180
180
181 Issue241: update and revert produces inconsistent repositories
181 Issue241: update and revert produces inconsistent repositories
182 --------------------------------------------------------------
182 --------------------------------------------------------------
183
183
184 $ hg init a
184 $ hg init a
185 $ cd a
185 $ cd a
186 $ echo a >> a
186 $ echo a >> a
187 $ hg commit -A -d '1 0' -m a
187 $ hg commit -A -d '1 0' -m a
188 adding a
188 adding a
189 $ echo a >> a
189 $ echo a >> a
190 $ hg commit -d '2 0' -m a
190 $ hg commit -d '2 0' -m a
191 $ hg update 0
191 $ hg update 0
192 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
192 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
193 $ mkdir b
193 $ mkdir b
194 $ echo b > b/b
194 $ echo b > b/b
195
195
196 call `hg revert` with no file specified
196 call `hg revert` with no file specified
197 ---------------------------------------
197 ---------------------------------------
198
198
199 $ hg revert -rtip
199 $ hg revert -rtip
200 abort: no files or directories specified
200 abort: no files or directories specified
201 (use --all to revert all files, or 'hg update 1' to update)
201 (use --all to revert all files, or 'hg update 1' to update)
202 [255]
202 [255]
203
203
204 call `hg revert` with --all
204 call `hg revert` with --all
205 ---------------------------
205 ---------------------------
206
206
207 $ hg revert --all -rtip
207 $ hg revert --all -rtip
208 reverting a
208 reverting a
209
209
210
210
211 Issue332: confusing message when reverting directory
211 Issue332: confusing message when reverting directory
212 ----------------------------------------------------
212 ----------------------------------------------------
213
213
214 $ hg ci -A -m b
214 $ hg ci -A -m b
215 adding b/b
215 adding b/b
216 created new head
216 created new head
217 $ echo foobar > b/b
217 $ echo foobar > b/b
218 $ mkdir newdir
218 $ mkdir newdir
219 $ echo foo > newdir/newfile
219 $ echo foo > newdir/newfile
220 $ hg add newdir/newfile
220 $ hg add newdir/newfile
221 $ hg revert b newdir
221 $ hg revert b newdir
222 reverting b/b (glob)
222 reverting b/b (glob)
223 forgetting newdir/newfile (glob)
223 forgetting newdir/newfile (glob)
224 $ echo foobar > b/b
224 $ echo foobar > b/b
225 $ hg revert .
225 $ hg revert .
226 reverting b/b (glob)
226 reverting b/b (glob)
227
227
228
228
229 reverting a rename target should revert the source
229 reverting a rename target should revert the source
230 --------------------------------------------------
230 --------------------------------------------------
231
231
232 $ hg mv a newa
232 $ hg mv a newa
233 $ hg revert newa
233 $ hg revert newa
234 $ hg st a newa
234 $ hg st a newa
235 ? newa
235 ? newa
236
236
237 $ cd ..
237 $ cd ..
238
238
239 $ hg init ignored
239 $ hg init ignored
240 $ cd ignored
240 $ cd ignored
241 $ echo '^ignored$' > .hgignore
241 $ echo '^ignored$' > .hgignore
242 $ echo '^ignoreddir$' >> .hgignore
242 $ echo '^ignoreddir$' >> .hgignore
243 $ echo '^removed$' >> .hgignore
243 $ echo '^removed$' >> .hgignore
244
244
245 $ mkdir ignoreddir
245 $ mkdir ignoreddir
246 $ touch ignoreddir/file
246 $ touch ignoreddir/file
247 $ touch ignoreddir/removed
247 $ touch ignoreddir/removed
248 $ touch ignored
248 $ touch ignored
249 $ touch removed
249 $ touch removed
250
250
251 4 ignored files (we will add/commit everything)
251 4 ignored files (we will add/commit everything)
252
252
253 $ hg st -A -X .hgignore
253 $ hg st -A -X .hgignore
254 I ignored
254 I ignored
255 I ignoreddir/file
255 I ignoreddir/file
256 I ignoreddir/removed
256 I ignoreddir/removed
257 I removed
257 I removed
258 $ hg ci -qAm 'add files' ignored ignoreddir/file ignoreddir/removed removed
258 $ hg ci -qAm 'add files' ignored ignoreddir/file ignoreddir/removed removed
259
259
260 $ echo >> ignored
260 $ echo >> ignored
261 $ echo >> ignoreddir/file
261 $ echo >> ignoreddir/file
262 $ hg rm removed ignoreddir/removed
262 $ hg rm removed ignoreddir/removed
263
263
264 should revert ignored* and undelete *removed
264 should revert ignored* and undelete *removed
265 --------------------------------------------
265 --------------------------------------------
266
266
267 $ hg revert -a --no-backup
267 $ hg revert -a --no-backup
268 reverting ignored
268 reverting ignored
269 reverting ignoreddir/file (glob)
269 reverting ignoreddir/file (glob)
270 undeleting ignoreddir/removed (glob)
270 undeleting ignoreddir/removed (glob)
271 undeleting removed
271 undeleting removed
272 $ hg st -mardi
272 $ hg st -mardi
273
273
274 $ hg up -qC
274 $ hg up -qC
275 $ echo >> ignored
275 $ echo >> ignored
276 $ hg rm removed
276 $ hg rm removed
277
277
278 should silently revert the named files
278 should silently revert the named files
279 --------------------------------------
279 --------------------------------------
280
280
281 $ hg revert --no-backup ignored removed
281 $ hg revert --no-backup ignored removed
282 $ hg st -mardi
282 $ hg st -mardi
283
283
284 Reverting copy (issue3920)
284 Reverting copy (issue3920)
285 --------------------------
285 --------------------------
286
286
287 someone set up us the copies
287 someone set up us the copies
288
288
289 $ rm .hgignore
289 $ rm .hgignore
290 $ hg update -C
290 $ hg update -C
291 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
291 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
292 $ hg mv ignored allyour
292 $ hg mv ignored allyour
293 $ hg copy removed base
293 $ hg copy removed base
294 $ hg commit -m rename
294 $ hg commit -m rename
295
295
296 copies and renames, you have no chance to survive make your time (issue3920)
296 copies and renames, you have no chance to survive make your time (issue3920)
297
297
298 $ hg update '.^'
298 $ hg update '.^'
299 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
299 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
300 $ hg revert -rtip -a
300 $ hg revert -rtip -a
301 adding allyour
301 adding allyour
302 adding base
302 adding base
303 removing ignored
303 removing ignored
304 $ hg status -C
304 $ hg status -C
305 A allyour
305 A allyour
306 ignored
306 ignored
307 A base
307 A base
308 removed
308 removed
309 R ignored
309 R ignored
310
310
311 Test revert of a file added by one side of the merge
311 Test revert of a file added by one side of the merge
312 ====================================================
312 ====================================================
313
313
314 remove any pending change
314 remove any pending change
315
315
316 $ hg revert --all
316 $ hg revert --all
317 forgetting allyour
317 forgetting allyour
318 forgetting base
318 forgetting base
319 undeleting ignored
319 undeleting ignored
320 $ hg purge --all --config extensions.purge=
320 $ hg purge --all --config extensions.purge=
321
321
322 Adds a new commit
322 Adds a new commit
323
323
324 $ echo foo > newadd
324 $ echo foo > newadd
325 $ hg add newadd
325 $ hg add newadd
326 $ hg commit -m 'other adds'
326 $ hg commit -m 'other adds'
327 created new head
327 created new head
328
328
329
329
330 merge it with the other head
330 merge it with the other head
331
331
332 $ hg merge # merge 1 into 2
332 $ hg merge # merge 1 into 2
333 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
333 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
334 (branch merge, don't forget to commit)
334 (branch merge, don't forget to commit)
335 $ hg summary
335 $ hg summary
336 parent: 2:b8ec310b2d4e tip
336 parent: 2:b8ec310b2d4e tip
337 other adds
337 other adds
338 parent: 1:f6180deb8fbe
338 parent: 1:f6180deb8fbe
339 rename
339 rename
340 branch: default
340 branch: default
341 commit: 2 modified, 1 removed (merge)
341 commit: 2 modified, 1 removed (merge)
342 update: (current)
342 update: (current)
343
343
344 clarifies who added what
344 clarifies who added what
345
345
346 $ hg status
346 $ hg status
347 M allyour
347 M allyour
348 M base
348 M base
349 R ignored
349 R ignored
350 $ hg status --change 'p1()'
350 $ hg status --change 'p1()'
351 A newadd
351 A newadd
352 $ hg status --change 'p2()'
352 $ hg status --change 'p2()'
353 A allyour
353 A allyour
354 A base
354 A base
355 R ignored
355 R ignored
356
356
357 revert file added by p1() to p1() state
357 revert file added by p1() to p1() state
358 -----------------------------------------
358 -----------------------------------------
359
359
360 $ hg revert -r 'p1()' 'glob:newad?'
360 $ hg revert -r 'p1()' 'glob:newad?'
361 $ hg status
361 $ hg status
362 M allyour
362 M allyour
363 M base
363 M base
364 R ignored
364 R ignored
365
365
366 revert file added by p1() to p2() state
366 revert file added by p1() to p2() state
367 ------------------------------------------
367 ------------------------------------------
368
368
369 $ hg revert -r 'p2()' 'glob:newad?'
369 $ hg revert -r 'p2()' 'glob:newad?'
370 removing newadd
370 removing newadd
371 $ hg status
371 $ hg status
372 M allyour
372 M allyour
373 M base
373 M base
374 R ignored
374 R ignored
375 R newadd
375 R newadd
376
376
377 revert file added by p2() to p2() state
377 revert file added by p2() to p2() state
378 ------------------------------------------
378 ------------------------------------------
379
379
380 $ hg revert -r 'p2()' 'glob:allyou?'
380 $ hg revert -r 'p2()' 'glob:allyou?'
381 $ hg status
381 $ hg status
382 M allyour
382 M allyour
383 M base
383 M base
384 R ignored
384 R ignored
385 R newadd
385 R newadd
386
386
387 revert file added by p2() to p1() state
387 revert file added by p2() to p1() state
388 ------------------------------------------
388 ------------------------------------------
389
389
390 $ hg revert -r 'p1()' 'glob:allyou?'
390 $ hg revert -r 'p1()' 'glob:allyou?'
391 removing allyour
391 removing allyour
392 $ hg status
392 $ hg status
393 M base
393 M base
394 R allyour
394 R allyour
395 R ignored
395 R ignored
396 R newadd
396 R newadd
397
397
398 Systematic behavior validation of most possible cases
398 Systematic behavior validation of most possible cases
399 =====================================================
399 =====================================================
400
400
401 This section tests most of the possible combinations of working directory
401 This section tests most of the possible combinations of working directory
402 changes and inter-revision changes. The number of possible cases is significant
402 changes and inter-revision changes. The number of possible cases is significant
403 but they all have a slightly different handling. So this section commits to
403 but they all have a slightly different handling. So this section commits to
404 generating and testing all of them to allow safe refactoring of the revert code.
404 generating and testing all of them to allow safe refactoring of the revert code.
405
405
406 A python script is used to generate a file history for each combination of
406 A python script is used to generate a file history for each combination of
407 changes between, on one side the working directory and its parent and on
407 changes between, on one side the working directory and its parent and on
408 the other side, changes between a revert target (--rev) and working directory
408 the other side, changes between a revert target (--rev) and working directory
409 parent. The three states generated are:
409 parent. The three states generated are:
410
410
411 - a "base" revision
411 - a "base" revision
412 - a "parent" revision
412 - a "parent" revision
413 - the working directory (based on "parent")
413 - the working directory (based on "parent")
414
414
415 The file generated have names of the form:
415 The file generated have names of the form:
416
416
417 <changeset-state>_<working-copy-state>
417 <changeset-state>_<working-copy-state>
418
418
419 Here, "changeset-state" conveys the state in "base" and "parent" (or the change
419 Here, "changeset-state" conveys the state in "base" and "parent" (or the change
420 that happen between them), "working-copy-state" is self explanatory.
420 that happen between them), "working-copy-state" is self explanatory.
421
421
422 All known states are not tested yet. See inline documentation for details.
422 All known states are not tested yet. See inline documentation for details.
423 Special cases from merge and rename are not tested by this section.
423 Special cases from merge and rename are not tested by this section.
424
424
425 Write the python script to disk
425 Write the python script to disk
426 -------------------------------
426 -------------------------------
427
427
428 $ cat << EOF > gen-revert-cases.py
428 $ cat << EOF > gen-revert-cases.py
429 > # generate proper file state to test revert behavior
429 > # generate proper file state to test revert behavior
430 > import sys
430 > import sys
431 > import os
431 > import os
432 >
432 >
433 > # content of the file in "base" and "parent"
433 > # content of the file in "base" and "parent"
434 > # None means no file at all
434 > # None means no file at all
435 > ctxcontent = {
435 > ctxcontent = {
436 > # clean: no change from base to parent
436 > # clean: no change from base to parent
437 > 'clean': ['base', 'base'],
437 > 'clean': ['base', 'base'],
438 > # modified: file content change from base to parent
438 > # modified: file content change from base to parent
439 > 'modified': ['base', 'parent'],
439 > 'modified': ['base', 'parent'],
440 > # added: file is missing from base and added in parent
440 > # added: file is missing from base and added in parent
441 > 'added': [None, 'parent'],
441 > 'added': [None, 'parent'],
442 > # removed: file exist in base but is removed from parent
442 > # removed: file exist in base but is removed from parent
443 > 'removed': ['base', None],
443 > 'removed': ['base', None],
444 > # file exist neither in base not in parent
444 > # file exist neither in base not in parent
445 > 'missing': [None, None],
445 > 'missing': [None, None],
446 > }
446 > }
447 >
447 >
448 > # content of file in working copy
448 > # content of file in working copy
449 > wccontent = {
449 > wccontent = {
450 > # clean: wc content is the same as parent
450 > # clean: wc content is the same as parent
451 > 'clean': lambda cc: cc[1],
451 > 'clean': lambda cc: cc[1],
452 > # revert: wc content is the same as base
452 > # revert: wc content is the same as base
453 > 'revert': lambda cc: cc[0],
453 > 'revert': lambda cc: cc[0],
454 > # wc: file exist with a content different from base and parent
454 > # wc: file exist with a content different from base and parent
455 > 'wc': lambda cc: 'wc',
455 > 'wc': lambda cc: 'wc',
456 > # removed: file is missing and marked as untracked
456 > # removed: file is missing and marked as untracked
457 > 'removed': lambda cc: None,
457 > 'removed': lambda cc: None,
458 > # deleted: file is recorded as tracked but missing
458 > # deleted: file is recorded as tracked but missing
459 > # rely on file deletion outside of this script
459 > # rely on file deletion outside of this script
460 > 'deleted': lambda cc:'TOBEDELETED',
460 > 'deleted': lambda cc:'TOBEDELETED',
461 > }
461 > }
462 > # untracked-X is a version of X where the file is not tracked (? unknown)
462 > # untracked-X is a version of X where the file is not tracked (? unknown)
463 > wccontent['untracked-clean'] = wccontent['clean']
463 > wccontent['untracked-clean'] = wccontent['clean']
464 > wccontent['untracked-revert'] = wccontent['revert']
464 > wccontent['untracked-revert'] = wccontent['revert']
465 > wccontent['untracked-wc'] = wccontent['wc']
465 > wccontent['untracked-wc'] = wccontent['wc']
466 >
466 >
467 > # build the combination of possible states
467 > # build the combination of possible states
468 > combination = []
468 > combination = []
469 > for ctxkey, ctxvalue in ctxcontent.iteritems():
469 > for ctxkey, ctxvalue in ctxcontent.iteritems():
470 > for wckey in wccontent:
470 > for wckey in wccontent:
471 > if (ctxvalue[0] == ctxvalue[1] and 'revert' in wckey):
471 > if (ctxvalue[0] == ctxvalue[1] and 'revert' in wckey):
472 > continue
472 > continue
473 > if not ctxvalue[0] and 'revert' in wckey:
473 > if not ctxvalue[0] and 'revert' in wckey:
474 > continue
474 > continue
475 > if not ctxvalue[1] and ('removed' in wckey or 'deleted' in wckey):
476 > continue
475 > filename = "%s_%s" % (ctxkey, wckey)
477 > filename = "%s_%s" % (ctxkey, wckey)
476 > combination.append((filename, ctxkey, wckey))
478 > combination.append((filename, ctxkey, wckey))
477 >
479 >
478 > # make sure we have stable output
480 > # make sure we have stable output
479 > combination.sort()
481 > combination.sort()
480 >
482 >
481 > # retrieve the state we must generate
483 > # retrieve the state we must generate
482 > target = sys.argv[1]
484 > target = sys.argv[1]
483 >
485 >
484 > # compute file content
486 > # compute file content
485 > content = []
487 > content = []
486 > for filename, ctxkey, wckey in combination:
488 > for filename, ctxkey, wckey in combination:
487 > cc = ctxcontent[ctxkey]
489 > cc = ctxcontent[ctxkey]
488 > if target == 'filelist':
490 > if target == 'filelist':
489 > print filename
491 > print filename
490 > elif target == 'base':
492 > elif target == 'base':
491 > content.append((filename, cc[0]))
493 > content.append((filename, cc[0]))
492 > elif target == 'parent':
494 > elif target == 'parent':
493 > content.append((filename, cc[1]))
495 > content.append((filename, cc[1]))
494 > elif target == 'wc':
496 > elif target == 'wc':
495 > content.append((filename, wccontent[wckey](cc)))
497 > content.append((filename, wccontent[wckey](cc)))
496 > else:
498 > else:
497 > print >> sys.stderr, "unknown target:", target
499 > print >> sys.stderr, "unknown target:", target
498 > sys.exit(1)
500 > sys.exit(1)
499 >
501 >
500 > # write actual content
502 > # write actual content
501 > for filename, data in content:
503 > for filename, data in content:
502 > if data is not None:
504 > if data is not None:
503 > f = open(filename, 'w')
505 > f = open(filename, 'w')
504 > f.write(data + '\n')
506 > f.write(data + '\n')
505 > f.close()
507 > f.close()
506 > elif os.path.exists(filename):
508 > elif os.path.exists(filename):
507 > os.remove(filename)
509 > os.remove(filename)
508 > EOF
510 > EOF
509
511
510 check list of planned files
512 check list of planned files
511
513
512 $ python gen-revert-cases.py filelist
514 $ python gen-revert-cases.py filelist
513 added_clean
515 added_clean
514 added_deleted
516 added_deleted
515 added_removed
517 added_removed
516 added_untracked-clean
518 added_untracked-clean
517 added_untracked-wc
519 added_untracked-wc
518 added_wc
520 added_wc
519 clean_clean
521 clean_clean
520 clean_deleted
522 clean_deleted
521 clean_removed
523 clean_removed
522 clean_untracked-clean
524 clean_untracked-clean
523 clean_untracked-wc
525 clean_untracked-wc
524 clean_wc
526 clean_wc
525 missing_clean
527 missing_clean
526 missing_deleted
527 missing_removed
528 missing_untracked-clean
528 missing_untracked-clean
529 missing_untracked-wc
529 missing_untracked-wc
530 missing_wc
530 missing_wc
531 modified_clean
531 modified_clean
532 modified_deleted
532 modified_deleted
533 modified_removed
533 modified_removed
534 modified_revert
534 modified_revert
535 modified_untracked-clean
535 modified_untracked-clean
536 modified_untracked-revert
536 modified_untracked-revert
537 modified_untracked-wc
537 modified_untracked-wc
538 modified_wc
538 modified_wc
539 removed_clean
539 removed_clean
540 removed_deleted
541 removed_removed
542 removed_revert
540 removed_revert
543 removed_untracked-clean
541 removed_untracked-clean
544 removed_untracked-revert
542 removed_untracked-revert
545 removed_untracked-wc
543 removed_untracked-wc
546 removed_wc
544 removed_wc
547
545
548 Script to make a simple text version of the content
546 Script to make a simple text version of the content
549 ---------------------------------------------------
547 ---------------------------------------------------
550
548
551 $ cat << EOF >> dircontent.py
549 $ cat << EOF >> dircontent.py
552 > # generate a simple text view of the directory for easy comparison
550 > # generate a simple text view of the directory for easy comparison
553 > import os
551 > import os
554 > files = os.listdir('.')
552 > files = os.listdir('.')
555 > files.sort()
553 > files.sort()
556 > for filename in files:
554 > for filename in files:
557 > if os.path.isdir(filename):
555 > if os.path.isdir(filename):
558 > continue
556 > continue
559 > content = open(filename).read()
557 > content = open(filename).read()
560 > print '%-6s %s' % (content.strip(), filename)
558 > print '%-6s %s' % (content.strip(), filename)
561 > EOF
559 > EOF
562
560
563 Generate appropriate repo state
561 Generate appropriate repo state
564 -------------------------------
562 -------------------------------
565
563
566 $ hg init revert-ref
564 $ hg init revert-ref
567 $ cd revert-ref
565 $ cd revert-ref
568
566
569 Generate base changeset
567 Generate base changeset
570
568
571 $ python ../gen-revert-cases.py base
569 $ python ../gen-revert-cases.py base
572 $ hg addremove --similarity 0
570 $ hg addremove --similarity 0
573 adding clean_clean
571 adding clean_clean
574 adding clean_deleted
572 adding clean_deleted
575 adding clean_removed
573 adding clean_removed
576 adding clean_untracked-clean
574 adding clean_untracked-clean
577 adding clean_untracked-wc
575 adding clean_untracked-wc
578 adding clean_wc
576 adding clean_wc
579 adding modified_clean
577 adding modified_clean
580 adding modified_deleted
578 adding modified_deleted
581 adding modified_removed
579 adding modified_removed
582 adding modified_revert
580 adding modified_revert
583 adding modified_untracked-clean
581 adding modified_untracked-clean
584 adding modified_untracked-revert
582 adding modified_untracked-revert
585 adding modified_untracked-wc
583 adding modified_untracked-wc
586 adding modified_wc
584 adding modified_wc
587 adding removed_clean
585 adding removed_clean
588 adding removed_deleted
589 adding removed_removed
590 adding removed_revert
586 adding removed_revert
591 adding removed_untracked-clean
587 adding removed_untracked-clean
592 adding removed_untracked-revert
588 adding removed_untracked-revert
593 adding removed_untracked-wc
589 adding removed_untracked-wc
594 adding removed_wc
590 adding removed_wc
595 $ hg status
591 $ hg status
596 A clean_clean
592 A clean_clean
597 A clean_deleted
593 A clean_deleted
598 A clean_removed
594 A clean_removed
599 A clean_untracked-clean
595 A clean_untracked-clean
600 A clean_untracked-wc
596 A clean_untracked-wc
601 A clean_wc
597 A clean_wc
602 A modified_clean
598 A modified_clean
603 A modified_deleted
599 A modified_deleted
604 A modified_removed
600 A modified_removed
605 A modified_revert
601 A modified_revert
606 A modified_untracked-clean
602 A modified_untracked-clean
607 A modified_untracked-revert
603 A modified_untracked-revert
608 A modified_untracked-wc
604 A modified_untracked-wc
609 A modified_wc
605 A modified_wc
610 A removed_clean
606 A removed_clean
611 A removed_deleted
612 A removed_removed
613 A removed_revert
607 A removed_revert
614 A removed_untracked-clean
608 A removed_untracked-clean
615 A removed_untracked-revert
609 A removed_untracked-revert
616 A removed_untracked-wc
610 A removed_untracked-wc
617 A removed_wc
611 A removed_wc
618 $ hg commit -m 'base'
612 $ hg commit -m 'base'
619
613
620 (create a simple text version of the content)
614 (create a simple text version of the content)
621
615
622 $ python ../dircontent.py > ../content-base.txt
616 $ python ../dircontent.py > ../content-base.txt
623 $ cat ../content-base.txt
617 $ cat ../content-base.txt
624 base clean_clean
618 base clean_clean
625 base clean_deleted
619 base clean_deleted
626 base clean_removed
620 base clean_removed
627 base clean_untracked-clean
621 base clean_untracked-clean
628 base clean_untracked-wc
622 base clean_untracked-wc
629 base clean_wc
623 base clean_wc
630 base modified_clean
624 base modified_clean
631 base modified_deleted
625 base modified_deleted
632 base modified_removed
626 base modified_removed
633 base modified_revert
627 base modified_revert
634 base modified_untracked-clean
628 base modified_untracked-clean
635 base modified_untracked-revert
629 base modified_untracked-revert
636 base modified_untracked-wc
630 base modified_untracked-wc
637 base modified_wc
631 base modified_wc
638 base removed_clean
632 base removed_clean
639 base removed_deleted
640 base removed_removed
641 base removed_revert
633 base removed_revert
642 base removed_untracked-clean
634 base removed_untracked-clean
643 base removed_untracked-revert
635 base removed_untracked-revert
644 base removed_untracked-wc
636 base removed_untracked-wc
645 base removed_wc
637 base removed_wc
646
638
647 Create parent changeset
639 Create parent changeset
648
640
649 $ python ../gen-revert-cases.py parent
641 $ python ../gen-revert-cases.py parent
650 $ hg addremove --similarity 0
642 $ hg addremove --similarity 0
651 adding added_clean
643 adding added_clean
652 adding added_deleted
644 adding added_deleted
653 adding added_removed
645 adding added_removed
654 adding added_untracked-clean
646 adding added_untracked-clean
655 adding added_untracked-wc
647 adding added_untracked-wc
656 adding added_wc
648 adding added_wc
657 removing removed_clean
649 removing removed_clean
658 removing removed_deleted
659 removing removed_removed
660 removing removed_revert
650 removing removed_revert
661 removing removed_untracked-clean
651 removing removed_untracked-clean
662 removing removed_untracked-revert
652 removing removed_untracked-revert
663 removing removed_untracked-wc
653 removing removed_untracked-wc
664 removing removed_wc
654 removing removed_wc
665 $ hg status
655 $ hg status
666 M modified_clean
656 M modified_clean
667 M modified_deleted
657 M modified_deleted
668 M modified_removed
658 M modified_removed
669 M modified_revert
659 M modified_revert
670 M modified_untracked-clean
660 M modified_untracked-clean
671 M modified_untracked-revert
661 M modified_untracked-revert
672 M modified_untracked-wc
662 M modified_untracked-wc
673 M modified_wc
663 M modified_wc
674 A added_clean
664 A added_clean
675 A added_deleted
665 A added_deleted
676 A added_removed
666 A added_removed
677 A added_untracked-clean
667 A added_untracked-clean
678 A added_untracked-wc
668 A added_untracked-wc
679 A added_wc
669 A added_wc
680 R removed_clean
670 R removed_clean
681 R removed_deleted
682 R removed_removed
683 R removed_revert
671 R removed_revert
684 R removed_untracked-clean
672 R removed_untracked-clean
685 R removed_untracked-revert
673 R removed_untracked-revert
686 R removed_untracked-wc
674 R removed_untracked-wc
687 R removed_wc
675 R removed_wc
688 $ hg commit -m 'parent'
676 $ hg commit -m 'parent'
689
677
690 (create a simple text version of the content)
678 (create a simple text version of the content)
691
679
692 $ python ../dircontent.py > ../content-parent.txt
680 $ python ../dircontent.py > ../content-parent.txt
693 $ cat ../content-parent.txt
681 $ cat ../content-parent.txt
694 parent added_clean
682 parent added_clean
695 parent added_deleted
683 parent added_deleted
696 parent added_removed
684 parent added_removed
697 parent added_untracked-clean
685 parent added_untracked-clean
698 parent added_untracked-wc
686 parent added_untracked-wc
699 parent added_wc
687 parent added_wc
700 base clean_clean
688 base clean_clean
701 base clean_deleted
689 base clean_deleted
702 base clean_removed
690 base clean_removed
703 base clean_untracked-clean
691 base clean_untracked-clean
704 base clean_untracked-wc
692 base clean_untracked-wc
705 base clean_wc
693 base clean_wc
706 parent modified_clean
694 parent modified_clean
707 parent modified_deleted
695 parent modified_deleted
708 parent modified_removed
696 parent modified_removed
709 parent modified_revert
697 parent modified_revert
710 parent modified_untracked-clean
698 parent modified_untracked-clean
711 parent modified_untracked-revert
699 parent modified_untracked-revert
712 parent modified_untracked-wc
700 parent modified_untracked-wc
713 parent modified_wc
701 parent modified_wc
714
702
715 Setup working directory
703 Setup working directory
716
704
717 $ python ../gen-revert-cases.py wc
705 $ python ../gen-revert-cases.py wc
718 $ hg addremove --similarity 0
706 $ hg addremove --similarity 0
719 removing added_removed
707 removing added_removed
720 removing clean_removed
708 removing clean_removed
721 adding missing_deleted
722 adding missing_untracked-wc
709 adding missing_untracked-wc
723 adding missing_wc
710 adding missing_wc
724 removing modified_removed
711 removing modified_removed
725 adding removed_deleted
726 adding removed_revert
712 adding removed_revert
727 adding removed_untracked-revert
713 adding removed_untracked-revert
728 adding removed_untracked-wc
714 adding removed_untracked-wc
729 adding removed_wc
715 adding removed_wc
730 $ hg forget *untracked*
716 $ hg forget *untracked*
731 $ rm *deleted*
717 $ rm *deleted*
732 $ hg status
718 $ hg status
733 M added_wc
719 M added_wc
734 M clean_wc
720 M clean_wc
735 M modified_revert
721 M modified_revert
736 M modified_wc
722 M modified_wc
737 A missing_wc
723 A missing_wc
738 A removed_revert
724 A removed_revert
739 A removed_wc
725 A removed_wc
740 R added_removed
726 R added_removed
741 R added_untracked-clean
727 R added_untracked-clean
742 R added_untracked-wc
728 R added_untracked-wc
743 R clean_removed
729 R clean_removed
744 R clean_untracked-clean
730 R clean_untracked-clean
745 R clean_untracked-wc
731 R clean_untracked-wc
746 R modified_removed
732 R modified_removed
747 R modified_untracked-clean
733 R modified_untracked-clean
748 R modified_untracked-revert
734 R modified_untracked-revert
749 R modified_untracked-wc
735 R modified_untracked-wc
750 ! added_deleted
736 ! added_deleted
751 ! clean_deleted
737 ! clean_deleted
752 ! missing_deleted
753 ! modified_deleted
738 ! modified_deleted
754 ! removed_deleted
755 ? missing_untracked-wc
739 ? missing_untracked-wc
756 ? removed_untracked-revert
740 ? removed_untracked-revert
757 ? removed_untracked-wc
741 ? removed_untracked-wc
758
742
759 $ hg status --rev 'desc("base")'
743 $ hg status --rev 'desc("base")'
760 M clean_wc
744 M clean_wc
761 M modified_clean
745 M modified_clean
762 M modified_wc
746 M modified_wc
763 M removed_wc
747 M removed_wc
764 A added_clean
748 A added_clean
765 A added_wc
749 A added_wc
766 A missing_wc
750 A missing_wc
767 R clean_removed
751 R clean_removed
768 R clean_untracked-clean
752 R clean_untracked-clean
769 R clean_untracked-wc
753 R clean_untracked-wc
770 R modified_removed
754 R modified_removed
771 R modified_untracked-clean
755 R modified_untracked-clean
772 R modified_untracked-revert
756 R modified_untracked-revert
773 R modified_untracked-wc
757 R modified_untracked-wc
774 R removed_clean
758 R removed_clean
775 R removed_deleted
776 R removed_removed
777 R removed_untracked-clean
759 R removed_untracked-clean
778 R removed_untracked-revert
760 R removed_untracked-revert
779 R removed_untracked-wc
761 R removed_untracked-wc
780 ! added_deleted
762 ! added_deleted
781 ! clean_deleted
763 ! clean_deleted
782 ! missing_deleted
783 ! modified_deleted
764 ! modified_deleted
784 ! removed_deleted
785 ? missing_untracked-wc
765 ? missing_untracked-wc
786
766
787 (create a simple text version of the content)
767 (create a simple text version of the content)
788
768
789 $ python ../dircontent.py > ../content-wc.txt
769 $ python ../dircontent.py > ../content-wc.txt
790 $ cat ../content-wc.txt
770 $ cat ../content-wc.txt
791 parent added_clean
771 parent added_clean
792 parent added_untracked-clean
772 parent added_untracked-clean
793 wc added_untracked-wc
773 wc added_untracked-wc
794 wc added_wc
774 wc added_wc
795 base clean_clean
775 base clean_clean
796 base clean_untracked-clean
776 base clean_untracked-clean
797 wc clean_untracked-wc
777 wc clean_untracked-wc
798 wc clean_wc
778 wc clean_wc
799 wc missing_untracked-wc
779 wc missing_untracked-wc
800 wc missing_wc
780 wc missing_wc
801 parent modified_clean
781 parent modified_clean
802 base modified_revert
782 base modified_revert
803 parent modified_untracked-clean
783 parent modified_untracked-clean
804 base modified_untracked-revert
784 base modified_untracked-revert
805 wc modified_untracked-wc
785 wc modified_untracked-wc
806 wc modified_wc
786 wc modified_wc
807 base removed_revert
787 base removed_revert
808 base removed_untracked-revert
788 base removed_untracked-revert
809 wc removed_untracked-wc
789 wc removed_untracked-wc
810 wc removed_wc
790 wc removed_wc
811
791
812 $ cd ..
792 $ cd ..
813
793
814 Test revert --all to parent content
794 Test revert --all to parent content
815 -----------------------------------
795 -----------------------------------
816
796
817 (setup from reference repo)
797 (setup from reference repo)
818
798
819 $ cp -r revert-ref revert-parent-all
799 $ cp -r revert-ref revert-parent-all
820 $ cd revert-parent-all
800 $ cd revert-parent-all
821
801
822 check revert output
802 check revert output
823
803
824 $ hg revert --all
804 $ hg revert --all
825 reverting added_deleted
805 reverting added_deleted
826 undeleting added_removed
806 undeleting added_removed
827 undeleting added_untracked-clean
807 undeleting added_untracked-clean
828 undeleting added_untracked-wc
808 undeleting added_untracked-wc
829 reverting added_wc
809 reverting added_wc
830 reverting clean_deleted
810 reverting clean_deleted
831 undeleting clean_removed
811 undeleting clean_removed
832 undeleting clean_untracked-clean
812 undeleting clean_untracked-clean
833 undeleting clean_untracked-wc
813 undeleting clean_untracked-wc
834 reverting clean_wc
814 reverting clean_wc
835 forgetting missing_deleted
836 forgetting missing_wc
815 forgetting missing_wc
837 reverting modified_deleted
816 reverting modified_deleted
838 undeleting modified_removed
817 undeleting modified_removed
839 reverting modified_revert
818 reverting modified_revert
840 undeleting modified_untracked-clean
819 undeleting modified_untracked-clean
841 undeleting modified_untracked-revert
820 undeleting modified_untracked-revert
842 undeleting modified_untracked-wc
821 undeleting modified_untracked-wc
843 reverting modified_wc
822 reverting modified_wc
844 forgetting removed_deleted
845 forgetting removed_revert
823 forgetting removed_revert
846 forgetting removed_wc
824 forgetting removed_wc
847
825
848 Compare resulting directory with revert target.
826 Compare resulting directory with revert target.
849
827
850 The diff is filtered to include change only. The only difference should be
828 The diff is filtered to include change only. The only difference should be
851 additional `.orig` backup file when applicable.
829 additional `.orig` backup file when applicable.
852
830
853 $ python ../dircontent.py > ../content-parent-all.txt
831 $ python ../dircontent.py > ../content-parent-all.txt
854 $ cd ..
832 $ cd ..
855 $ diff -U 0 -- content-parent.txt content-parent-all.txt | grep _
833 $ diff -U 0 -- content-parent.txt content-parent-all.txt | grep _
856 +wc added_untracked-wc.orig
834 +wc added_untracked-wc.orig
857 +wc added_wc.orig
835 +wc added_wc.orig
858 +wc clean_untracked-wc.orig
836 +wc clean_untracked-wc.orig
859 +wc clean_wc.orig
837 +wc clean_wc.orig
860 +wc missing_untracked-wc
838 +wc missing_untracked-wc
861 +wc missing_wc
839 +wc missing_wc
862 +base modified_revert.orig
840 +base modified_revert.orig
863 +base modified_untracked-revert.orig
841 +base modified_untracked-revert.orig
864 +wc modified_untracked-wc.orig
842 +wc modified_untracked-wc.orig
865 +wc modified_wc.orig
843 +wc modified_wc.orig
866 +base removed_revert
844 +base removed_revert
867 +base removed_untracked-revert
845 +base removed_untracked-revert
868 +wc removed_untracked-wc
846 +wc removed_untracked-wc
869 +wc removed_wc
847 +wc removed_wc
870
848
871 Test revert --all to "base" content
849 Test revert --all to "base" content
872 -----------------------------------
850 -----------------------------------
873
851
874 (setup from reference repo)
852 (setup from reference repo)
875
853
876 $ cp -r revert-ref revert-base-all
854 $ cp -r revert-ref revert-base-all
877 $ cd revert-base-all
855 $ cd revert-base-all
878
856
879 check revert output
857 check revert output
880
858
881 $ hg revert --all --rev 'desc(base)'
859 $ hg revert --all --rev 'desc(base)'
882 removing added_clean
860 removing added_clean
883 removing added_deleted
861 removing added_deleted
884 removing added_wc
862 removing added_wc
885 reverting clean_deleted
863 reverting clean_deleted
886 undeleting clean_removed
864 undeleting clean_removed
887 undeleting clean_untracked-clean
865 undeleting clean_untracked-clean
888 undeleting clean_untracked-wc
866 undeleting clean_untracked-wc
889 reverting clean_wc
867 reverting clean_wc
890 forgetting missing_deleted
891 forgetting missing_wc
868 forgetting missing_wc
892 reverting modified_clean
869 reverting modified_clean
893 reverting modified_deleted
870 reverting modified_deleted
894 undeleting modified_removed
871 undeleting modified_removed
895 undeleting modified_untracked-clean
872 undeleting modified_untracked-clean
896 undeleting modified_untracked-revert
873 undeleting modified_untracked-revert
897 undeleting modified_untracked-wc
874 undeleting modified_untracked-wc
898 reverting modified_wc
875 reverting modified_wc
899 adding removed_clean
876 adding removed_clean
900 reverting removed_deleted
901 adding removed_removed
902 adding removed_untracked-clean
877 adding removed_untracked-clean
903 adding removed_untracked-revert
878 adding removed_untracked-revert
904 adding removed_untracked-wc
879 adding removed_untracked-wc
905 reverting removed_wc
880 reverting removed_wc
906
881
907 Compare resulting directory with revert target.
882 Compare resulting directory with revert target.
908
883
909 The diff is filtered to include change only. The only difference should be
884 The diff is filtered to include change only. The only difference should be
910 additional `.orig` backup file when applicable.
885 additional `.orig` backup file when applicable.
911
886
912 $ python ../dircontent.py > ../content-base-all.txt
887 $ python ../dircontent.py > ../content-base-all.txt
913 $ cd ..
888 $ cd ..
914 $ diff -U 0 -- content-base.txt content-base-all.txt | grep _
889 $ diff -U 0 -- content-base.txt content-base-all.txt | grep _
915 +parent added_untracked-clean
890 +parent added_untracked-clean
916 +wc added_untracked-wc
891 +wc added_untracked-wc
917 +wc added_wc.orig
892 +wc added_wc.orig
918 +wc clean_untracked-wc.orig
893 +wc clean_untracked-wc.orig
919 +wc clean_wc.orig
894 +wc clean_wc.orig
920 +wc missing_untracked-wc
895 +wc missing_untracked-wc
921 +wc missing_wc
896 +wc missing_wc
922 +parent modified_untracked-clean.orig
897 +parent modified_untracked-clean.orig
923 +wc modified_untracked-wc.orig
898 +wc modified_untracked-wc.orig
924 +wc modified_wc.orig
899 +wc modified_wc.orig
925 +wc removed_untracked-wc.orig
900 +wc removed_untracked-wc.orig
926 +wc removed_wc.orig
901 +wc removed_wc.orig
927
902
928 Test revert to parent content with explicit file name
903 Test revert to parent content with explicit file name
929 -----------------------------------------------------
904 -----------------------------------------------------
930
905
931 (setup from reference repo)
906 (setup from reference repo)
932
907
933 $ cp -r revert-ref revert-parent-explicit
908 $ cp -r revert-ref revert-parent-explicit
934 $ cd revert-parent-explicit
909 $ cd revert-parent-explicit
935
910
936 revert all files individually and check the output
911 revert all files individually and check the output
937 (output is expected to be different than in the --all case)
912 (output is expected to be different than in the --all case)
938
913
939 $ for file in `python ../gen-revert-cases.py filelist`; do
914 $ for file in `python ../gen-revert-cases.py filelist`; do
940 > echo '### revert for:' $file;
915 > echo '### revert for:' $file;
941 > hg revert $file;
916 > hg revert $file;
942 > echo
917 > echo
943 > done
918 > done
944 ### revert for: added_clean
919 ### revert for: added_clean
945 no changes needed to added_clean
920 no changes needed to added_clean
946
921
947 ### revert for: added_deleted
922 ### revert for: added_deleted
948
923
949 ### revert for: added_removed
924 ### revert for: added_removed
950
925
951 ### revert for: added_untracked-clean
926 ### revert for: added_untracked-clean
952
927
953 ### revert for: added_untracked-wc
928 ### revert for: added_untracked-wc
954
929
955 ### revert for: added_wc
930 ### revert for: added_wc
956
931
957 ### revert for: clean_clean
932 ### revert for: clean_clean
958 no changes needed to clean_clean
933 no changes needed to clean_clean
959
934
960 ### revert for: clean_deleted
935 ### revert for: clean_deleted
961
936
962 ### revert for: clean_removed
937 ### revert for: clean_removed
963
938
964 ### revert for: clean_untracked-clean
939 ### revert for: clean_untracked-clean
965
940
966 ### revert for: clean_untracked-wc
941 ### revert for: clean_untracked-wc
967
942
968 ### revert for: clean_wc
943 ### revert for: clean_wc
969
944
970 ### revert for: missing_clean
945 ### revert for: missing_clean
971 missing_clean: no such file in rev * (glob)
946 missing_clean: no such file in rev * (glob)
972
947
973 ### revert for: missing_deleted
974
975 ### revert for: missing_removed
976 missing_removed: no such file in rev * (glob)
977
978 ### revert for: missing_untracked-clean
948 ### revert for: missing_untracked-clean
979 missing_untracked-clean: no such file in rev * (glob)
949 missing_untracked-clean: no such file in rev * (glob)
980
950
981 ### revert for: missing_untracked-wc
951 ### revert for: missing_untracked-wc
982 file not managed: missing_untracked-wc
952 file not managed: missing_untracked-wc
983
953
984 ### revert for: missing_wc
954 ### revert for: missing_wc
985
955
986 ### revert for: modified_clean
956 ### revert for: modified_clean
987 no changes needed to modified_clean
957 no changes needed to modified_clean
988
958
989 ### revert for: modified_deleted
959 ### revert for: modified_deleted
990
960
991 ### revert for: modified_removed
961 ### revert for: modified_removed
992
962
993 ### revert for: modified_revert
963 ### revert for: modified_revert
994
964
995 ### revert for: modified_untracked-clean
965 ### revert for: modified_untracked-clean
996
966
997 ### revert for: modified_untracked-revert
967 ### revert for: modified_untracked-revert
998
968
999 ### revert for: modified_untracked-wc
969 ### revert for: modified_untracked-wc
1000
970
1001 ### revert for: modified_wc
971 ### revert for: modified_wc
1002
972
1003 ### revert for: removed_clean
973 ### revert for: removed_clean
1004 removed_clean: no such file in rev * (glob)
974 removed_clean: no such file in rev * (glob)
1005
975
1006 ### revert for: removed_deleted
1007
1008 ### revert for: removed_removed
1009 removed_removed: no such file in rev * (glob)
1010
1011 ### revert for: removed_revert
976 ### revert for: removed_revert
1012
977
1013 ### revert for: removed_untracked-clean
978 ### revert for: removed_untracked-clean
1014 removed_untracked-clean: no such file in rev * (glob)
979 removed_untracked-clean: no such file in rev * (glob)
1015
980
1016 ### revert for: removed_untracked-revert
981 ### revert for: removed_untracked-revert
1017 file not managed: removed_untracked-revert
982 file not managed: removed_untracked-revert
1018
983
1019 ### revert for: removed_untracked-wc
984 ### revert for: removed_untracked-wc
1020 file not managed: removed_untracked-wc
985 file not managed: removed_untracked-wc
1021
986
1022 ### revert for: removed_wc
987 ### revert for: removed_wc
1023
988
1024
989
1025 check resulting directory against the --all run
990 check resulting directory against the --all run
1026 (There should be no difference)
991 (There should be no difference)
1027
992
1028 $ python ../dircontent.py > ../content-parent-explicit.txt
993 $ python ../dircontent.py > ../content-parent-explicit.txt
1029 $ cd ..
994 $ cd ..
1030 $ diff -U 0 -- content-parent-all.txt content-parent-explicit.txt | grep _
995 $ diff -U 0 -- content-parent-all.txt content-parent-explicit.txt | grep _
1031 [1]
996 [1]
1032
997
1033 Test revert to "base" content with explicit file name
998 Test revert to "base" content with explicit file name
1034 -----------------------------------------------------
999 -----------------------------------------------------
1035
1000
1036 (setup from reference repo)
1001 (setup from reference repo)
1037
1002
1038 $ cp -r revert-ref revert-base-explicit
1003 $ cp -r revert-ref revert-base-explicit
1039 $ cd revert-base-explicit
1004 $ cd revert-base-explicit
1040
1005
1041 revert all files individually and check the output
1006 revert all files individually and check the output
1042 (output is expected to be different than in the --all case)
1007 (output is expected to be different than in the --all case)
1043
1008
1044 $ for file in `python ../gen-revert-cases.py filelist`; do
1009 $ for file in `python ../gen-revert-cases.py filelist`; do
1045 > echo '### revert for:' $file;
1010 > echo '### revert for:' $file;
1046 > hg revert $file --rev 'desc(base)';
1011 > hg revert $file --rev 'desc(base)';
1047 > echo
1012 > echo
1048 > done
1013 > done
1049 ### revert for: added_clean
1014 ### revert for: added_clean
1050
1015
1051 ### revert for: added_deleted
1016 ### revert for: added_deleted
1052
1017
1053 ### revert for: added_removed
1018 ### revert for: added_removed
1054 no changes needed to added_removed
1019 no changes needed to added_removed
1055
1020
1056 ### revert for: added_untracked-clean
1021 ### revert for: added_untracked-clean
1057 no changes needed to added_untracked-clean
1022 no changes needed to added_untracked-clean
1058
1023
1059 ### revert for: added_untracked-wc
1024 ### revert for: added_untracked-wc
1060 no changes needed to added_untracked-wc
1025 no changes needed to added_untracked-wc
1061
1026
1062 ### revert for: added_wc
1027 ### revert for: added_wc
1063
1028
1064 ### revert for: clean_clean
1029 ### revert for: clean_clean
1065 no changes needed to clean_clean
1030 no changes needed to clean_clean
1066
1031
1067 ### revert for: clean_deleted
1032 ### revert for: clean_deleted
1068
1033
1069 ### revert for: clean_removed
1034 ### revert for: clean_removed
1070
1035
1071 ### revert for: clean_untracked-clean
1036 ### revert for: clean_untracked-clean
1072
1037
1073 ### revert for: clean_untracked-wc
1038 ### revert for: clean_untracked-wc
1074
1039
1075 ### revert for: clean_wc
1040 ### revert for: clean_wc
1076
1041
1077 ### revert for: missing_clean
1042 ### revert for: missing_clean
1078 missing_clean: no such file in rev * (glob)
1043 missing_clean: no such file in rev * (glob)
1079
1044
1080 ### revert for: missing_deleted
1081
1082 ### revert for: missing_removed
1083 missing_removed: no such file in rev * (glob)
1084
1085 ### revert for: missing_untracked-clean
1045 ### revert for: missing_untracked-clean
1086 missing_untracked-clean: no such file in rev * (glob)
1046 missing_untracked-clean: no such file in rev * (glob)
1087
1047
1088 ### revert for: missing_untracked-wc
1048 ### revert for: missing_untracked-wc
1089 file not managed: missing_untracked-wc
1049 file not managed: missing_untracked-wc
1090
1050
1091 ### revert for: missing_wc
1051 ### revert for: missing_wc
1092
1052
1093 ### revert for: modified_clean
1053 ### revert for: modified_clean
1094
1054
1095 ### revert for: modified_deleted
1055 ### revert for: modified_deleted
1096
1056
1097 ### revert for: modified_removed
1057 ### revert for: modified_removed
1098
1058
1099 ### revert for: modified_revert
1059 ### revert for: modified_revert
1100 no changes needed to modified_revert
1060 no changes needed to modified_revert
1101
1061
1102 ### revert for: modified_untracked-clean
1062 ### revert for: modified_untracked-clean
1103
1063
1104 ### revert for: modified_untracked-revert
1064 ### revert for: modified_untracked-revert
1105
1065
1106 ### revert for: modified_untracked-wc
1066 ### revert for: modified_untracked-wc
1107
1067
1108 ### revert for: modified_wc
1068 ### revert for: modified_wc
1109
1069
1110 ### revert for: removed_clean
1070 ### revert for: removed_clean
1111
1071
1112 ### revert for: removed_deleted
1113
1114 ### revert for: removed_removed
1115
1116 ### revert for: removed_revert
1072 ### revert for: removed_revert
1117 no changes needed to removed_revert
1073 no changes needed to removed_revert
1118
1074
1119 ### revert for: removed_untracked-clean
1075 ### revert for: removed_untracked-clean
1120
1076
1121 ### revert for: removed_untracked-revert
1077 ### revert for: removed_untracked-revert
1122
1078
1123 ### revert for: removed_untracked-wc
1079 ### revert for: removed_untracked-wc
1124
1080
1125 ### revert for: removed_wc
1081 ### revert for: removed_wc
1126
1082
1127
1083
1128 check resulting directory against the --all run
1084 check resulting directory against the --all run
1129 (There should be no difference)
1085 (There should be no difference)
1130
1086
1131 $ python ../dircontent.py > ../content-base-explicit.txt
1087 $ python ../dircontent.py > ../content-base-explicit.txt
1132 $ cd ..
1088 $ cd ..
1133 $ diff -U 0 -- content-base-all.txt content-base-explicit.txt | grep _
1089 $ diff -U 0 -- content-base-all.txt content-base-explicit.txt | grep _
1134 [1]
1090 [1]
General Comments 0
You need to be logged in to leave comments. Login now