##// END OF EJS Templates
phase-shelve: also capture the state of shelve prior to unshelve
Jason R. Coombs -
r50327:b4535c88 default
parent child Browse files
Show More
@@ -1,1597 +1,1601 b''
1 #testcases stripbased phasebased
1 #testcases stripbased phasebased
2
2
3 $ cat <<EOF >> $HGRCPATH
3 $ cat <<EOF >> $HGRCPATH
4 > [extensions]
4 > [extensions]
5 > mq =
5 > mq =
6 > [defaults]
6 > [defaults]
7 > diff = --nodates --git
7 > diff = --nodates --git
8 > qnew = --date '0 0'
8 > qnew = --date '0 0'
9 > [shelve]
9 > [shelve]
10 > maxbackups = 2
10 > maxbackups = 2
11 > EOF
11 > EOF
12
12
13 #if phasebased
13 #if phasebased
14
14
15 $ cat <<EOF >> $HGRCPATH
15 $ cat <<EOF >> $HGRCPATH
16 > [format]
16 > [format]
17 > internal-phase = yes
17 > internal-phase = yes
18 > EOF
18 > EOF
19
19
20 #endif
20 #endif
21
21
22 $ hg init repo
22 $ hg init repo
23 $ cd repo
23 $ cd repo
24 $ mkdir a b
24 $ mkdir a b
25 $ echo a > a/a
25 $ echo a > a/a
26 $ echo b > b/b
26 $ echo b > b/b
27 $ echo c > c
27 $ echo c > c
28 $ echo d > d
28 $ echo d > d
29 $ echo x > x
29 $ echo x > x
30 $ hg addremove -q
30 $ hg addremove -q
31
31
32 shelve has a help message
32 shelve has a help message
33 $ hg shelve -h
33 $ hg shelve -h
34 hg shelve [OPTION]... [FILE]...
34 hg shelve [OPTION]... [FILE]...
35
35
36 save and set aside changes from the working directory
36 save and set aside changes from the working directory
37
37
38 Shelving takes files that "hg status" reports as not clean, saves the
38 Shelving takes files that "hg status" reports as not clean, saves the
39 modifications to a bundle (a shelved change), and reverts the files so
39 modifications to a bundle (a shelved change), and reverts the files so
40 that their state in the working directory becomes clean.
40 that their state in the working directory becomes clean.
41
41
42 To restore these changes to the working directory, using "hg unshelve";
42 To restore these changes to the working directory, using "hg unshelve";
43 this will work even if you switch to a different commit.
43 this will work even if you switch to a different commit.
44
44
45 When no files are specified, "hg shelve" saves all not-clean files. If
45 When no files are specified, "hg shelve" saves all not-clean files. If
46 specific files or directories are named, only changes to those files are
46 specific files or directories are named, only changes to those files are
47 shelved.
47 shelved.
48
48
49 In bare shelve (when no files are specified, without interactive, include
49 In bare shelve (when no files are specified, without interactive, include
50 and exclude option), shelving remembers information if the working
50 and exclude option), shelving remembers information if the working
51 directory was on newly created branch, in other words working directory
51 directory was on newly created branch, in other words working directory
52 was on different branch than its first parent. In this situation
52 was on different branch than its first parent. In this situation
53 unshelving restores branch information to the working directory.
53 unshelving restores branch information to the working directory.
54
54
55 Each shelved change has a name that makes it easier to find later. The
55 Each shelved change has a name that makes it easier to find later. The
56 name of a shelved change defaults to being based on the active bookmark,
56 name of a shelved change defaults to being based on the active bookmark,
57 or if there is no active bookmark, the current named branch. To specify a
57 or if there is no active bookmark, the current named branch. To specify a
58 different name, use "--name".
58 different name, use "--name".
59
59
60 To see a list of existing shelved changes, use the "--list" option. For
60 To see a list of existing shelved changes, use the "--list" option. For
61 each shelved change, this will print its name, age, and description; use "
61 each shelved change, this will print its name, age, and description; use "
62 --patch" or "--stat" for more details.
62 --patch" or "--stat" for more details.
63
63
64 To delete specific shelved changes, use "--delete". To delete all shelved
64 To delete specific shelved changes, use "--delete". To delete all shelved
65 changes, use "--cleanup".
65 changes, use "--cleanup".
66
66
67 options ([+] can be repeated):
67 options ([+] can be repeated):
68
68
69 -A --addremove mark new/missing files as added/removed before
69 -A --addremove mark new/missing files as added/removed before
70 shelving
70 shelving
71 -u --unknown store unknown files in the shelve
71 -u --unknown store unknown files in the shelve
72 --cleanup delete all shelved changes
72 --cleanup delete all shelved changes
73 --date DATE shelve with the specified commit date
73 --date DATE shelve with the specified commit date
74 -d --delete delete the named shelved change(s)
74 -d --delete delete the named shelved change(s)
75 -e --edit invoke editor on commit messages
75 -e --edit invoke editor on commit messages
76 -k --keep shelve, but keep changes in the working directory
76 -k --keep shelve, but keep changes in the working directory
77 -l --list list current shelves
77 -l --list list current shelves
78 -m --message TEXT use text as shelve message
78 -m --message TEXT use text as shelve message
79 -n --name NAME use the given name for the shelved commit
79 -n --name NAME use the given name for the shelved commit
80 -p --patch output patches for changes (provide the names of the
80 -p --patch output patches for changes (provide the names of the
81 shelved changes as positional arguments)
81 shelved changes as positional arguments)
82 -i --interactive interactive mode
82 -i --interactive interactive mode
83 --stat output diffstat-style summary of changes (provide
83 --stat output diffstat-style summary of changes (provide
84 the names of the shelved changes as positional
84 the names of the shelved changes as positional
85 arguments)
85 arguments)
86 -I --include PATTERN [+] include names matching the given patterns
86 -I --include PATTERN [+] include names matching the given patterns
87 -X --exclude PATTERN [+] exclude names matching the given patterns
87 -X --exclude PATTERN [+] exclude names matching the given patterns
88 --mq operate on patch repository
88 --mq operate on patch repository
89
89
90 (some details hidden, use --verbose to show complete help)
90 (some details hidden, use --verbose to show complete help)
91
91
92 shelving in an empty repo should be possible
92 shelving in an empty repo should be possible
93 (this tests also that editor is not invoked, if '--edit' is not
93 (this tests also that editor is not invoked, if '--edit' is not
94 specified)
94 specified)
95
95
96 $ HGEDITOR=cat hg shelve
96 $ HGEDITOR=cat hg shelve
97 shelved as default
97 shelved as default
98 0 files updated, 0 files merged, 5 files removed, 0 files unresolved
98 0 files updated, 0 files merged, 5 files removed, 0 files unresolved
99
99
100 $ hg unshelve
100 $ hg unshelve
101 unshelving change 'default'
101 unshelving change 'default'
102
102
103 $ hg commit -q -m 'initial commit'
103 $ hg commit -q -m 'initial commit'
104
104
105 $ hg shelve
105 $ hg shelve
106 nothing changed
106 nothing changed
107 [1]
107 [1]
108
108
109 make sure shelve files were backed up
109 make sure shelve files were backed up
110
110
111 $ ls .hg/shelve-backup
111 $ ls .hg/shelve-backup
112 default.hg
112 default.hg
113 default.patch
113 default.patch
114 default.shelve
114 default.shelve
115
115
116 checks to make sure we dont create a directory or
116 checks to make sure we dont create a directory or
117 hidden file while choosing a new shelve name
117 hidden file while choosing a new shelve name
118
118
119 when we are given a name
119 when we are given a name
120
120
121 $ hg shelve -n foo/bar
121 $ hg shelve -n foo/bar
122 abort: shelved change names can not contain slashes
122 abort: shelved change names can not contain slashes
123 [255]
123 [255]
124 $ hg shelve -n .baz
124 $ hg shelve -n .baz
125 abort: shelved change names can not start with '.'
125 abort: shelved change names can not start with '.'
126 [255]
126 [255]
127 $ hg shelve -n foo\\bar
127 $ hg shelve -n foo\\bar
128 abort: shelved change names can not contain slashes
128 abort: shelved change names can not contain slashes
129 [255]
129 [255]
130
130
131 when shelve has to choose itself
131 when shelve has to choose itself
132
132
133 $ hg branch x/y -q
133 $ hg branch x/y -q
134 $ hg commit -q -m "Branch commit 0"
134 $ hg commit -q -m "Branch commit 0"
135 $ hg shelve
135 $ hg shelve
136 nothing changed
136 nothing changed
137 [1]
137 [1]
138 $ hg branch .x -q
138 $ hg branch .x -q
139 $ hg commit -q -m "Branch commit 1"
139 $ hg commit -q -m "Branch commit 1"
140 $ hg shelve
140 $ hg shelve
141 nothing changed
141 nothing changed
142 [1]
142 [1]
143 $ hg branch x\\y -q
143 $ hg branch x\\y -q
144 $ hg commit -q -m "Branch commit 2"
144 $ hg commit -q -m "Branch commit 2"
145 $ hg shelve
145 $ hg shelve
146 nothing changed
146 nothing changed
147 [1]
147 [1]
148
148
149 cleaning the branches made for name checking tests
149 cleaning the branches made for name checking tests
150
150
151 $ hg up default -q
151 $ hg up default -q
152 $ hg strip e9177275307e+6a6d231f43d+882bae7c62c2 -q
152 $ hg strip e9177275307e+6a6d231f43d+882bae7c62c2 -q
153
153
154 create an mq patch - shelving should work fine with a patch applied
154 create an mq patch - shelving should work fine with a patch applied
155
155
156 $ echo n > n
156 $ echo n > n
157 $ hg add n
157 $ hg add n
158 $ hg commit n -m second
158 $ hg commit n -m second
159 $ hg qnew second.patch
159 $ hg qnew second.patch
160
160
161 shelve a change that we will delete later
161 shelve a change that we will delete later
162
162
163 $ echo a >> a/a
163 $ echo a >> a/a
164 $ hg shelve
164 $ hg shelve
165 shelved as default
165 shelved as default
166 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
166 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
167
167
168 set up some more complex changes to shelve
168 set up some more complex changes to shelve
169
169
170 $ echo a >> a/a
170 $ echo a >> a/a
171 $ hg mv b b.rename
171 $ hg mv b b.rename
172 moving b/b to b.rename/b
172 moving b/b to b.rename/b
173 $ hg cp c c.copy
173 $ hg cp c c.copy
174 $ hg mv d ghost
174 $ hg mv d ghost
175 $ rm ghost
175 $ rm ghost
176 $ hg status -C
176 $ hg status -C
177 M a/a
177 M a/a
178 A b.rename/b
178 A b.rename/b
179 b/b
179 b/b
180 A c.copy
180 A c.copy
181 c
181 c
182 R b/b
182 R b/b
183 R d
183 R d
184 ! ghost
184 ! ghost
185 d
185 d
186
186
187 the common case - no options or filenames
187 the common case - no options or filenames
188
188
189 $ hg shelve
189 $ hg shelve
190 shelved as default-01
190 shelved as default-01
191 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
191 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
192 $ hg status -C
192 $ hg status -C
193
193
194 ensure that our shelved changes exist
194 ensure that our shelved changes exist
195
195
196 $ hg shelve -l
196 $ hg shelve -l
197 default-01 (*)* changes to: [mq]: second.patch (glob)
197 default-01 (*)* changes to: [mq]: second.patch (glob)
198 default (*)* changes to: [mq]: second.patch (glob)
198 default (*)* changes to: [mq]: second.patch (glob)
199
199
200 $ hg shelve -l -p default
200 $ hg shelve -l -p default
201 default (*)* changes to: [mq]: second.patch (glob)
201 default (*)* changes to: [mq]: second.patch (glob)
202
202
203 diff --git a/a/a b/a/a
203 diff --git a/a/a b/a/a
204 --- a/a/a
204 --- a/a/a
205 +++ b/a/a
205 +++ b/a/a
206 @@ -1,1 +1,2 @@
206 @@ -1,1 +1,2 @@
207 a
207 a
208 +a
208 +a
209
209
210 $ hg shelve --list --addremove
210 $ hg shelve --list --addremove
211 abort: options '--list' and '--addremove' may not be used together
211 abort: options '--list' and '--addremove' may not be used together
212 [10]
212 [10]
213
213
214 delete our older shelved change
214 delete our older shelved change
215
215
216 $ hg shelve -d default
216 $ hg shelve -d default
217 $ hg qfinish -a -q
217 $ hg qfinish -a -q
218
218
219 ensure shelve backups aren't overwritten
219 ensure shelve backups aren't overwritten
220
220
221 $ ls .hg/shelve-backup/
221 $ ls .hg/shelve-backup/
222 default-1.hg
222 default-1.hg
223 default-1.patch
223 default-1.patch
224 default-1.shelve
224 default-1.shelve
225 default.hg
225 default.hg
226 default.patch
226 default.patch
227 default.shelve
227 default.shelve
228
228
229 local edits should not prevent a shelved change from applying
229 local edits should not prevent a shelved change from applying
230
230
231 $ printf "z\na\n" > a/a
231 $ printf "z\na\n" > a/a
232 $ hg unshelve --keep
232 $ hg unshelve --keep
233 unshelving change 'default-01'
233 unshelving change 'default-01'
234 temporarily committing pending changes (restore with 'hg unshelve --abort')
234 temporarily committing pending changes (restore with 'hg unshelve --abort')
235 rebasing shelved changes
235 rebasing shelved changes
236 merging a/a
236 merging a/a
237
237
238 $ hg revert --all -q
238 $ hg revert --all -q
239 $ rm a/a.orig b.rename/b c.copy
239 $ rm a/a.orig b.rename/b c.copy
240
240
241 apply it and make sure our state is as expected
241 apply it and make sure our state is as expected
242
242
243 (this also tests that same timestamp prevents backups from being
243 (this also tests that same timestamp prevents backups from being
244 removed, even though there are more than 'maxbackups' backups)
244 removed, even though there are more than 'maxbackups' backups)
245
245
246 $ f -t .hg/shelve-backup/default.shelve
246 $ f -t .hg/shelve-backup/default.shelve
247 .hg/shelve-backup/default.shelve: file
247 .hg/shelve-backup/default.shelve: file
248 $ touch -t 200001010000 .hg/shelve-backup/default.shelve
248 $ touch -t 200001010000 .hg/shelve-backup/default.shelve
249 $ f -t .hg/shelve-backup/default-1.shelve
249 $ f -t .hg/shelve-backup/default-1.shelve
250 .hg/shelve-backup/default-1.shelve: file
250 .hg/shelve-backup/default-1.shelve: file
251 $ touch -t 200001010000 .hg/shelve-backup/default-1.shelve
251 $ touch -t 200001010000 .hg/shelve-backup/default-1.shelve
252
252
253 $ hg unshelve
253 $ hg unshelve
254 unshelving change 'default-01'
254 unshelving change 'default-01'
255 $ hg status -C
255 $ hg status -C
256 M a/a
256 M a/a
257 A b.rename/b
257 A b.rename/b
258 b/b
258 b/b
259 A c.copy
259 A c.copy
260 c
260 c
261 R b/b
261 R b/b
262 R d
262 R d
263 $ hg shelve -l
263 $ hg shelve -l
264
264
265 (both of default.hg and default-1.hg should be still kept, because it
265 (both of default.hg and default-1.hg should be still kept, because it
266 is difficult to decide actual order of them from same timestamp)
266 is difficult to decide actual order of them from same timestamp)
267
267
268 $ ls .hg/shelve-backup/
268 $ ls .hg/shelve-backup/
269 default-01.hg
269 default-01.hg
270 default-01.patch
270 default-01.patch
271 default-01.shelve
271 default-01.shelve
272 default-1.hg
272 default-1.hg
273 default-1.patch
273 default-1.patch
274 default-1.shelve
274 default-1.shelve
275 default.hg
275 default.hg
276 default.patch
276 default.patch
277 default.shelve
277 default.shelve
278
278
279 $ hg unshelve
279 $ hg unshelve
280 abort: no shelved changes to apply!
280 abort: no shelved changes to apply!
281 [20]
281 [20]
282 $ hg unshelve foo
282 $ hg unshelve foo
283 abort: shelved change 'foo' not found
283 abort: shelved change 'foo' not found
284 [10]
284 [10]
285
285
286 named shelves, specific filenames, and "commit messages" should all work
286 named shelves, specific filenames, and "commit messages" should all work
287 (this tests also that editor is invoked, if '--edit' is specified)
287 (this tests also that editor is invoked, if '--edit' is specified)
288
288
289 $ hg status -C
289 $ hg status -C
290 M a/a
290 M a/a
291 A b.rename/b
291 A b.rename/b
292 b/b
292 b/b
293 A c.copy
293 A c.copy
294 c
294 c
295 R b/b
295 R b/b
296 R d
296 R d
297 $ HGEDITOR=cat hg shelve -q -n wibble -m wat -e a
297 $ HGEDITOR=cat hg shelve -q -n wibble -m wat -e a
298 wat
298 wat
299
299
300
300
301 HG: Enter commit message. Lines beginning with 'HG:' are removed.
301 HG: Enter commit message. Lines beginning with 'HG:' are removed.
302 HG: Leave message empty to abort commit.
302 HG: Leave message empty to abort commit.
303 HG: --
303 HG: --
304 HG: user: shelve@localhost
304 HG: user: shelve@localhost
305 HG: branch 'default'
305 HG: branch 'default'
306 HG: changed a/a
306 HG: changed a/a
307
307
308 expect "a" to no longer be present, but status otherwise unchanged
308 expect "a" to no longer be present, but status otherwise unchanged
309
309
310 $ hg status -C
310 $ hg status -C
311 A b.rename/b
311 A b.rename/b
312 b/b
312 b/b
313 A c.copy
313 A c.copy
314 c
314 c
315 R b/b
315 R b/b
316 R d
316 R d
317 $ hg shelve -l --stat
317 $ hg shelve -l --stat
318 wibble (*) wat (glob)
318 wibble (*) wat (glob)
319 a/a | 1 +
319 a/a | 1 +
320 1 files changed, 1 insertions(+), 0 deletions(-)
320 1 files changed, 1 insertions(+), 0 deletions(-)
321
321
322 and now "a/a" should reappear
322 and now "a/a" should reappear
323
323
324 $ cd a
324 $ cd a
325 $ hg unshelve -q wibble
325 $ hg unshelve -q wibble
326 $ cd ..
326 $ cd ..
327 $ hg status -C
327 $ hg status -C
328 M a/a
328 M a/a
329 A b.rename/b
329 A b.rename/b
330 b/b
330 b/b
331 A c.copy
331 A c.copy
332 c
332 c
333 R b/b
333 R b/b
334 R d
334 R d
335
335
336 ensure old shelve backups are being deleted automatically
336 ensure old shelve backups are being deleted automatically
337
337
338 $ ls .hg/shelve-backup/
338 $ ls .hg/shelve-backup/
339 default-01.hg
339 default-01.hg
340 default-01.patch
340 default-01.patch
341 default-01.shelve
341 default-01.shelve
342 wibble.hg
342 wibble.hg
343 wibble.patch
343 wibble.patch
344 wibble.shelve
344 wibble.shelve
345
345
346 cause unshelving to result in a merge with 'a' conflicting
346 cause unshelving to result in a merge with 'a' conflicting
347
347
348 $ hg shelve -q
348 $ hg shelve -q
349 $ echo c>>a/a
349 $ echo c>>a/a
350 $ hg commit -m second
350 $ hg commit -m second
351 $ hg tip --template '{files}\n'
351 $ hg tip --template '{files}\n'
352 a/a
352 a/a
353
353
354 add an unrelated change that should be preserved
354 add an unrelated change that should be preserved
355
355
356 $ mkdir foo
356 $ mkdir foo
357 $ echo foo > foo/foo
357 $ echo foo > foo/foo
358 $ hg add foo/foo
358 $ hg add foo/foo
359
359
360 force a conflicted merge to occur
360 force a conflicted merge to occur
361
361
362 $ hg unshelve
362 $ hg unshelve
363 unshelving change 'default'
363 unshelving change 'default'
364 temporarily committing pending changes (restore with 'hg unshelve --abort')
364 temporarily committing pending changes (restore with 'hg unshelve --abort')
365 rebasing shelved changes
365 rebasing shelved changes
366 merging a/a
366 merging a/a
367 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
367 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
368 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
368 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
369 [240]
369 [240]
370 $ hg status -v
370 $ hg status -v
371 M a/a
371 M a/a
372 M b.rename/b
372 M b.rename/b
373 M c.copy
373 M c.copy
374 R b/b
374 R b/b
375 R d
375 R d
376 ? a/a.orig
376 ? a/a.orig
377 # The repository is in an unfinished *unshelve* state.
377 # The repository is in an unfinished *unshelve* state.
378
378
379 # Unresolved merge conflicts:
379 # Unresolved merge conflicts:
380 #
380 #
381 # a/a
381 # a/a
382 #
382 #
383 # To mark files as resolved: hg resolve --mark FILE
383 # To mark files as resolved: hg resolve --mark FILE
384
384
385 # To continue: hg unshelve --continue
385 # To continue: hg unshelve --continue
386 # To abort: hg unshelve --abort
386 # To abort: hg unshelve --abort
387
387
388
388
389 ensure that we have a merge with unresolved conflicts
389 ensure that we have a merge with unresolved conflicts
390
390
391 #if phasebased
391 #if phasebased
392 $ hg heads -q --template '{rev}\n'
392 $ hg heads -q --template '{rev}\n'
393 8
393 8
394 5
394 5
395 $ hg parents -q --template '{rev}\n'
395 $ hg parents -q --template '{rev}\n'
396 8
396 8
397 5
397 5
398 #endif
398 #endif
399
399
400 #if stripbased
400 #if stripbased
401 $ hg heads -q --template '{rev}\n'
401 $ hg heads -q --template '{rev}\n'
402 5
402 5
403 4
403 4
404 $ hg parents -q --template '{rev}\n'
404 $ hg parents -q --template '{rev}\n'
405 4
405 4
406 5
406 5
407 #endif
407 #endif
408
408
409 $ hg status
409 $ hg status
410 M a/a
410 M a/a
411 M b.rename/b
411 M b.rename/b
412 M c.copy
412 M c.copy
413 R b/b
413 R b/b
414 R d
414 R d
415 ? a/a.orig
415 ? a/a.orig
416 $ hg diff
416 $ hg diff
417 diff --git a/a/a b/a/a
417 diff --git a/a/a b/a/a
418 --- a/a/a
418 --- a/a/a
419 +++ b/a/a
419 +++ b/a/a
420 @@ -1,2 +1,6 @@
420 @@ -1,2 +1,6 @@
421 a
421 a
422 +<<<<<<< working-copy: 2377350b6337 - shelve: pending changes temporary commit
422 +<<<<<<< working-copy: 2377350b6337 - shelve: pending changes temporary commit
423 c
423 c
424 +=======
424 +=======
425 +a
425 +a
426 +>>>>>>> shelved change: 203c9f771d2b - shelve: changes to: [mq]: second.patch
426 +>>>>>>> shelved change: 203c9f771d2b - shelve: changes to: [mq]: second.patch
427 diff --git a/b/b b/b.rename/b
427 diff --git a/b/b b/b.rename/b
428 rename from b/b
428 rename from b/b
429 rename to b.rename/b
429 rename to b.rename/b
430 diff --git a/c b/c.copy
430 diff --git a/c b/c.copy
431 copy from c
431 copy from c
432 copy to c.copy
432 copy to c.copy
433 diff --git a/d b/d
433 diff --git a/d b/d
434 deleted file mode 100644
434 deleted file mode 100644
435 --- a/d
435 --- a/d
436 +++ /dev/null
436 +++ /dev/null
437 @@ -1,1 +0,0 @@
437 @@ -1,1 +0,0 @@
438 -d
438 -d
439 $ hg resolve -l
439 $ hg resolve -l
440 U a/a
440 U a/a
441
441
442 $ hg shelve
442 $ hg shelve
443 abort: unshelve already in progress
443 abort: unshelve already in progress
444 (use 'hg unshelve --continue' or 'hg unshelve --abort')
444 (use 'hg unshelve --continue' or 'hg unshelve --abort')
445 [20]
445 [20]
446
446
447 abort the unshelve and be happy
447 abort the unshelve and be happy
448
448
449 $ hg status
449 $ hg status
450 M a/a
450 M a/a
451 M b.rename/b
451 M b.rename/b
452 M c.copy
452 M c.copy
453 R b/b
453 R b/b
454 R d
454 R d
455 ? a/a.orig
455 ? a/a.orig
456 $ hg unshelve -a
456 $ hg unshelve -a
457 unshelve of 'default' aborted
457 unshelve of 'default' aborted
458 $ hg heads -q
458 $ hg heads -q
459 [37]:2e69b451d1ea (re)
459 [37]:2e69b451d1ea (re)
460 $ hg parents
460 $ hg parents
461 changeset: [37]:2e69b451d1ea (re)
461 changeset: [37]:2e69b451d1ea (re)
462 tag: tip
462 tag: tip
463 parent: 3:509104101065 (?)
463 parent: 3:509104101065 (?)
464 user: test
464 user: test
465 date: Thu Jan 01 00:00:00 1970 +0000
465 date: Thu Jan 01 00:00:00 1970 +0000
466 summary: second
466 summary: second
467
467
468 $ hg resolve -l
468 $ hg resolve -l
469 $ hg status
469 $ hg status
470 A foo/foo
470 A foo/foo
471 ? a/a.orig
471 ? a/a.orig
472
472
473 try to continue with no unshelve underway
473 try to continue with no unshelve underway
474
474
475 $ hg unshelve -c
475 $ hg unshelve -c
476 abort: no unshelve in progress
476 abort: no unshelve in progress
477 [20]
477 [20]
478 $ hg status
478 $ hg status
479 A foo/foo
479 A foo/foo
480 ? a/a.orig
480 ? a/a.orig
481
481
482 redo the unshelve to get a conflict
482 redo the unshelve to get a conflict
483
483
484 $ hg unshelve -q
484 $ hg unshelve -q
485 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
485 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
486 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
486 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
487 [240]
487 [240]
488
488
489 attempt to continue
489 attempt to continue
490
490
491 $ hg unshelve -c
491 $ hg unshelve -c
492 abort: unresolved conflicts, can't continue
492 abort: unresolved conflicts, can't continue
493 (see 'hg resolve', then 'hg unshelve --continue')
493 (see 'hg resolve', then 'hg unshelve --continue')
494 [255]
494 [255]
495
495
496 $ hg revert -r . a/a
496 $ hg revert -r . a/a
497 $ hg resolve -m a/a
497 $ hg resolve -m a/a
498 (no more unresolved files)
498 (no more unresolved files)
499 continue: hg unshelve --continue
499 continue: hg unshelve --continue
500
500
501 $ hg commit -m 'commit while unshelve in progress'
501 $ hg commit -m 'commit while unshelve in progress'
502 abort: unshelve already in progress
502 abort: unshelve already in progress
503 (use 'hg unshelve --continue' or 'hg unshelve --abort')
503 (use 'hg unshelve --continue' or 'hg unshelve --abort')
504 [20]
504 [20]
505
505
506 $ hg graft --continue
506 $ hg graft --continue
507 abort: no graft in progress
507 abort: no graft in progress
508 (continue: hg unshelve --continue)
508 (continue: hg unshelve --continue)
509 [20]
509 [20]
510 $ hg unshelve -c
510 $ hg unshelve -c
511 unshelve of 'default' complete
511 unshelve of 'default' complete
512
512
513 ensure the repo is as we hope
513 ensure the repo is as we hope
514
514
515 $ hg parents
515 $ hg parents
516 changeset: [37]:2e69b451d1ea (re)
516 changeset: [37]:2e69b451d1ea (re)
517 tag: tip
517 tag: tip
518 parent: 3:509104101065 (?)
518 parent: 3:509104101065 (?)
519 user: test
519 user: test
520 date: Thu Jan 01 00:00:00 1970 +0000
520 date: Thu Jan 01 00:00:00 1970 +0000
521 summary: second
521 summary: second
522
522
523 $ hg heads -q
523 $ hg heads -q
524 [37]:2e69b451d1ea (re)
524 [37]:2e69b451d1ea (re)
525
525
526 $ hg status -C
526 $ hg status -C
527 A b.rename/b
527 A b.rename/b
528 b/b
528 b/b
529 A c.copy
529 A c.copy
530 c
530 c
531 A foo/foo
531 A foo/foo
532 R b/b
532 R b/b
533 R d
533 R d
534 ? a/a.orig
534 ? a/a.orig
535
535
536 there should be no shelves left
536 there should be no shelves left
537
537
538 $ hg shelve -l
538 $ hg shelve -l
539
539
540 #if execbit
540 #if execbit
541
541
542 ensure that metadata-only changes are shelved
542 ensure that metadata-only changes are shelved
543
543
544 $ chmod +x a/a
544 $ chmod +x a/a
545 $ hg shelve -q -n execbit a/a
545 $ hg shelve -q -n execbit a/a
546 $ hg status a/a
546 $ hg status a/a
547 $ hg unshelve -q execbit
547 $ hg unshelve -q execbit
548 $ hg status a/a
548 $ hg status a/a
549 M a/a
549 M a/a
550 $ hg revert a/a
550 $ hg revert a/a
551
551
552 #else
552 #else
553
553
554 Dummy shelve op, to keep rev numbers aligned
554 Dummy shelve op, to keep rev numbers aligned
555
555
556 $ echo foo > a/a
556 $ echo foo > a/a
557 $ hg shelve -q -n dummy a/a
557 $ hg shelve -q -n dummy a/a
558 $ hg unshelve -q dummy
558 $ hg unshelve -q dummy
559 $ hg revert a/a
559 $ hg revert a/a
560
560
561 #endif
561 #endif
562
562
563 #if symlink
563 #if symlink
564
564
565 $ rm a/a
565 $ rm a/a
566 $ ln -s foo a/a
566 $ ln -s foo a/a
567 $ hg shelve -q -n symlink a/a
567 $ hg shelve -q -n symlink a/a
568 $ hg status a/a
568 $ hg status a/a
569 $ hg unshelve -q -n symlink
569 $ hg unshelve -q -n symlink
570 $ hg status a/a
570 $ hg status a/a
571 M a/a
571 M a/a
572 $ hg revert a/a
572 $ hg revert a/a
573
573
574 #else
574 #else
575
575
576 Dummy shelve op, to keep rev numbers aligned
576 Dummy shelve op, to keep rev numbers aligned
577
577
578 $ echo bar > a/a
578 $ echo bar > a/a
579 $ hg shelve -q -n dummy a/a
579 $ hg shelve -q -n dummy a/a
580 $ hg unshelve -q dummy
580 $ hg unshelve -q dummy
581 $ hg revert a/a
581 $ hg revert a/a
582
582
583 #endif
583 #endif
584
584
585 set up another conflict between a commit and a shelved change
585 set up another conflict between a commit and a shelved change
586
586
587 $ hg revert -q -C -a
587 $ hg revert -q -C -a
588 $ rm a/a.orig b.rename/b c.copy
588 $ rm a/a.orig b.rename/b c.copy
589 $ echo a >> a/a
589 $ echo a >> a/a
590 $ hg shelve -q
590 $ hg shelve -q
591 $ echo x >> a/a
591 $ echo x >> a/a
592 $ hg ci -m 'create conflict'
592 $ hg ci -m 'create conflict'
593 $ hg add foo/foo
593 $ hg add foo/foo
594
594
595 if we resolve a conflict while unshelving, the unshelve should succeed
595 if we resolve a conflict while unshelving, the unshelve should succeed
596
596
597 $ hg unshelve --tool :merge-other --keep
597 $ hg unshelve --tool :merge-other --keep
598 unshelving change 'default'
598 unshelving change 'default'
599 temporarily committing pending changes (restore with 'hg unshelve --abort')
599 temporarily committing pending changes (restore with 'hg unshelve --abort')
600 rebasing shelved changes
600 rebasing shelved changes
601 merging a/a
601 merging a/a
602 $ hg parents -q
602 $ hg parents -q
603 (4|13):33f7f61e6c5e (re)
603 (4|13):33f7f61e6c5e (re)
604 $ hg shelve -l
604 $ hg shelve -l
605 default (*)* changes to: second (glob)
605 default (*)* changes to: second (glob)
606 $ hg status
606 $ hg status
607 M a/a
607 M a/a
608 A foo/foo
608 A foo/foo
609 $ cat a/a
609 $ cat a/a
610 a
610 a
611 c
611 c
612 a
612 a
613 $ cat > a/a << EOF
613 $ cat > a/a << EOF
614 > a
614 > a
615 > c
615 > c
616 > x
616 > x
617 > EOF
617 > EOF
618
618
619 $ HGMERGE=true hg unshelve
619 $ HGMERGE=true hg unshelve
620 unshelving change 'default'
620 unshelving change 'default'
621 temporarily committing pending changes (restore with 'hg unshelve --abort')
621 temporarily committing pending changes (restore with 'hg unshelve --abort')
622 rebasing shelved changes
622 rebasing shelved changes
623 merging a/a
623 merging a/a
624 note: unshelved changes already existed in the working copy
624 note: unshelved changes already existed in the working copy
625 $ hg parents -q
625 $ hg parents -q
626 (4|13):33f7f61e6c5e (re)
626 (4|13):33f7f61e6c5e (re)
627 $ hg shelve -l
627 $ hg shelve -l
628 $ hg status
628 $ hg status
629 A foo/foo
629 A foo/foo
630 $ cat a/a
630 $ cat a/a
631 a
631 a
632 c
632 c
633 x
633 x
634
634
635 test keep and cleanup
635 test keep and cleanup
636
636
637 $ hg shelve
637 $ hg shelve
638 shelved as default
638 shelved as default
639 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
639 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
640 $ hg shelve --list
640 $ hg shelve --list
641 default (*)* changes to: create conflict (glob)
641 default (*)* changes to: create conflict (glob)
642 $ hg unshelve -k
642 $ hg unshelve -k
643 unshelving change 'default'
643 unshelving change 'default'
644 $ hg shelve --list
644 $ hg shelve --list
645 default (*)* changes to: create conflict (glob)
645 default (*)* changes to: create conflict (glob)
646 $ hg shelve --cleanup
646 $ hg shelve --cleanup
647 $ hg shelve --list
647 $ hg shelve --list
648
648
649 $ hg shelve --cleanup --delete
649 $ hg shelve --cleanup --delete
650 abort: options '--cleanup' and '--delete' may not be used together
650 abort: options '--cleanup' and '--delete' may not be used together
651 [10]
651 [10]
652 $ hg shelve --cleanup --patch
652 $ hg shelve --cleanup --patch
653 abort: options '--cleanup' and '--patch' may not be used together
653 abort: options '--cleanup' and '--patch' may not be used together
654 [10]
654 [10]
655 $ hg shelve --cleanup --message MESSAGE
655 $ hg shelve --cleanup --message MESSAGE
656 abort: options '--cleanup' and '--message' may not be used together
656 abort: options '--cleanup' and '--message' may not be used together
657 [10]
657 [10]
658
658
659 test bookmarks
659 test bookmarks
660
660
661 $ hg bookmark test
661 $ hg bookmark test
662 $ hg bookmark
662 $ hg bookmark
663 \* test (4|13):33f7f61e6c5e (re)
663 \* test (4|13):33f7f61e6c5e (re)
664 $ hg shelve
664 $ hg shelve
665 shelved as test
665 shelved as test
666 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
666 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
667 $ hg bookmark
667 $ hg bookmark
668 \* test (4|13):33f7f61e6c5e (re)
668 \* test (4|13):33f7f61e6c5e (re)
669 $ hg unshelve
669 $ hg unshelve
670 unshelving change 'test'
670 unshelving change 'test'
671 $ hg bookmark
671 $ hg bookmark
672 \* test (4|13):33f7f61e6c5e (re)
672 \* test (4|13):33f7f61e6c5e (re)
673
673
674 shelve should still work even if mq is disabled
674 shelve should still work even if mq is disabled
675
675
676 $ hg --config extensions.mq=! shelve
676 $ hg --config extensions.mq=! shelve
677 shelved as test
677 shelved as test
678 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
678 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
679 $ hg --config extensions.mq=! shelve --list
679 $ hg --config extensions.mq=! shelve --list
680 test (*)* changes to: create conflict (glob)
680 test (*)* changes to: create conflict (glob)
681 $ hg bookmark
681 $ hg bookmark
682 \* test (4|13):33f7f61e6c5e (re)
682 \* test (4|13):33f7f61e6c5e (re)
683 $ hg --config extensions.mq=! unshelve
683 $ hg --config extensions.mq=! unshelve
684 unshelving change 'test'
684 unshelving change 'test'
685 $ hg bookmark
685 $ hg bookmark
686 \* test (4|13):33f7f61e6c5e (re)
686 \* test (4|13):33f7f61e6c5e (re)
687
687
688 Recreate some conflict again
688 Recreate some conflict again
689
689
690 $ hg up -C -r 2e69b451d1ea
690 $ hg up -C -r 2e69b451d1ea
691 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
691 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
692 (leaving bookmark test)
692 (leaving bookmark test)
693 $ echo y >> a/a
693 $ echo y >> a/a
694 $ hg shelve
694 $ hg shelve
695 shelved as default
695 shelved as default
696 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
696 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
697 $ hg up test
697 $ hg up test
698 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
698 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
699 (activating bookmark test)
699 (activating bookmark test)
700 $ hg bookmark
700 $ hg bookmark
701 \* test (4|13):33f7f61e6c5e (re)
701 \* test (4|13):33f7f61e6c5e (re)
702 $ hg unshelve
702 $ hg unshelve
703 unshelving change 'default'
703 unshelving change 'default'
704 rebasing shelved changes
704 rebasing shelved changes
705 merging a/a
705 merging a/a
706 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
706 warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark')
707 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
707 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
708 [240]
708 [240]
709 $ hg bookmark
709 $ hg bookmark
710 test (4|13):33f7f61e6c5e (re)
710 test (4|13):33f7f61e6c5e (re)
711
711
712 Test that resolving all conflicts in one direction (so that the rebase
712 Test that resolving all conflicts in one direction (so that the rebase
713 is a no-op), works (issue4398)
713 is a no-op), works (issue4398)
714
714
715 $ hg revert -a -r .
715 $ hg revert -a -r .
716 reverting a/a
716 reverting a/a
717 $ hg resolve -m a/a
717 $ hg resolve -m a/a
718 (no more unresolved files)
718 (no more unresolved files)
719 continue: hg unshelve --continue
719 continue: hg unshelve --continue
720 $ hg unshelve -c
720 $ hg unshelve -c
721 note: unshelved changes already existed in the working copy
721 note: unshelved changes already existed in the working copy
722 unshelve of 'default' complete
722 unshelve of 'default' complete
723 $ hg bookmark
723 $ hg bookmark
724 \* test (4|13):33f7f61e6c5e (re)
724 \* test (4|13):33f7f61e6c5e (re)
725 $ hg diff
725 $ hg diff
726 $ hg status
726 $ hg status
727 ? a/a.orig
727 ? a/a.orig
728 ? foo/foo
728 ? foo/foo
729 $ hg summary
729 $ hg summary
730 parent: (4|13):33f7f61e6c5e tip (re)
730 parent: (4|13):33f7f61e6c5e tip (re)
731 create conflict
731 create conflict
732 branch: default
732 branch: default
733 bookmarks: *test
733 bookmarks: *test
734 commit: 2 unknown (clean)
734 commit: 2 unknown (clean)
735 update: (current)
735 update: (current)
736 phases: 5 draft
736 phases: 5 draft
737
737
738 $ hg shelve --delete --stat
738 $ hg shelve --delete --stat
739 abort: options '--delete' and '--stat' may not be used together
739 abort: options '--delete' and '--stat' may not be used together
740 [10]
740 [10]
741 $ hg shelve --delete --name NAME
741 $ hg shelve --delete --name NAME
742 abort: options '--delete' and '--name' may not be used together
742 abort: options '--delete' and '--name' may not be used together
743 [10]
743 [10]
744
744
745 Test interactive shelve
745 Test interactive shelve
746 $ cat <<EOF >> $HGRCPATH
746 $ cat <<EOF >> $HGRCPATH
747 > [ui]
747 > [ui]
748 > interactive = true
748 > interactive = true
749 > EOF
749 > EOF
750 $ echo 'a' >> a/b
750 $ echo 'a' >> a/b
751 $ cat a/a >> a/b
751 $ cat a/a >> a/b
752 $ echo 'x' >> a/b
752 $ echo 'x' >> a/b
753 $ mv a/b a/a
753 $ mv a/b a/a
754 $ echo 'a' >> foo/foo
754 $ echo 'a' >> foo/foo
755 $ hg st
755 $ hg st
756 M a/a
756 M a/a
757 ? a/a.orig
757 ? a/a.orig
758 ? foo/foo
758 ? foo/foo
759 $ cat a/a
759 $ cat a/a
760 a
760 a
761 a
761 a
762 c
762 c
763 x
763 x
764 x
764 x
765 $ cat foo/foo
765 $ cat foo/foo
766 foo
766 foo
767 a
767 a
768 $ hg shelve --interactive --config ui.interactive=false
768 $ hg shelve --interactive --config ui.interactive=false
769 abort: running non-interactively
769 abort: running non-interactively
770 [10]
770 [10]
771 $ hg shelve --interactive << EOF
771 $ hg shelve --interactive << EOF
772 > y
772 > y
773 > y
773 > y
774 > n
774 > n
775 > EOF
775 > EOF
776 diff --git a/a/a b/a/a
776 diff --git a/a/a b/a/a
777 2 hunks, 2 lines changed
777 2 hunks, 2 lines changed
778 examine changes to 'a/a'?
778 examine changes to 'a/a'?
779 (enter ? for help) [Ynesfdaq?] y
779 (enter ? for help) [Ynesfdaq?] y
780
780
781 @@ -1,3 +1,4 @@
781 @@ -1,3 +1,4 @@
782 +a
782 +a
783 a
783 a
784 c
784 c
785 x
785 x
786 record change 1/2 to 'a/a'?
786 record change 1/2 to 'a/a'?
787 (enter ? for help) [Ynesfdaq?] y
787 (enter ? for help) [Ynesfdaq?] y
788
788
789 @@ -1,3 +2,4 @@
789 @@ -1,3 +2,4 @@
790 a
790 a
791 c
791 c
792 x
792 x
793 +x
793 +x
794 record change 2/2 to 'a/a'?
794 record change 2/2 to 'a/a'?
795 (enter ? for help) [Ynesfdaq?] n
795 (enter ? for help) [Ynesfdaq?] n
796
796
797 shelved as test
797 shelved as test
798 merging a/a
798 merging a/a
799 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
799 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
800 $ cat a/a
800 $ cat a/a
801 a
801 a
802 c
802 c
803 x
803 x
804 x
804 x
805 $ cat foo/foo
805 $ cat foo/foo
806 foo
806 foo
807 a
807 a
808 $ hg st
808 $ hg st
809 M a/a
809 M a/a
810 ? foo/foo
810 ? foo/foo
811 $ hg bookmark
811 $ hg bookmark
812 \* test (4|13):33f7f61e6c5e (re)
812 \* test (4|13):33f7f61e6c5e (re)
813 there shouldn't be a merge state
813 there shouldn't be a merge state
814 $ hg resolve -l
814 $ hg resolve -l
815 $ hg unshelve
815 $ hg unshelve
816 unshelving change 'test'
816 unshelving change 'test'
817 temporarily committing pending changes (restore with 'hg unshelve --abort')
817 temporarily committing pending changes (restore with 'hg unshelve --abort')
818 rebasing shelved changes
818 rebasing shelved changes
819 merging a/a
819 merging a/a
820 $ hg bookmark
820 $ hg bookmark
821 \* test (4|13):33f7f61e6c5e (re)
821 \* test (4|13):33f7f61e6c5e (re)
822 $ cat a/a
822 $ cat a/a
823 a
823 a
824 a
824 a
825 c
825 c
826 x
826 x
827 x
827 x
828
828
829 shelve --patch and shelve --stat should work with valid shelfnames
829 shelve --patch and shelve --stat should work with valid shelfnames
830
830
831 $ hg up --clean .
831 $ hg up --clean .
832 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
832 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
833 (leaving bookmark test)
833 (leaving bookmark test)
834 $ hg shelve --list
834 $ hg shelve --list
835 $ echo 'patch a' > shelf-patch-a
835 $ echo 'patch a' > shelf-patch-a
836 $ hg add shelf-patch-a
836 $ hg add shelf-patch-a
837 $ hg shelve
837 $ hg shelve
838 shelved as default
838 shelved as default
839 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
839 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
840 $ echo 'patch b' > shelf-patch-b
840 $ echo 'patch b' > shelf-patch-b
841 $ hg add shelf-patch-b
841 $ hg add shelf-patch-b
842 $ hg shelve
842 $ hg shelve
843 shelved as default-01
843 shelved as default-01
844 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
844 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
845 $ hg shelve --patch default default-01
845 $ hg shelve --patch default default-01
846 default-01 (*)* changes to: create conflict (glob)
846 default-01 (*)* changes to: create conflict (glob)
847
847
848 diff --git a/shelf-patch-b b/shelf-patch-b
848 diff --git a/shelf-patch-b b/shelf-patch-b
849 new file mode 100644
849 new file mode 100644
850 --- /dev/null
850 --- /dev/null
851 +++ b/shelf-patch-b
851 +++ b/shelf-patch-b
852 @@ -0,0 +1,1 @@
852 @@ -0,0 +1,1 @@
853 +patch b
853 +patch b
854 default (*)* changes to: create conflict (glob)
854 default (*)* changes to: create conflict (glob)
855
855
856 diff --git a/shelf-patch-a b/shelf-patch-a
856 diff --git a/shelf-patch-a b/shelf-patch-a
857 new file mode 100644
857 new file mode 100644
858 --- /dev/null
858 --- /dev/null
859 +++ b/shelf-patch-a
859 +++ b/shelf-patch-a
860 @@ -0,0 +1,1 @@
860 @@ -0,0 +1,1 @@
861 +patch a
861 +patch a
862 $ hg shelve --stat default default-01
862 $ hg shelve --stat default default-01
863 default-01 (*)* changes to: create conflict (glob)
863 default-01 (*)* changes to: create conflict (glob)
864 shelf-patch-b | 1 +
864 shelf-patch-b | 1 +
865 1 files changed, 1 insertions(+), 0 deletions(-)
865 1 files changed, 1 insertions(+), 0 deletions(-)
866 default (*)* changes to: create conflict (glob)
866 default (*)* changes to: create conflict (glob)
867 shelf-patch-a | 1 +
867 shelf-patch-a | 1 +
868 1 files changed, 1 insertions(+), 0 deletions(-)
868 1 files changed, 1 insertions(+), 0 deletions(-)
869 $ hg shelve --patch default
869 $ hg shelve --patch default
870 default (*)* changes to: create conflict (glob)
870 default (*)* changes to: create conflict (glob)
871
871
872 diff --git a/shelf-patch-a b/shelf-patch-a
872 diff --git a/shelf-patch-a b/shelf-patch-a
873 new file mode 100644
873 new file mode 100644
874 --- /dev/null
874 --- /dev/null
875 +++ b/shelf-patch-a
875 +++ b/shelf-patch-a
876 @@ -0,0 +1,1 @@
876 @@ -0,0 +1,1 @@
877 +patch a
877 +patch a
878 $ hg shelve --stat default
878 $ hg shelve --stat default
879 default (*)* changes to: create conflict (glob)
879 default (*)* changes to: create conflict (glob)
880 shelf-patch-a | 1 +
880 shelf-patch-a | 1 +
881 1 files changed, 1 insertions(+), 0 deletions(-)
881 1 files changed, 1 insertions(+), 0 deletions(-)
882 $ hg shelve --patch nonexistentshelf
882 $ hg shelve --patch nonexistentshelf
883 abort: cannot find shelf nonexistentshelf
883 abort: cannot find shelf nonexistentshelf
884 [255]
884 [255]
885 $ hg shelve --stat nonexistentshelf
885 $ hg shelve --stat nonexistentshelf
886 abort: cannot find shelf nonexistentshelf
886 abort: cannot find shelf nonexistentshelf
887 [255]
887 [255]
888 $ hg shelve --patch default nonexistentshelf
888 $ hg shelve --patch default nonexistentshelf
889 abort: cannot find shelf nonexistentshelf
889 abort: cannot find shelf nonexistentshelf
890 [255]
890 [255]
891
891
892 when the user asks for a patch, we assume they want the most recent shelve if
892 when the user asks for a patch, we assume they want the most recent shelve if
893 they don't provide a shelve name
893 they don't provide a shelve name
894
894
895 $ hg shelve --patch
895 $ hg shelve --patch
896 default-01 (*)* changes to: create conflict (glob)
896 default-01 (*)* changes to: create conflict (glob)
897
897
898 diff --git a/shelf-patch-b b/shelf-patch-b
898 diff --git a/shelf-patch-b b/shelf-patch-b
899 new file mode 100644
899 new file mode 100644
900 --- /dev/null
900 --- /dev/null
901 +++ b/shelf-patch-b
901 +++ b/shelf-patch-b
902 @@ -0,0 +1,1 @@
902 @@ -0,0 +1,1 @@
903 +patch b
903 +patch b
904
904
905 $ cd ..
905 $ cd ..
906
906
907 Shelve from general delta repo uses bundle2 on disk
907 Shelve from general delta repo uses bundle2 on disk
908 --------------------------------------------------
908 --------------------------------------------------
909
909
910 no general delta
910 no general delta
911
911
912 $ hg clone --pull repo bundle1 --config format.usegeneraldelta=0
912 $ hg clone --pull repo bundle1 --config format.usegeneraldelta=0
913 requesting all changes
913 requesting all changes
914 adding changesets
914 adding changesets
915 adding manifests
915 adding manifests
916 adding file changes
916 adding file changes
917 added 5 changesets with 8 changes to 6 files
917 added 5 changesets with 8 changes to 6 files
918 new changesets cc01e2b0c59f:33f7f61e6c5e
918 new changesets cc01e2b0c59f:33f7f61e6c5e
919 updating to branch default
919 updating to branch default
920 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
920 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
921 $ cd bundle1
921 $ cd bundle1
922 $ echo babar > jungle
922 $ echo babar > jungle
923 $ hg add jungle
923 $ hg add jungle
924 $ hg shelve
924 $ hg shelve
925 shelved as default
925 shelved as default
926 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
926 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
927 $ hg debugbundle .hg/shelved/*.hg
927 $ hg debugbundle .hg/shelved/*.hg
928 330882a04d2ce8487636b1fb292e5beea77fa1e3
928 330882a04d2ce8487636b1fb292e5beea77fa1e3
929 $ cd ..
929 $ cd ..
930
930
931 with general delta
931 with general delta
932
932
933 $ hg clone --pull repo bundle2 --config format.usegeneraldelta=1
933 $ hg clone --pull repo bundle2 --config format.usegeneraldelta=1
934 requesting all changes
934 requesting all changes
935 adding changesets
935 adding changesets
936 adding manifests
936 adding manifests
937 adding file changes
937 adding file changes
938 added 5 changesets with 8 changes to 6 files
938 added 5 changesets with 8 changes to 6 files
939 new changesets cc01e2b0c59f:33f7f61e6c5e
939 new changesets cc01e2b0c59f:33f7f61e6c5e
940 updating to branch default
940 updating to branch default
941 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
941 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
942 $ cd bundle2
942 $ cd bundle2
943 $ echo babar > jungle
943 $ echo babar > jungle
944 $ hg add jungle
944 $ hg add jungle
945 $ hg shelve
945 $ hg shelve
946 shelved as default
946 shelved as default
947 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
947 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
948 $ hg debugbundle .hg/shelved/*.hg
948 $ hg debugbundle .hg/shelved/*.hg
949 Stream params: {Compression: BZ}
949 Stream params: {Compression: BZ}
950 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
950 changegroup -- {nbchanges: 1, version: 02} (mandatory: True)
951 330882a04d2ce8487636b1fb292e5beea77fa1e3
951 330882a04d2ce8487636b1fb292e5beea77fa1e3
952
952
953 Test shelve --keep
953 Test shelve --keep
954
954
955 $ hg unshelve
955 $ hg unshelve
956 unshelving change 'default'
956 unshelving change 'default'
957 $ hg shelve --keep --list
957 $ hg shelve --keep --list
958 abort: options '--list' and '--keep' may not be used together
958 abort: options '--list' and '--keep' may not be used together
959 [10]
959 [10]
960 $ hg shelve --keep --patch
960 $ hg shelve --keep --patch
961 abort: options '--patch' and '--keep' may not be used together
961 abort: options '--patch' and '--keep' may not be used together
962 [10]
962 [10]
963 $ hg shelve --keep --delete
963 $ hg shelve --keep --delete
964 abort: options '--delete' and '--keep' may not be used together
964 abort: options '--delete' and '--keep' may not be used together
965 [10]
965 [10]
966 $ hg shelve --keep
966 $ hg shelve --keep
967 shelved as default
967 shelved as default
968 $ hg diff
968 $ hg diff
969 diff --git a/jungle b/jungle
969 diff --git a/jungle b/jungle
970 new file mode 100644
970 new file mode 100644
971 --- /dev/null
971 --- /dev/null
972 +++ b/jungle
972 +++ b/jungle
973 @@ -0,0 +1,1 @@
973 @@ -0,0 +1,1 @@
974 +babar
974 +babar
975
975
976 Test shelve --delete
976 Test shelve --delete
977
977
978 $ hg shelve --list
978 $ hg shelve --list
979 default (*s ago) * changes to: create conflict (glob)
979 default (*s ago) * changes to: create conflict (glob)
980 $ hg shelve --delete doesnotexist
980 $ hg shelve --delete doesnotexist
981 abort: shelved change 'doesnotexist' not found
981 abort: shelved change 'doesnotexist' not found
982 [10]
982 [10]
983 $ hg shelve --delete default
983 $ hg shelve --delete default
984
984
985 $ cd ..
985 $ cd ..
986
986
987 Test visibility of in-memory changes inside transaction to external hook
987 Test visibility of in-memory changes inside transaction to external hook
988 ------------------------------------------------------------------------
988 ------------------------------------------------------------------------
989
989
990 $ cd repo
990 $ cd repo
991
991
992 $ echo xxxx >> x
992 $ echo xxxx >> x
993 $ hg commit -m "#5: changes to invoke rebase"
993 $ hg commit -m "#5: changes to invoke rebase"
994
994
995 $ cat > $TESTTMP/checkvisibility.sh <<EOF
995 $ cat > $TESTTMP/checkvisibility.sh <<EOF
996 > echo "==== \$1:"
996 > echo "==== \$1:"
997 > hg parents --template "VISIBLE {rev}:{node|short}\n"
997 > hg parents --template "VISIBLE {rev}:{node|short}\n"
998 > # test that pending changes are hidden
998 > # test that pending changes are hidden
999 > unset HG_PENDING
999 > unset HG_PENDING
1000 > hg parents --template "ACTUAL {rev}:{node|short}\n"
1000 > hg parents --template "ACTUAL {rev}:{node|short}\n"
1001 > echo "===="
1001 > echo "===="
1002 > EOF
1002 > EOF
1003
1003
1004 $ cat >> .hg/hgrc <<EOF
1004 $ cat >> .hg/hgrc <<EOF
1005 > [defaults]
1005 > [defaults]
1006 > # to fix hash id of temporary revisions
1006 > # to fix hash id of temporary revisions
1007 > unshelve = --date '0 0'
1007 > unshelve = --date '0 0'
1008 > EOF
1008 > EOF
1009
1009
1010 "hg unshelve" at REV5 implies steps below:
1010 "hg unshelve" at REV5 implies steps below:
1011
1011
1012 (1) commit changes in the working directory (REV6)
1012 (1) commit changes in the working directory (REV6)
1013 (2) unbundle shelved revision (REV7)
1013 (2) unbundle shelved revision (REV7)
1014 (3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7)
1014 (3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7)
1015 (4) rebase: commit merged revision (REV8)
1015 (4) rebase: commit merged revision (REV8)
1016 (5) rebase: update to REV6 (REV8 => REV6)
1016 (5) rebase: update to REV6 (REV8 => REV6)
1017 (6) update to REV5 (REV6 => REV5)
1017 (6) update to REV5 (REV6 => REV5)
1018 (7) abort transaction
1018 (7) abort transaction
1019
1019
1020 == test visibility to external preupdate hook
1020 == test visibility to external preupdate hook
1021
1021
1022 $ cat >> .hg/hgrc <<EOF
1022 $ cat >> .hg/hgrc <<EOF
1023 > [hooks]
1023 > [hooks]
1024 > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate
1024 > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate
1025 > EOF
1025 > EOF
1026
1026
1027 $ echo nnnn >> n
1027 $ echo nnnn >> n
1028
1028
1029 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1029 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1030 ==== before-unshelving:
1030 ==== before-unshelving:
1031 VISIBLE (5|19):703117a2acfb (re)
1031 VISIBLE (5|19):703117a2acfb (re)
1032 ACTUAL (5|19):703117a2acfb (re)
1032 ACTUAL (5|19):703117a2acfb (re)
1033 ====
1033 ====
1034
1034
1035 $ hg unshelve --keep default
1035 $ hg unshelve --keep default
1036 temporarily committing pending changes (restore with 'hg unshelve --abort')
1036 temporarily committing pending changes (restore with 'hg unshelve --abort')
1037 rebasing shelved changes
1037 rebasing shelved changes
1038 ==== preupdate:
1038 ==== preupdate:
1039 VISIBLE (6|20):54c00d20fb3f (re)
1039 VISIBLE (6|20):54c00d20fb3f (re)
1040 ACTUAL (5|19):703117a2acfb (re)
1040 ACTUAL (5|19):703117a2acfb (re)
1041 ====
1041 ====
1042 ==== preupdate:
1042 ==== preupdate:
1043 VISIBLE (8|21):8efe6f7537dc (re)
1043 VISIBLE (8|21):8efe6f7537dc (re)
1044 ACTUAL (5|19):703117a2acfb (re)
1044 ACTUAL (5|19):703117a2acfb (re)
1045 ====
1045 ====
1046 ==== preupdate:
1046 ==== preupdate:
1047 VISIBLE (6|20):54c00d20fb3f (re)
1047 VISIBLE (6|20):54c00d20fb3f (re)
1048 ACTUAL (5|19):703117a2acfb (re)
1048 ACTUAL (5|19):703117a2acfb (re)
1049 ====
1049 ====
1050
1050
1051 $ cat >> .hg/hgrc <<EOF
1051 $ cat >> .hg/hgrc <<EOF
1052 > [hooks]
1052 > [hooks]
1053 > preupdate.visibility =
1053 > preupdate.visibility =
1054 > EOF
1054 > EOF
1055
1055
1056 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1056 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1057 ==== after-unshelving:
1057 ==== after-unshelving:
1058 VISIBLE (5|19):703117a2acfb (re)
1058 VISIBLE (5|19):703117a2acfb (re)
1059 ACTUAL (5|19):703117a2acfb (re)
1059 ACTUAL (5|19):703117a2acfb (re)
1060 ====
1060 ====
1061
1061
1062 == test visibility to external update hook
1062 == test visibility to external update hook
1063
1063
1064 $ hg update -q -C 703117a2acfb
1064 $ hg update -q -C 703117a2acfb
1065
1065
1066 $ cat >> .hg/hgrc <<EOF
1066 $ cat >> .hg/hgrc <<EOF
1067 > [hooks]
1067 > [hooks]
1068 > update.visibility = sh $TESTTMP/checkvisibility.sh update
1068 > update.visibility = sh $TESTTMP/checkvisibility.sh update
1069 > EOF
1069 > EOF
1070
1070
1071 $ echo nnnn >> n
1071 $ echo nnnn >> n
1072
1072
1073 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1073 $ sh $TESTTMP/checkvisibility.sh before-unshelving
1074 ==== before-unshelving:
1074 ==== before-unshelving:
1075 VISIBLE (5|19):703117a2acfb (re)
1075 VISIBLE (5|19):703117a2acfb (re)
1076 ACTUAL (5|19):703117a2acfb (re)
1076 ACTUAL (5|19):703117a2acfb (re)
1077 ====
1077 ====
1078
1078
1079 $ hg unshelve --keep default
1079 $ hg unshelve --keep default
1080 temporarily committing pending changes (restore with 'hg unshelve --abort')
1080 temporarily committing pending changes (restore with 'hg unshelve --abort')
1081 rebasing shelved changes
1081 rebasing shelved changes
1082 ==== update:
1082 ==== update:
1083 VISIBLE (6|20):54c00d20fb3f (re)
1083 VISIBLE (6|20):54c00d20fb3f (re)
1084 VISIBLE 1?7:492ed9d705e5 (re)
1084 VISIBLE 1?7:492ed9d705e5 (re)
1085 ACTUAL (5|19):703117a2acfb (re)
1085 ACTUAL (5|19):703117a2acfb (re)
1086 ====
1086 ====
1087 ==== update:
1087 ==== update:
1088 VISIBLE (6|20):54c00d20fb3f (re)
1088 VISIBLE (6|20):54c00d20fb3f (re)
1089 ACTUAL (5|19):703117a2acfb (re)
1089 ACTUAL (5|19):703117a2acfb (re)
1090 ====
1090 ====
1091 ==== update:
1091 ==== update:
1092 VISIBLE (5|19):703117a2acfb (re)
1092 VISIBLE (5|19):703117a2acfb (re)
1093 ACTUAL (5|19):703117a2acfb (re)
1093 ACTUAL (5|19):703117a2acfb (re)
1094 ====
1094 ====
1095
1095
1096 $ cat >> .hg/hgrc <<EOF
1096 $ cat >> .hg/hgrc <<EOF
1097 > [hooks]
1097 > [hooks]
1098 > update.visibility =
1098 > update.visibility =
1099 > EOF
1099 > EOF
1100
1100
1101 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1101 $ sh $TESTTMP/checkvisibility.sh after-unshelving
1102 ==== after-unshelving:
1102 ==== after-unshelving:
1103 VISIBLE (5|19):703117a2acfb (re)
1103 VISIBLE (5|19):703117a2acfb (re)
1104 ACTUAL (5|19):703117a2acfb (re)
1104 ACTUAL (5|19):703117a2acfb (re)
1105 ====
1105 ====
1106
1106
1107 $ cd ..
1107 $ cd ..
1108
1108
1109 Keep active bookmark while (un)shelving even on shared repo (issue4940)
1109 Keep active bookmark while (un)shelving even on shared repo (issue4940)
1110 -----------------------------------------------------------------------
1110 -----------------------------------------------------------------------
1111
1111
1112 $ cat <<EOF >> $HGRCPATH
1112 $ cat <<EOF >> $HGRCPATH
1113 > [extensions]
1113 > [extensions]
1114 > share =
1114 > share =
1115 > EOF
1115 > EOF
1116
1116
1117 $ hg bookmarks -R repo
1117 $ hg bookmarks -R repo
1118 test (4|13):33f7f61e6c5e (re)
1118 test (4|13):33f7f61e6c5e (re)
1119 $ hg share -B repo share
1119 $ hg share -B repo share
1120 updating working directory
1120 updating working directory
1121 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1121 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
1122 $ cd share
1122 $ cd share
1123
1123
1124 $ hg bookmarks
1124 $ hg bookmarks
1125 test (4|13):33f7f61e6c5e (re)
1125 test (4|13):33f7f61e6c5e (re)
1126 $ hg bookmarks foo
1126 $ hg bookmarks foo
1127 $ hg bookmarks
1127 $ hg bookmarks
1128 \* foo (5|19):703117a2acfb (re)
1128 \* foo (5|19):703117a2acfb (re)
1129 test (4|13):33f7f61e6c5e (re)
1129 test (4|13):33f7f61e6c5e (re)
1130 $ echo x >> x
1130 $ echo x >> x
1131 $ hg shelve
1131 $ hg shelve
1132 shelved as foo
1132 shelved as foo
1133 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1133 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1134 $ hg bookmarks
1134 $ hg bookmarks
1135 \* foo (5|19):703117a2acfb (re)
1135 \* foo (5|19):703117a2acfb (re)
1136 test (4|13):33f7f61e6c5e (re)
1136 test (4|13):33f7f61e6c5e (re)
1137
1137
1138 $ hg unshelve
1138 $ hg unshelve
1139 unshelving change 'foo'
1139 unshelving change 'foo'
1140 $ hg bookmarks
1140 $ hg bookmarks
1141 \* foo (5|19):703117a2acfb (re)
1141 \* foo (5|19):703117a2acfb (re)
1142 test (4|13):33f7f61e6c5e (re)
1142 test (4|13):33f7f61e6c5e (re)
1143
1143
1144 $ cd ..
1144 $ cd ..
1145
1145
1146 Abort unshelve while merging (issue5123)
1146 Abort unshelve while merging (issue5123)
1147 ----------------------------------------
1147 ----------------------------------------
1148
1148
1149 $ hg init issue5123
1149 $ hg init issue5123
1150 $ cd issue5123
1150 $ cd issue5123
1151 $ echo > a
1151 $ echo > a
1152 $ hg ci -Am a
1152 $ hg ci -Am a
1153 adding a
1153 adding a
1154 $ hg co null
1154 $ hg co null
1155 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1155 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1156 $ echo > b
1156 $ echo > b
1157 $ hg ci -Am b
1157 $ hg ci -Am b
1158 adding b
1158 adding b
1159 created new head
1159 created new head
1160 $ echo > c
1160 $ echo > c
1161 $ hg add c
1161 $ hg add c
1162 $ hg shelve
1162 $ hg shelve
1163 shelved as default
1163 shelved as default
1164 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1164 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1165 $ hg co 1
1165 $ hg co 1
1166 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1166 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1167 $ hg merge 0
1167 $ hg merge 0
1168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1168 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1169 (branch merge, don't forget to commit)
1169 (branch merge, don't forget to commit)
1170 -- successful merge with two parents
1170 -- successful merge with two parents
1171 $ hg log -G
1171 $ hg log -G
1172 @ changeset: 1:406bf70c274f
1172 @ changeset: 1:406bf70c274f
1173 tag: tip
1173 tag: tip
1174 parent: -1:000000000000
1174 parent: -1:000000000000
1175 user: test
1175 user: test
1176 date: Thu Jan 01 00:00:00 1970 +0000
1176 date: Thu Jan 01 00:00:00 1970 +0000
1177 summary: b
1177 summary: b
1178
1178
1179 @ changeset: 0:ada8c9eb8252
1179 @ changeset: 0:ada8c9eb8252
1180 user: test
1180 user: test
1181 date: Thu Jan 01 00:00:00 1970 +0000
1181 date: Thu Jan 01 00:00:00 1970 +0000
1182 summary: a
1182 summary: a
1183
1183
1184 -- trying to pull in the shelve bits
1184 -- trying to pull in the shelve bits
1185 -- unshelve should abort otherwise, it'll eat my second parent.
1185 -- unshelve should abort otherwise, it'll eat my second parent.
1186 $ hg unshelve
1186 $ hg unshelve
1187 abort: outstanding uncommitted merge
1187 abort: outstanding uncommitted merge
1188 (use 'hg commit' or 'hg merge --abort')
1188 (use 'hg commit' or 'hg merge --abort')
1189 [20]
1189 [20]
1190
1190
1191 $ cd ..
1191 $ cd ..
1192
1192
1193 -- test for interactive mode on unshelve
1193 -- test for interactive mode on unshelve
1194
1194
1195 $ hg init a
1195 $ hg init a
1196 $ cd a
1196 $ cd a
1197 $ echo > b
1197 $ echo > b
1198 $ hg ci -Am b
1198 $ hg ci -Am b
1199 adding b
1199 adding b
1200 $ echo > c
1200 $ echo > c
1201 $ echo > d
1201 $ echo > d
1202 $ hg add .
1202 $ hg add .
1203 adding c
1203 adding c
1204 adding d
1204 adding d
1205 $ hg shelve
1205 $ hg shelve
1206 shelved as default
1206 shelved as default
1207 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1207 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1208 $ echo > e
1208 $ echo > e
1209 $ hg add e
1209 $ hg add e
1210 $ hg ci -m e
1210 $ hg ci -m e
1211 $ hg shelve --patch
1211 $ hg shelve --patch
1212 default (*s ago) * changes to: b (glob)
1212 default (*s ago) * changes to: b (glob)
1213
1213
1214 diff --git a/c b/c
1214 diff --git a/c b/c
1215 new file mode 100644
1215 new file mode 100644
1216 --- /dev/null
1216 --- /dev/null
1217 +++ b/c
1217 +++ b/c
1218 @@ -0,0 +1,1 @@
1218 @@ -0,0 +1,1 @@
1219 +
1219 +
1220 diff --git a/d b/d
1220 diff --git a/d b/d
1221 new file mode 100644
1221 new file mode 100644
1222 --- /dev/null
1222 --- /dev/null
1223 +++ b/d
1223 +++ b/d
1224 @@ -0,0 +1,1 @@
1224 @@ -0,0 +1,1 @@
1225 +
1225 +
1226 $ hg unshelve -i <<EOF
1226 $ hg unshelve -i <<EOF
1227 > y
1227 > y
1228 > y
1228 > y
1229 > y
1229 > y
1230 > n
1230 > n
1231 > EOF
1231 > EOF
1232 unshelving change 'default'
1232 unshelving change 'default'
1233 rebasing shelved changes
1233 rebasing shelved changes
1234 diff --git a/c b/c
1234 diff --git a/c b/c
1235 new file mode 100644
1235 new file mode 100644
1236 examine changes to 'c'?
1236 examine changes to 'c'?
1237 (enter ? for help) [Ynesfdaq?] y
1237 (enter ? for help) [Ynesfdaq?] y
1238
1238
1239 @@ -0,0 +1,1 @@
1239 @@ -0,0 +1,1 @@
1240 +
1240 +
1241 record change 1/2 to 'c'?
1241 record change 1/2 to 'c'?
1242 (enter ? for help) [Ynesfdaq?] y
1242 (enter ? for help) [Ynesfdaq?] y
1243
1243
1244 diff --git a/d b/d
1244 diff --git a/d b/d
1245 new file mode 100644
1245 new file mode 100644
1246 examine changes to 'd'?
1246 examine changes to 'd'?
1247 (enter ? for help) [Ynesfdaq?] y
1247 (enter ? for help) [Ynesfdaq?] y
1248
1248
1249 @@ -0,0 +1,1 @@
1249 @@ -0,0 +1,1 @@
1250 +
1250 +
1251 record change 2/2 to 'd'?
1251 record change 2/2 to 'd'?
1252 (enter ? for help) [Ynesfdaq?] n
1252 (enter ? for help) [Ynesfdaq?] n
1253
1253
1254 $ ls -A
1254 $ ls -A
1255 .hg
1255 .hg
1256 b
1256 b
1257 c
1257 c
1258 e
1258 e
1259 -- shelve should not contain `c` now
1259 -- shelve should not contain `c` now
1260 $ hg shelve --patch
1260 $ hg shelve --patch
1261 default (*s ago) * changes to: b (glob)
1261 default (*s ago) * changes to: b (glob)
1262
1262
1263 diff --git a/d b/d
1263 diff --git a/d b/d
1264 new file mode 100644
1264 new file mode 100644
1265 --- /dev/null
1265 --- /dev/null
1266 +++ b/d
1266 +++ b/d
1267 @@ -0,0 +1,1 @@
1267 @@ -0,0 +1,1 @@
1268 +
1268 +
1269 $ hg unshelve -i <<EOF
1269 $ hg unshelve -i <<EOF
1270 > y
1270 > y
1271 > y
1271 > y
1272 > EOF
1272 > EOF
1273 unshelving change 'default'
1273 unshelving change 'default'
1274 temporarily committing pending changes (restore with 'hg unshelve --abort')
1274 temporarily committing pending changes (restore with 'hg unshelve --abort')
1275 rebasing shelved changes
1275 rebasing shelved changes
1276 diff --git a/d b/d
1276 diff --git a/d b/d
1277 new file mode 100644
1277 new file mode 100644
1278 examine changes to 'd'?
1278 examine changes to 'd'?
1279 (enter ? for help) [Ynesfdaq?] y
1279 (enter ? for help) [Ynesfdaq?] y
1280
1280
1281 @@ -0,0 +1,1 @@
1281 @@ -0,0 +1,1 @@
1282 +
1282 +
1283 record this change to 'd'?
1283 record this change to 'd'?
1284 (enter ? for help) [Ynesfdaq?] y
1284 (enter ? for help) [Ynesfdaq?] y
1285
1285
1286
1286
1287 $ hg status -v
1287 $ hg status -v
1288 A c
1288 A c
1289 A d
1289 A d
1290 $ ls -A
1290 $ ls -A
1291 .hg
1291 .hg
1292 b
1292 b
1293 c
1293 c
1294 d
1294 d
1295 e
1295 e
1296 $ hg shelve --list
1296 $ hg shelve --list
1297
1297
1298 -- now, unshelve selected changes from a file
1298 -- now, unshelve selected changes from a file
1299
1299
1300 $ echo B > foo
1300 $ echo B > foo
1301 $ hg add foo
1301 $ hg add foo
1302 $ hg ci -m 'add B to foo'
1302 $ hg ci -m 'add B to foo'
1303 $ cat > foo <<EOF
1303 $ cat > foo <<EOF
1304 > A
1304 > A
1305 > B
1305 > B
1306 > C
1306 > C
1307 > EOF
1307 > EOF
1308 $ echo > garbage
1308 $ echo > garbage
1309 $ hg st
1309 $ hg st
1310 M foo
1310 M foo
1311 ? garbage
1311 ? garbage
1312 $ hg shelve --unknown
1312 $ hg shelve --unknown
1313 shelved as default
1313 shelved as default
1314 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1314 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
1315 $ cat foo
1315 $ cat foo
1316 B
1316 B
1317 $ hg unshelve -i <<EOF
1317 $ hg unshelve -i <<EOF
1318 > y
1318 > y
1319 > y
1319 > y
1320 > n
1320 > n
1321 > y
1321 > y
1322 > y
1322 > y
1323 > EOF
1323 > EOF
1324 unshelving change 'default'
1324 unshelving change 'default'
1325 rebasing shelved changes
1325 rebasing shelved changes
1326 diff --git a/foo b/foo
1326 diff --git a/foo b/foo
1327 2 hunks, 2 lines changed
1327 2 hunks, 2 lines changed
1328 examine changes to 'foo'?
1328 examine changes to 'foo'?
1329 (enter ? for help) [Ynesfdaq?] y
1329 (enter ? for help) [Ynesfdaq?] y
1330
1330
1331 @@ -1,1 +1,2 @@
1331 @@ -1,1 +1,2 @@
1332 +A
1332 +A
1333 B
1333 B
1334 record change 1/3 to 'foo'?
1334 record change 1/3 to 'foo'?
1335 (enter ? for help) [Ynesfdaq?] y
1335 (enter ? for help) [Ynesfdaq?] y
1336
1336
1337 @@ -1,1 +2,2 @@
1337 @@ -1,1 +2,2 @@
1338 B
1338 B
1339 +C
1339 +C
1340 record change 2/3 to 'foo'?
1340 record change 2/3 to 'foo'?
1341 (enter ? for help) [Ynesfdaq?] n
1341 (enter ? for help) [Ynesfdaq?] n
1342
1342
1343 diff --git a/garbage b/garbage
1343 diff --git a/garbage b/garbage
1344 new file mode 100644
1344 new file mode 100644
1345 examine changes to 'garbage'?
1345 examine changes to 'garbage'?
1346 (enter ? for help) [Ynesfdaq?] y
1346 (enter ? for help) [Ynesfdaq?] y
1347
1347
1348 @@ -0,0 +1,1 @@
1348 @@ -0,0 +1,1 @@
1349 +
1349 +
1350 record change 3/3 to 'garbage'?
1350 record change 3/3 to 'garbage'?
1351 (enter ? for help) [Ynesfdaq?] y
1351 (enter ? for help) [Ynesfdaq?] y
1352
1352
1353 $ hg st
1353 $ hg st
1354 M foo
1354 M foo
1355 ? garbage
1355 ? garbage
1356 $ cat foo
1356 $ cat foo
1357 A
1357 A
1358 B
1358 B
1359 $ hg shelve --patch
1359 $ hg shelve --patch
1360 default (*s ago) * changes to: add B to foo (glob)
1360 default (*s ago) * changes to: add B to foo (glob)
1361
1361
1362 diff --git a/foo b/foo
1362 diff --git a/foo b/foo
1363 --- a/foo
1363 --- a/foo
1364 +++ b/foo
1364 +++ b/foo
1365 @@ -1,2 +1,3 @@
1365 @@ -1,2 +1,3 @@
1366 A
1366 A
1367 B
1367 B
1368 +C
1368 +C
1369
1369
1370 -- unshelve interactive on conflicts
1370 -- unshelve interactive on conflicts
1371
1371
1372 $ echo A >> bar1
1372 $ echo A >> bar1
1373 $ echo A >> bar2
1373 $ echo A >> bar2
1374 $ hg add bar1 bar2
1374 $ hg add bar1 bar2
1375 $ hg ci -m 'add A to bars'
1375 $ hg ci -m 'add A to bars'
1376 $ echo B >> bar1
1376 $ echo B >> bar1
1377 $ echo B >> bar2
1377 $ echo B >> bar2
1378 $ hg shelve
1378 $ hg shelve
1379 shelved as default-01
1379 shelved as default-01
1380 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1380 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1381 $ echo C >> bar1
1381 $ echo C >> bar1
1382 $ echo C >> bar2
1382 $ echo C >> bar2
1383 $ hg ci -m 'add C to bars'
1383 $ hg ci -m 'add C to bars'
1384 $ hg unshelve -i
1384 $ hg unshelve -i
1385 unshelving change 'default-01'
1385 unshelving change 'default-01'
1386 rebasing shelved changes
1386 rebasing shelved changes
1387 merging bar1
1387 merging bar1
1388 warning: conflicts while merging bar1! (edit, then use 'hg resolve --mark')
1388 warning: conflicts while merging bar1! (edit, then use 'hg resolve --mark')
1389 merging bar2
1389 merging bar2
1390 warning: conflicts while merging bar2! (edit, then use 'hg resolve --mark')
1390 warning: conflicts while merging bar2! (edit, then use 'hg resolve --mark')
1391 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1391 unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
1392 [240]
1392 [240]
1393
1393
1394 $ cat > bar1 <<EOF
1394 $ cat > bar1 <<EOF
1395 > A
1395 > A
1396 > B
1396 > B
1397 > C
1397 > C
1398 > EOF
1398 > EOF
1399 $ cat > bar2 <<EOF
1399 $ cat > bar2 <<EOF
1400 > A
1400 > A
1401 > B
1401 > B
1402 > C
1402 > C
1403 > EOF
1403 > EOF
1404 $ hg resolve -m bar1 bar2
1404 $ hg resolve -m bar1 bar2
1405 (no more unresolved files)
1405 (no more unresolved files)
1406 continue: hg unshelve --continue
1406 continue: hg unshelve --continue
1407
1407
1408 -- using --continue with --interactive should throw an error
1408 -- using --continue with --interactive should throw an error
1409 $ hg unshelve --continue -i
1409 $ hg unshelve --continue -i
1410 abort: cannot use both continue and interactive
1410 abort: cannot use both continue and interactive
1411 [10]
1411 [10]
1412
1412
1413 $ cat bar1
1413 $ cat bar1
1414 A
1414 A
1415 B
1415 B
1416 C
1416 C
1417
1417
1418 #if stripbased
1418 #if stripbased
1419 $ hg log -r 3:: -G
1419 $ hg log -r 3:: -G
1420 @ changeset: 5:f1d5f53e397b
1420 @ changeset: 5:f1d5f53e397b
1421 | tag: tip
1421 | tag: tip
1422 | parent: 3:e28fd7fa7938
1422 | parent: 3:e28fd7fa7938
1423 | user: shelve@localhost
1423 | user: shelve@localhost
1424 | date: Thu Jan 01 00:00:00 1970 +0000
1424 | date: Thu Jan 01 00:00:00 1970 +0000
1425 | summary: changes to: add A to bars
1425 | summary: changes to: add A to bars
1426 |
1426 |
1427 | @ changeset: 4:fe451a778c81
1427 | @ changeset: 4:fe451a778c81
1428 |/ user: test
1428 |/ user: test
1429 | date: Thu Jan 01 00:00:00 1970 +0000
1429 | date: Thu Jan 01 00:00:00 1970 +0000
1430 | summary: add C to bars
1430 | summary: add C to bars
1431 |
1431 |
1432 o changeset: 3:e28fd7fa7938
1432 o changeset: 3:e28fd7fa7938
1433 | user: test
1433 | user: test
1434 ~ date: Thu Jan 01 00:00:00 1970 +0000
1434 ~ date: Thu Jan 01 00:00:00 1970 +0000
1435 summary: add A to bars
1435 summary: add A to bars
1436
1436
1437 #endif
1437 #endif
1438
1438
1439 $ hg unshelve --continue <<EOF
1439 $ hg unshelve --continue <<EOF
1440 > y
1440 > y
1441 > y
1441 > y
1442 > y
1442 > y
1443 > n
1443 > n
1444 > EOF
1444 > EOF
1445 diff --git a/bar1 b/bar1
1445 diff --git a/bar1 b/bar1
1446 1 hunks, 1 lines changed
1446 1 hunks, 1 lines changed
1447 examine changes to 'bar1'?
1447 examine changes to 'bar1'?
1448 (enter ? for help) [Ynesfdaq?] y
1448 (enter ? for help) [Ynesfdaq?] y
1449
1449
1450 @@ -1,2 +1,3 @@
1450 @@ -1,2 +1,3 @@
1451 A
1451 A
1452 +B
1452 +B
1453 C
1453 C
1454 record change 1/2 to 'bar1'?
1454 record change 1/2 to 'bar1'?
1455 (enter ? for help) [Ynesfdaq?] y
1455 (enter ? for help) [Ynesfdaq?] y
1456
1456
1457 diff --git a/bar2 b/bar2
1457 diff --git a/bar2 b/bar2
1458 1 hunks, 1 lines changed
1458 1 hunks, 1 lines changed
1459 examine changes to 'bar2'?
1459 examine changes to 'bar2'?
1460 (enter ? for help) [Ynesfdaq?] y
1460 (enter ? for help) [Ynesfdaq?] y
1461
1461
1462 @@ -1,2 +1,3 @@
1462 @@ -1,2 +1,3 @@
1463 A
1463 A
1464 +B
1464 +B
1465 C
1465 C
1466 record change 2/2 to 'bar2'?
1466 record change 2/2 to 'bar2'?
1467 (enter ? for help) [Ynesfdaq?] n
1467 (enter ? for help) [Ynesfdaq?] n
1468
1468
1469 unshelve of 'default-01' complete
1469 unshelve of 'default-01' complete
1470
1470
1471 #if stripbased
1471 #if stripbased
1472 $ hg log -r 3:: -G
1472 $ hg log -r 3:: -G
1473 @ changeset: 4:fe451a778c81
1473 @ changeset: 4:fe451a778c81
1474 | tag: tip
1474 | tag: tip
1475 | user: test
1475 | user: test
1476 | date: Thu Jan 01 00:00:00 1970 +0000
1476 | date: Thu Jan 01 00:00:00 1970 +0000
1477 | summary: add C to bars
1477 | summary: add C to bars
1478 |
1478 |
1479 o changeset: 3:e28fd7fa7938
1479 o changeset: 3:e28fd7fa7938
1480 | user: test
1480 | user: test
1481 ~ date: Thu Jan 01 00:00:00 1970 +0000
1481 ~ date: Thu Jan 01 00:00:00 1970 +0000
1482 summary: add A to bars
1482 summary: add A to bars
1483
1483
1484 #endif
1484 #endif
1485
1485
1486 $ hg unshelve --continue
1486 $ hg unshelve --continue
1487 abort: no unshelve in progress
1487 abort: no unshelve in progress
1488 [20]
1488 [20]
1489
1489
1490 $ hg shelve --list
1490 $ hg shelve --list
1491 default-01 (*)* changes to: add A to bars (glob)
1491 default-01 (*)* changes to: add A to bars (glob)
1492 default (*)* changes to: add B to foo (glob)
1492 default (*)* changes to: add B to foo (glob)
1493 $ hg unshelve -n default-01 -i <<EOF
1493 $ hg unshelve -n default-01 -i <<EOF
1494 > y
1494 > y
1495 > y
1495 > y
1496 > EOF
1496 > EOF
1497 temporarily committing pending changes (restore with 'hg unshelve --abort')
1497 temporarily committing pending changes (restore with 'hg unshelve --abort')
1498 rebasing shelved changes
1498 rebasing shelved changes
1499 diff --git a/bar2 b/bar2
1499 diff --git a/bar2 b/bar2
1500 1 hunks, 1 lines changed
1500 1 hunks, 1 lines changed
1501 examine changes to 'bar2'?
1501 examine changes to 'bar2'?
1502 (enter ? for help) [Ynesfdaq?] y
1502 (enter ? for help) [Ynesfdaq?] y
1503
1503
1504 @@ -1,2 +1,3 @@
1504 @@ -1,2 +1,3 @@
1505 A
1505 A
1506 +B
1506 +B
1507 C
1507 C
1508 record this change to 'bar2'?
1508 record this change to 'bar2'?
1509 (enter ? for help) [Ynesfdaq?] y
1509 (enter ? for help) [Ynesfdaq?] y
1510
1510
1511 -- test for --interactive --keep
1511 -- test for --interactive --keep
1512 $ hg unshelve -i --keep
1512 $ hg unshelve -i --keep
1513 abort: --keep on --interactive is not yet supported
1513 abort: --keep on --interactive is not yet supported
1514 [10]
1514 [10]
1515
1515
1516 $ hg update -q --clean .
1516 $ hg update -q --clean .
1517
1517
1518 Test that we can successfully shelve and unshelve a file with a trailing space
1518 Test that we can successfully shelve and unshelve a file with a trailing space
1519 in the filename. Such filenames are supposedly unsupported on Windows, so we
1519 in the filename. Such filenames are supposedly unsupported on Windows, so we
1520 wrap it in the no-windows check. Also test `hg patch` of the .patch file
1520 wrap it in the no-windows check. Also test `hg patch` of the .patch file
1521 produced by `hg shelve`.
1521 produced by `hg shelve`.
1522 #if no-windows
1522 #if no-windows
1523 $ echo hi > 'my filename '
1523 $ echo hi > 'my filename '
1524 $ hg add 'my filename '
1524 $ hg add 'my filename '
1525 warning: filename ends with ' ', which is not allowed on Windows: 'my filename '
1525 warning: filename ends with ' ', which is not allowed on Windows: 'my filename '
1526 $ hg shelve
1526 $ hg shelve
1527 shelved as default-01
1527 shelved as default-01
1528 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1528 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1529 $ cp .hg/shelved/default-01.patch test_patch.patch
1529 $ cp .hg/shelved/default-01.patch test_patch.patch
1530 $ hg unshelve
1530 $ hg unshelve
1531 unshelving change 'default-01'
1531 unshelving change 'default-01'
1532 $ cat 'my filename '
1532 $ cat 'my filename '
1533 hi
1533 hi
1534 $ hg update -q --clean .
1534 $ hg update -q --clean .
1535 $ hg patch -p1 test_patch.patch
1535 $ hg patch -p1 test_patch.patch
1536 applying test_patch.patch
1536 applying test_patch.patch
1537 #endif
1537 #endif
1538
1538
1539 -- if phasebased, shelve works without patch and bundle
1539 -- if phasebased, shelve works without patch and bundle
1540
1540
1541 $ hg update -q --clean .
1541 $ hg update -q --clean .
1542 $ hg strip -q -r 0
1542 $ hg strip -q -r 0
1543 $ rm -r .hg/shelve*
1543 $ rm -r .hg/shelve*
1544 $ echo import antigravity >> somefile.py
1544 $ echo import antigravity >> somefile.py
1545 $ hg add somefile.py
1545 $ hg add somefile.py
1546 $ hg shelve -q
1546 $ hg shelve -q
1547 #if phasebased
1547 #if phasebased
1548 $ rm .hg/shelved/default.hg
1548 $ rm .hg/shelved/default.hg
1549 $ rm .hg/shelved/default.patch
1549 $ rm .hg/shelved/default.patch
1550 #endif
1550 #endif
1551
1551
1552 shelve --list --patch should work even with no patch file.
1552 shelve --list --patch should work even with no patch file.
1553
1553
1554 $ hg shelve --list --patch
1554 $ hg shelve --list --patch
1555 default (*s ago) * (changes in empty repository) (glob)
1555 default (*s ago) * (changes in empty repository) (glob)
1556
1556
1557 diff --git a/somefile.py b/somefile.py
1557 diff --git a/somefile.py b/somefile.py
1558 new file mode 100644
1558 new file mode 100644
1559 --- /dev/null
1559 --- /dev/null
1560 +++ b/somefile.py
1560 +++ b/somefile.py
1561 @@ -0,0 +1,1 @@
1561 @@ -0,0 +1,1 @@
1562 +import antigravity
1562 +import antigravity
1563
1563
1564 $ hg unshelve
1564 $ hg unshelve
1565 unshelving change 'default'
1565 unshelving change 'default'
1566
1566
1567 #if phasebased
1567 #if phasebased
1568 $ ls .hg/shelve-backup
1568 $ ls .hg/shelve-backup
1569 default.shelve
1569 default.shelve
1570 #endif
1570 #endif
1571
1571
1572 #if stripbased
1572 #if stripbased
1573 $ ls .hg/shelve-backup
1573 $ ls .hg/shelve-backup
1574 default.hg
1574 default.hg
1575 default.patch
1575 default.patch
1576 default.shelve
1576 default.shelve
1577 #endif
1577 #endif
1578
1578
1579
1579
1580 -- allow for phase-based shelves to be disabled
1580 -- allow for phase-based shelves to be disabled
1581
1581
1582 $ hg update -q --clean .
1582 $ hg update -q --clean .
1583 $ hg strip -q --hidden -r 0
1583 $ hg strip -q --hidden -r 0
1584 $ rm -r .hg/shelve*
1584 $ rm -r .hg/shelve*
1585
1585
1586 #if phasebased
1586 #if phasebased
1587 $ cat <<EOF >> $HGRCPATH
1587 $ cat <<EOF >> $HGRCPATH
1588 > [shelve]
1588 > [shelve]
1589 > store = strip
1589 > store = strip
1590 > EOF
1590 > EOF
1591 #endif
1591 #endif
1592
1592
1593 $ echo import this >> somefile.py
1593 $ echo import this >> somefile.py
1594 $ hg add somefile.py
1594 $ hg add somefile.py
1595 $ hg shelve -q
1595 $ hg shelve -q
1596 $ hg log --hidden
1596 $ hg log --hidden
1597 $ ls .hg/shelved
1598 default.hg
1599 default.patch
1600 default.shelve
1597 $ hg unshelve -q
1601 $ hg unshelve -q
General Comments 0
You need to be logged in to leave comments. Login now