~ubuntu-branches/ubuntu/wily/mercurial/wily

« back to all changes in this revision

Viewing changes to tests/test-shelve.t

  • Committer: Package Import Robot
  • Author(s): Javi Merino
  • Date: 2013-11-01 23:19:57 UTC
  • mfrom: (1.2.38) (9.1.16 experimental)
  • Revision ID: package-import@ubuntu.com-20131101231957-hs70pwpinavlz3t6
Tags: 2.8-1
* New upstream release
* Fix mercurial-git and hgsubversion autopkgtest by loading the
  appropriate extension
* Bump standards-version to 3.9.5 (no change needed)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
  $ echo "[extensions]" >> $HGRCPATH
 
2
  $ echo "mq=" >> $HGRCPATH
 
3
  $ echo "shelve=" >> $HGRCPATH
 
4
  $ echo "[defaults]" >> $HGRCPATH
 
5
  $ echo "diff = --nodates --git" >> $HGRCPATH
 
6
  $ echo "qnew = --date '0 0'" >> $HGRCPATH
 
7
 
 
8
  $ hg init repo
 
9
  $ cd repo
 
10
  $ mkdir a b
 
11
  $ echo a > a/a
 
12
  $ echo b > b/b
 
13
  $ echo c > c
 
14
  $ echo d > d
 
15
  $ echo x > x
 
16
  $ hg addremove -q
 
17
 
 
18
shelving in an empty repo should be possible
 
19
 
 
20
  $ hg shelve
 
21
  shelved as default
 
22
  0 files updated, 0 files merged, 5 files removed, 0 files unresolved
 
23
 
 
24
  $ hg unshelve
 
25
  unshelving change 'default'
 
26
  adding changesets
 
27
  adding manifests
 
28
  adding file changes
 
29
  added 1 changesets with 5 changes to 5 files
 
30
 
 
31
  $ hg commit -q -m 'initial commit'
 
32
 
 
33
  $ hg shelve
 
34
  nothing changed
 
35
  [1]
 
36
 
 
37
create an mq patch - shelving should work fine with a patch applied
 
38
 
 
39
  $ echo n > n
 
40
  $ hg add n
 
41
  $ hg commit n -m second
 
42
  $ hg qnew second.patch
 
43
 
 
44
shelve a change that we will delete later
 
45
 
 
46
  $ echo a >> a/a
 
47
  $ hg shelve
 
48
  shelved as default
 
49
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
50
 
 
51
set up some more complex changes to shelve
 
52
 
 
53
  $ echo a >> a/a
 
54
  $ hg mv b b.rename
 
55
  moving b/b to b.rename/b (glob)
 
56
  $ hg cp c c.copy
 
57
  $ hg status -C
 
58
  M a/a
 
59
  A b.rename/b
 
60
    b/b
 
61
  A c.copy
 
62
    c
 
63
  R b/b
 
64
 
 
65
prevent some foot-shooting
 
66
 
 
67
  $ hg shelve -n foo/bar
 
68
  abort: shelved change names may not contain slashes
 
69
  [255]
 
70
  $ hg shelve -n .baz
 
71
  abort: shelved change names may not start with '.'
 
72
  [255]
 
73
 
 
74
the common case - no options or filenames
 
75
 
 
76
  $ hg shelve
 
77
  shelved as default-01
 
78
  2 files updated, 0 files merged, 2 files removed, 0 files unresolved
 
79
  $ hg status -C
 
80
 
 
81
ensure that our shelved changes exist
 
82
 
 
83
  $ hg shelve -l
 
84
  default-01      (*)    [mq]: second.patch (glob)
 
85
  default         (*)    [mq]: second.patch (glob)
 
86
 
 
87
  $ hg shelve -l -p default
 
88
  default         (*)    [mq]: second.patch (glob)
 
89
  
 
90
  diff --git a/a/a b/a/a
 
91
  --- a/a/a
 
92
  +++ b/a/a
 
93
  @@ -1,1 +1,2 @@
 
94
   a
 
95
  +a
 
96
 
 
97
delete our older shelved change
 
98
 
 
99
  $ hg shelve -d default
 
100
  $ hg qfinish -a -q
 
101
 
 
102
local edits should not prevent a shelved change from applying
 
103
 
 
104
  $ printf "z\na\n" > a/a
 
105
  $ hg unshelve --keep
 
106
  unshelving change 'default-01'
 
107
  adding changesets
 
108
  adding manifests
 
109
  adding file changes
 
110
  added 1 changesets with 3 changes to 8 files (+1 heads)
 
111
  merging a/a
 
112
 
 
113
  $ hg revert --all -q
 
114
  $ rm a/a.orig b.rename/b c.copy
 
115
 
 
116
apply it and make sure our state is as expected
 
117
 
 
118
  $ hg unshelve
 
119
  unshelving change 'default-01'
 
120
  adding changesets
 
121
  adding manifests
 
122
  adding file changes
 
123
  added 1 changesets with 3 changes to 8 files
 
124
  $ hg status -C
 
125
  M a/a
 
126
  A b.rename/b
 
127
    b/b
 
128
  A c.copy
 
129
    c
 
130
  R b/b
 
131
  $ hg shelve -l
 
132
 
 
133
  $ hg unshelve
 
134
  abort: no shelved changes to apply!
 
135
  [255]
 
136
  $ hg unshelve foo
 
137
  abort: shelved change 'foo' not found
 
138
  [255]
 
139
 
 
140
named shelves, specific filenames, and "commit messages" should all work
 
141
 
 
142
  $ hg status -C
 
143
  M a/a
 
144
  A b.rename/b
 
145
    b/b
 
146
  A c.copy
 
147
    c
 
148
  R b/b
 
149
  $ hg shelve -q -n wibble -m wat a
 
150
 
 
151
expect "a" to no longer be present, but status otherwise unchanged
 
152
 
 
153
  $ hg status -C
 
154
  A b.rename/b
 
155
    b/b
 
156
  A c.copy
 
157
    c
 
158
  R b/b
 
159
  $ hg shelve -l --stat
 
160
  wibble          (*)    wat (glob)
 
161
   a/a |  1 +
 
162
   1 files changed, 1 insertions(+), 0 deletions(-)
 
163
 
 
164
and now "a/a" should reappear
 
165
 
 
166
  $ cd a
 
167
  $ hg unshelve -q wibble
 
168
  $ cd ..
 
169
  $ hg status -C
 
170
  M a/a
 
171
  A b.rename/b
 
172
    b/b
 
173
  A c.copy
 
174
    c
 
175
  R b/b
 
176
 
 
177
cause unshelving to result in a merge with 'a' conflicting
 
178
 
 
179
  $ hg shelve -q
 
180
  $ echo c>>a/a
 
181
  $ hg commit -m second
 
182
  $ hg tip --template '{files}\n'
 
183
  a/a
 
184
 
 
185
add an unrelated change that should be preserved
 
186
 
 
187
  $ mkdir foo
 
188
  $ echo foo > foo/foo
 
189
  $ hg add foo/foo
 
190
 
 
191
force a conflicted merge to occur
 
192
 
 
193
  $ hg unshelve
 
194
  unshelving change 'default'
 
195
  adding changesets
 
196
  adding manifests
 
197
  adding file changes
 
198
  added 1 changesets with 3 changes to 8 files (+1 heads)
 
199
  merging a/a
 
200
  warning: conflicts during merge.
 
201
  merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark')
 
202
  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
 
203
  [1]
 
204
 
 
205
ensure that we have a merge with unresolved conflicts
 
206
 
 
207
  $ hg heads -q --template '{rev}\n'
 
208
  5
 
209
  4
 
210
  $ hg parents -q --template '{rev}\n'
 
211
  4
 
212
  5
 
213
  $ hg status
 
214
  M a/a
 
215
  M b.rename/b
 
216
  M c.copy
 
217
  R b/b
 
218
  ? a/a.orig
 
219
  $ hg diff
 
220
  diff --git a/a/a b/a/a
 
221
  --- a/a/a
 
222
  +++ b/a/a
 
223
  @@ -1,2 +1,6 @@
 
224
   a
 
225
  +<<<<<<< local
 
226
   c
 
227
  +=======
 
228
  +a
 
229
  +>>>>>>> other
 
230
  diff --git a/b.rename/b b/b.rename/b
 
231
  new file mode 100644
 
232
  --- /dev/null
 
233
  +++ b/b.rename/b
 
234
  @@ -0,0 +1,1 @@
 
235
  +b
 
236
  diff --git a/b/b b/b/b
 
237
  deleted file mode 100644
 
238
  --- a/b/b
 
239
  +++ /dev/null
 
240
  @@ -1,1 +0,0 @@
 
241
  -b
 
242
  diff --git a/c.copy b/c.copy
 
243
  new file mode 100644
 
244
  --- /dev/null
 
245
  +++ b/c.copy
 
246
  @@ -0,0 +1,1 @@
 
247
  +c
 
248
  $ hg resolve -l
 
249
  U a/a
 
250
 
 
251
  $ hg shelve
 
252
  abort: unshelve already in progress
 
253
  (use 'hg unshelve --continue' or 'hg unshelve --abort')
 
254
  [255]
 
255
 
 
256
abort the unshelve and be happy
 
257
 
 
258
  $ hg status
 
259
  M a/a
 
260
  M b.rename/b
 
261
  M c.copy
 
262
  R b/b
 
263
  ? a/a.orig
 
264
  $ hg unshelve -a
 
265
  rebase aborted
 
266
  unshelve of 'default' aborted
 
267
  $ hg heads -q
 
268
  3:2e69b451d1ea
 
269
  $ hg parents
 
270
  changeset:   3:2e69b451d1ea
 
271
  tag:         tip
 
272
  user:        test
 
273
  date:        Thu Jan 01 00:00:00 1970 +0000
 
274
  summary:     second
 
275
  
 
276
  $ hg resolve -l
 
277
  $ hg status
 
278
  A foo/foo
 
279
  ? a/a.orig
 
280
 
 
281
try to continue with no unshelve underway
 
282
 
 
283
  $ hg unshelve -c
 
284
  abort: no unshelve operation underway
 
285
  [255]
 
286
  $ hg status
 
287
  A foo/foo
 
288
  ? a/a.orig
 
289
 
 
290
redo the unshelve to get a conflict
 
291
 
 
292
  $ hg unshelve -q
 
293
  warning: conflicts during merge.
 
294
  merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark')
 
295
  unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
 
296
  [1]
 
297
 
 
298
attempt to continue
 
299
 
 
300
  $ hg unshelve -c
 
301
  abort: unresolved conflicts, can't continue
 
302
  (see 'hg resolve', then 'hg unshelve --continue')
 
303
  [255]
 
304
 
 
305
  $ hg revert -r . a/a
 
306
  $ hg resolve -m a/a
 
307
 
 
308
  $ hg commit -m 'commit while unshelve in progress'
 
309
  abort: unshelve already in progress
 
310
  (use 'hg unshelve --continue' or 'hg unshelve --abort')
 
311
  [255]
 
312
 
 
313
  $ hg unshelve -c
 
314
  unshelve of 'default' complete
 
315
 
 
316
ensure the repo is as we hope
 
317
 
 
318
  $ hg parents
 
319
  changeset:   3:2e69b451d1ea
 
320
  tag:         tip
 
321
  user:        test
 
322
  date:        Thu Jan 01 00:00:00 1970 +0000
 
323
  summary:     second
 
324
  
 
325
  $ hg heads -q
 
326
  3:2e69b451d1ea
 
327
 
 
328
  $ hg status -C
 
329
  A b.rename/b
 
330
    b/b
 
331
  A c.copy
 
332
    c
 
333
  A foo/foo
 
334
  R b/b
 
335
  ? a/a.orig
 
336
 
 
337
there should be no shelves left
 
338
 
 
339
  $ hg shelve -l
 
340
 
 
341
#if execbit
 
342
 
 
343
ensure that metadata-only changes are shelved
 
344
 
 
345
  $ chmod +x a/a
 
346
  $ hg shelve -q -n execbit a/a
 
347
  $ hg status a/a
 
348
  $ hg unshelve -q execbit
 
349
  $ hg status a/a
 
350
  M a/a
 
351
  $ hg revert a/a
 
352
 
 
353
#endif
 
354
 
 
355
#if symlink
 
356
 
 
357
  $ rm a/a
 
358
  $ ln -s foo a/a
 
359
  $ hg shelve -q -n symlink a/a
 
360
  $ hg status a/a
 
361
  $ hg unshelve -q symlink
 
362
  $ hg status a/a
 
363
  M a/a
 
364
  $ hg revert a/a
 
365
 
 
366
#endif
 
367
 
 
368
set up another conflict between a commit and a shelved change
 
369
 
 
370
  $ hg revert -q -C -a
 
371
  $ rm a/a.orig b.rename/b c.copy
 
372
  $ echo a >> a/a
 
373
  $ hg shelve -q
 
374
  $ echo x >> a/a
 
375
  $ hg ci -m 'create conflict'
 
376
  $ hg add foo/foo
 
377
 
 
378
if we resolve a conflict while unshelving, the unshelve should succeed
 
379
 
 
380
  $ HGMERGE=true hg unshelve
 
381
  unshelving change 'default'
 
382
  adding changesets
 
383
  adding manifests
 
384
  adding file changes
 
385
  added 1 changesets with 1 changes to 6 files (+1 heads)
 
386
  merging a/a
 
387
  $ hg parents -q
 
388
  4:33f7f61e6c5e
 
389
  $ hg shelve -l
 
390
  $ hg status
 
391
  A foo/foo
 
392
  $ cat a/a
 
393
  a
 
394
  c
 
395
  x
 
396
 
 
397
test keep and cleanup
 
398
 
 
399
  $ hg shelve
 
400
  shelved as default
 
401
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
402
  $ hg shelve --list
 
403
  default         (*)    create conflict (glob)
 
404
  $ hg unshelve --keep
 
405
  unshelving change 'default'
 
406
  adding changesets
 
407
  adding manifests
 
408
  adding file changes
 
409
  added 1 changesets with 1 changes to 7 files
 
410
  $ hg shelve --list
 
411
  default         (*)    create conflict (glob)
 
412
  $ hg shelve --cleanup
 
413
  $ hg shelve --list
 
414
 
 
415
test bookmarks
 
416
 
 
417
  $ hg bookmark test
 
418
  $ hg bookmark
 
419
   * test                      4:33f7f61e6c5e
 
420
  $ hg shelve
 
421
  shelved as test
 
422
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
423
  $ hg bookmark
 
424
   * test                      4:33f7f61e6c5e
 
425
  $ hg unshelve
 
426
  unshelving change 'test'
 
427
  adding changesets
 
428
  adding manifests
 
429
  adding file changes
 
430
  added 1 changesets with 1 changes to 7 files
 
431
  $ hg bookmark
 
432
   * test                      4:33f7f61e6c5e
 
433
 
 
434
shelve should still work even if mq is disabled
 
435
 
 
436
  $ hg --config extensions.mq=! shelve
 
437
  shelved as test
 
438
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
439
  $ hg --config extensions.mq=! shelve --list
 
440
  test            (1s ago)    create conflict
 
441
  $ hg --config extensions.mq=! unshelve
 
442
  unshelving change 'test'
 
443
  adding changesets
 
444
  adding manifests
 
445
  adding file changes
 
446
  added 1 changesets with 1 changes to 7 files
 
447
 
 
448
shelve should leave dirstate clean (issue 4055)
 
449
 
 
450
  $ cd ..
 
451
  $ hg init shelverebase
 
452
  $ cd shelverebase
 
453
  $ printf 'x\ny\n' > x
 
454
  $ echo z > z
 
455
  $ hg commit -Aqm xy
 
456
  $ echo z >> x
 
457
  $ hg commit -Aqm z
 
458
  $ hg up 0
 
459
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
460
  $ printf 'a\nx\ny\nz\n' > x
 
461
  $ hg commit -Aqm xyz
 
462
  $ echo c >> z
 
463
  $ hg shelve
 
464
  shelved as default
 
465
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
466
  $ hg rebase -d 1 --config extensions.rebase=
 
467
  merging x
 
468
  saved backup bundle to $TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-backup.hg (glob)
 
469
  $ hg unshelve
 
470
  unshelving change 'default'
 
471
  adding changesets
 
472
  adding manifests
 
473
  adding file changes
 
474
  added 2 changesets with 2 changes to 2 files (+1 heads)
 
475
  $ hg status
 
476
  M z
 
477
 
 
478
  $ cd ..
 
479
 
 
480
shelve should only unshelve pending changes (issue 4068)
 
481
 
 
482
  $ hg init onlypendingchanges
 
483
  $ cd onlypendingchanges
 
484
  $ touch a
 
485
  $ hg ci -Aqm a
 
486
  $ touch b
 
487
  $ hg ci -Aqm b
 
488
  $ hg up -q 0
 
489
  $ touch c
 
490
  $ hg ci -Aqm c
 
491
 
 
492
  $ touch d
 
493
  $ hg add d
 
494
  $ hg shelve
 
495
  shelved as default
 
496
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
497
  $ hg up -q 1
 
498
  $ hg unshelve
 
499
  unshelving change 'default'
 
500
  adding changesets
 
501
  adding manifests
 
502
  adding file changes
 
503
  added 1 changesets with 1 changes to 3 files
 
504
  $ hg status
 
505
  A d
 
506
 
 
507
unshelve should work on an ancestor of the original commit
 
508
 
 
509
  $ hg shelve
 
510
  shelved as default
 
511
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
512
  $ hg up 0
 
513
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 
514
  $ hg unshelve
 
515
  unshelving change 'default'
 
516
  adding changesets
 
517
  adding manifests
 
518
  adding file changes
 
519
  added 1 changesets with 1 changes to 3 files
 
520
  $ hg status
 
521
  A d
 
522
 
 
523
  $ cd ..