Mercurial > hg
annotate hgext/shelve.py @ 31969:face2b5493fb
obsolescence: add test case D-1 for obsolescence markers exchange
About 3 years ago, in August 2014, the logic to select what markers to select on
push was ported from the evolve extension to Mercurial core. However, for some
unclear reasons, the tests for that logic were not ported alongside.
I realised it a couple of weeks ago while working on another push related issue.
I've made a clean up pass on the tests and they are now ready to integrate the
core test suite. This series of changesets do not change any logic. I just adds
test for logic that has been around for about 10 versions of Mercurial.
They are a patch for each test case. It makes it easier to review and postpone
one with documentation issues without rejecting the wholes series.
This patch introduce case D-1:
Pruned changeset based on missing precursor of something not present
Each test case comes it in own test file. It help parallelism and does not
introduce a significant overhead from having a single unified giant test file.
Here are timing to support this claim.
# Multiple test files version:
# run-tests.py --local -j 1 test-exchange-*.t
53.40s user 6.82s system 85% cpu 1:10.76 total
52.79s user 6.97s system 85% cpu 1:09.97 total
52.94s user 6.82s system 85% cpu 1:09.69 total
# Single test file version:
# run-tests.py --local -j 1 test-exchange-obsmarkers.t
52.97s user 6.85s system 85% cpu 1:10.10 total
52.64s user 6.79s system 85% cpu 1:09.63 total
53.70s user 7.00s system 85% cpu 1:11.17 total
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Mon, 10 Apr 2017 16:53:37 +0200 |
parents | 1c398f7f4aa4 |
children | 16d424b97125 |
rev | line source |
---|---|
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1 # shelve.py - save/restore working directory state |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
2 # |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
3 # Copyright 2013 Facebook, Inc. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
4 # |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
7 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
8 """save and restore changes to the working directory |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
9 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
10 The "hg shelve" command saves changes made to the working directory |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
11 and reverts those changes, resetting the working directory to a clean |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
12 state. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
13 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
14 Later on, the "hg unshelve" command restores the changes saved by "hg |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
15 shelve". Changes can be restored even after updating to a different |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
16 parent, in which case Mercurial's merge machinery will resolve any |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
17 conflicts if necessary. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
18 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
19 You can have more than one shelved change outstanding at a time; each |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
20 shelved change has a distinct name. For details, see the help for "hg |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
21 shelve". |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
22 """ |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
23 from __future__ import absolute_import |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
24 |
25113
0ca8410ea345
util: drop alias for collections.deque
Martin von Zweigbergk <martinvonz@google.com>
parents:
25104
diff
changeset
|
25 import collections |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
26 import errno |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
27 import itertools |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28862
diff
changeset
|
28 |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28862
diff
changeset
|
29 from mercurial.i18n import _ |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
30 from mercurial import ( |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
31 bookmarks, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
32 bundle2, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
33 bundlerepo, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
34 changegroup, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
35 cmdutil, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
36 commands, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
37 error, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
38 exchange, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
39 hg, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
40 lock as lockmod, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
41 mdiff, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
42 merge, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
43 node as nodemod, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
44 patch, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
45 phases, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
46 repair, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
47 scmutil, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
48 templatefilters, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
49 util, |
31244
636f55b9ba23
vfs: use 'vfs' module directly in 'hgext.shelve'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31096
diff
changeset
|
50 vfs as vfsmod, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
51 ) |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
52 |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
53 from . import ( |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
54 rebase, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
55 ) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
56 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
57 cmdtable = {} |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
58 command = cmdutil.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29536
diff
changeset
|
59 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25113
diff
changeset
|
60 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25113
diff
changeset
|
61 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25113
diff
changeset
|
62 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29536
diff
changeset
|
63 testedwith = 'ships-with-hg-core' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
64 |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
65 backupdir = 'shelve-backup' |
28862
39130afcce60
shelve: refactor directory name into constant
Oleg Afanasyev <olegaf@fb.com>
parents:
28666
diff
changeset
|
66 shelvedir = 'shelved' |
31554
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
67 shelvefileextensions = ['hg', 'patch', 'oshelve'] |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
68 # universal extension is present in all types of shelves |
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
69 patchextension = 'patch' |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
70 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
71 # we never need the user, so we use a |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
72 # generic user for all shelve operations |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
73 shelveuser = 'shelve@localhost' |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
74 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
75 class shelvedfile(object): |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
76 """Helper for the file storing a single shelve |
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
77 |
22581
c5ece02fb211
shelve: avoid writing file that is never read from
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22202
diff
changeset
|
78 Handles common functions on shelve files (.hg/.patch) using |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
79 the vfs layer""" |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
80 def __init__(self, repo, name, filetype=None): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
81 self.repo = repo |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
82 self.name = name |
31335
3acc7af5859c
shelve: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
83 self.vfs = vfsmod.vfs(repo.vfs.join(shelvedir)) |
3acc7af5859c
shelve: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
84 self.backupvfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
23895
cda18ded2c48
changegroup.writebundle: provide ui
Eric Sumner <ericsumner@fb.com>
parents:
23877
diff
changeset
|
85 self.ui = self.repo.ui |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
86 if filetype: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
87 self.fname = name + '.' + filetype |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
88 else: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
89 self.fname = name |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
90 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
91 def exists(self): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
92 return self.vfs.exists(self.fname) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
93 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
94 def filename(self): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
95 return self.vfs.join(self.fname) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
96 |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
97 def backupfilename(self): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
98 def gennames(base): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
99 yield base |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
100 base, ext = base.rsplit('.', 1) |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
101 for i in itertools.count(1): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
102 yield '%s-%d.%s' % (base, i, ext) |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
103 |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
104 name = self.backupvfs.join(self.fname) |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
105 for n in gennames(name): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
106 if not self.backupvfs.exists(n): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
107 return n |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
108 |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
109 def movetobackup(self): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
110 if not self.backupvfs.isdir(): |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
111 self.backupvfs.makedir() |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
112 util.rename(self.filename(), self.backupfilename()) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
113 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
114 def stat(self): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
115 return self.vfs.stat(self.fname) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
116 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
117 def opener(self, mode='rb'): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
118 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
119 return self.vfs(self.fname, mode) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25260
diff
changeset
|
120 except IOError as err: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
121 if err.errno != errno.ENOENT: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
122 raise |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
123 raise error.Abort(_("shelved change '%s' not found") % self.name) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
124 |
20982
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
125 def applybundle(self): |
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
126 fp = self.opener() |
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
127 try: |
21064
4d9d490d7bbe
bundle2: add a ui argument to readbundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21063
diff
changeset
|
128 gen = exchange.readbundle(self.repo.ui, fp, self.fname, self.vfs) |
26799
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
129 if not isinstance(gen, bundle2.unbundle20): |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
130 gen.apply(self.repo, 'unshelve', |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
131 'bundle:' + self.vfs.join(self.fname), |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
132 targetphase=phases.secret) |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
133 if isinstance(gen, bundle2.unbundle20): |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
134 bundle2.applybundle(self.repo, gen, |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
135 self.repo.currenttransaction(), |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
136 source='unshelve', |
ae03d4190321
shelve: properly process bundle2 bundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26697
diff
changeset
|
137 url='bundle:' + self.vfs.join(self.fname)) |
20982
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
138 finally: |
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
139 fp.close() |
1df99f1ea28d
shelve: add "applybundle()" to invoke "readbundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20960
diff
changeset
|
140 |
22898
43816070284e
shelve: add a bundlerepo method
Matt Mackall <mpm@selenic.com>
parents:
22844
diff
changeset
|
141 def bundlerepo(self): |
43816070284e
shelve: add a bundlerepo method
Matt Mackall <mpm@selenic.com>
parents:
22844
diff
changeset
|
142 return bundlerepo.bundlerepository(self.repo.baseui, self.repo.root, |
43816070284e
shelve: add a bundlerepo method
Matt Mackall <mpm@selenic.com>
parents:
22844
diff
changeset
|
143 self.vfs.join(self.fname)) |
26506
edecf059fda6
shelve: move changegroup generation inside writebundle
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26505
diff
changeset
|
144 def writebundle(self, bases, node): |
27931
1289a122cf3f
shelve: use cg3 for treemanifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
27921
diff
changeset
|
145 cgversion = changegroup.safeversion(self.repo) |
1289a122cf3f
shelve: use cg3 for treemanifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
27921
diff
changeset
|
146 if cgversion == '01': |
1289a122cf3f
shelve: use cg3 for treemanifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
27921
diff
changeset
|
147 btype = 'HG10BZ' |
1289a122cf3f
shelve: use cg3 for treemanifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
27921
diff
changeset
|
148 compression = None |
1289a122cf3f
shelve: use cg3 for treemanifests
Martin von Zweigbergk <martinvonz@google.com>
parents:
27921
diff
changeset
|
149 else: |
26507
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
150 btype = 'HG20' |
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
151 compression = 'BZ' |
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
152 |
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
153 cg = changegroup.changegroupsubset(self.repo, bases, [node], 'shelve', |
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
154 version=cgversion) |
28666
ae53ecc47414
bundle: move writebundle() from changegroup.py to bundle2.py (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
28573
diff
changeset
|
155 bundle2.writebundle(self.ui, cg, self.fname, btype, self.vfs, |
26507
ae29cffa05db
shelve: bundle using bundle2 if repository is general delta (issue4862)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26506
diff
changeset
|
156 compression=compression) |
20983
2778616de7ce
shelve: add "writebundle()" to invoke "writebundle()" with relative path and vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20982
diff
changeset
|
157 |
31554
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
158 def writeobsshelveinfo(self, info): |
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
159 scmutil.simplekeyvaluefile(self.vfs, self.fname).write(info) |
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
160 |
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
161 def readobsshelveinfo(self): |
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
162 return scmutil.simplekeyvaluefile(self.vfs, self.fname).read() |
7485e45807e4
shelve: add an ability to write key-val data to a new type of shelve files
Kostia Balytskyi <ikostia@fb.com>
parents:
31543
diff
changeset
|
163 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
164 class shelvedstate(object): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
165 """Handle persistence during unshelving operations. |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
166 |
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
167 Handles saving and restoring a shelved state. Ensures that different |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
168 versions of a shelved state are possible and handles them appropriately. |
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
169 """ |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
170 _version = 1 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
171 _filename = 'shelvedstate' |
30522
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
172 _keep = 'keep' |
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
173 _nokeep = 'nokeep' |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
174 # colon is essential to differentiate from a real bookmark name |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
175 _noactivebook = ':no-active-bookmark' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
176 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
177 @classmethod |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
178 def load(cls, repo): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
22922
diff
changeset
|
179 fp = repo.vfs(cls._filename) |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
180 try: |
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
181 version = int(fp.readline().strip()) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
182 |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
183 if version != cls._version: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
184 raise error.Abort(_('this version of shelve is incompatible ' |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
185 'with the version used in this repo')) |
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
186 name = fp.readline().strip() |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
187 wctx = nodemod.bin(fp.readline().strip()) |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
188 pendingctx = nodemod.bin(fp.readline().strip()) |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
189 parents = [nodemod.bin(h) for h in fp.readline().split()] |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
190 nodestoremove = [nodemod.bin(h) for h in fp.readline().split()] |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
191 branchtorestore = fp.readline().strip() |
30522
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
192 keep = fp.readline().strip() == cls._keep |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
193 activebook = fp.readline().strip() |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
194 except (ValueError, TypeError) as err: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
195 raise error.CorruptedState(str(err)) |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
196 finally: |
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
197 fp.close() |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
198 |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
199 try: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
200 obj = cls() |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
201 obj.name = name |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
202 obj.wctx = repo[wctx] |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
203 obj.pendingctx = repo[pendingctx] |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
204 obj.parents = parents |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
205 obj.nodestoremove = nodestoremove |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
206 obj.branchtorestore = branchtorestore |
30522
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
207 obj.keep = keep |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
208 obj.activebookmark = '' |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
209 if activebook != cls._noactivebook: |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
210 obj.activebookmark = activebook |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
211 except error.RepoLookupError as err: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
212 raise error.CorruptedState(str(err)) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
213 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
214 return obj |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
215 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
216 @classmethod |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
217 def save(cls, repo, name, originalwctx, pendingctx, nodestoremove, |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
218 branchtorestore, keep=False, activebook=''): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
22922
diff
changeset
|
219 fp = repo.vfs(cls._filename, 'wb') |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
220 fp.write('%i\n' % cls._version) |
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
221 fp.write('%s\n' % name) |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
222 fp.write('%s\n' % nodemod.hex(originalwctx.node())) |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
223 fp.write('%s\n' % nodemod.hex(pendingctx.node())) |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
224 fp.write('%s\n' % |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
225 ' '.join([nodemod.hex(p) for p in repo.dirstate.parents()])) |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
226 fp.write('%s\n' % |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
227 ' '.join([nodemod.hex(n) for n in nodestoremove])) |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
228 fp.write('%s\n' % branchtorestore) |
30522
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
229 fp.write('%s\n' % (cls._keep if keep else cls._nokeep)) |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
230 fp.write('%s\n' % (activebook or cls._noactivebook)) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
231 fp.close() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
232 |
19908
07ee5c8867ca
shelve: use the class constant in the clear method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19904
diff
changeset
|
233 @classmethod |
07ee5c8867ca
shelve: use the class constant in the clear method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19904
diff
changeset
|
234 def clear(cls, repo): |
31311
f59b6cf663a9
vfs: use repo.vfs.unlinkpath
Mads Kiilerich <mads@kiilerich.com>
parents:
31244
diff
changeset
|
235 repo.vfs.unlinkpath(cls._filename, ignoremissing=True) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
236 |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
237 def cleanupoldbackups(repo): |
31335
3acc7af5859c
shelve: directly use repo.vfs.join
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31312
diff
changeset
|
238 vfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
239 maxbackups = repo.ui.configint('shelve', 'maxbackups', 10) |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
240 hgfiles = [f for f in vfs.listdir() |
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
241 if f.endswith('.' + patchextension)] |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
242 hgfiles = sorted([(vfs.stat(f).st_mtime, f) for f in hgfiles]) |
25774
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
243 if 0 < maxbackups and maxbackups < len(hgfiles): |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
244 bordermtime = hgfiles[-maxbackups][0] |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
245 else: |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
246 bordermtime = None |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
247 for mtime, f in hgfiles[:len(hgfiles) - maxbackups]: |
25774
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
248 if mtime == bordermtime: |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
249 # keep it, because timestamp can't decide exact order of backups |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
250 continue |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
251 base = f[:-(1 + len(patchextension))] |
30378
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
252 for ext in shelvefileextensions: |
31543 | 253 vfs.tryunlink(base + '.' + ext) |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
254 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
255 def _backupactivebookmark(repo): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
256 activebookmark = repo._activebookmark |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
257 if activebookmark: |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
258 bookmarks.deactivate(repo) |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
259 return activebookmark |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
260 |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
261 def _restoreactivebookmark(repo, mark): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
262 if mark: |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
263 bookmarks.activate(repo, mark) |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
264 |
26522
10f14bb22950
shelve: add utility to abort current transaction but keep dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26520
diff
changeset
|
265 def _aborttransaction(repo): |
10f14bb22950
shelve: add utility to abort current transaction but keep dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26520
diff
changeset
|
266 '''Abort current transaction for shelve/unshelve, but keep dirstate |
10f14bb22950
shelve: add utility to abort current transaction but keep dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26520
diff
changeset
|
267 ''' |
29270
48b38b16a8f8
shelve: use backup functions instead of manually copying dirstate
Mateusz Kwapich <mitrandir@fb.com>
parents:
29205
diff
changeset
|
268 tr = repo.currenttransaction() |
48b38b16a8f8
shelve: use backup functions instead of manually copying dirstate
Mateusz Kwapich <mitrandir@fb.com>
parents:
29205
diff
changeset
|
269 repo.dirstate.savebackup(tr, suffix='.shelve') |
48b38b16a8f8
shelve: use backup functions instead of manually copying dirstate
Mateusz Kwapich <mitrandir@fb.com>
parents:
29205
diff
changeset
|
270 tr.abort() |
48b38b16a8f8
shelve: use backup functions instead of manually copying dirstate
Mateusz Kwapich <mitrandir@fb.com>
parents:
29205
diff
changeset
|
271 repo.dirstate.restorebackup(None, suffix='.shelve') |
26522
10f14bb22950
shelve: add utility to abort current transaction but keep dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26520
diff
changeset
|
272 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
273 def createcmd(ui, repo, pats, opts): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
274 """subcommand that creates a new shelve""" |
27834
476f53058ee8
with: use context manager for wlock in shelve createcmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27775
diff
changeset
|
275 with repo.wlock(): |
27198
7df042d0784f
shelve: execute checkunfinished inside wlock scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27197
diff
changeset
|
276 cmdutil.checkunfinished(repo) |
27197
6df3ec5bb813
shelve: widen wlock scope of shelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27092
diff
changeset
|
277 return _docreatecmd(ui, repo, pats, opts) |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
278 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
279 def getshelvename(repo, parent, opts): |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
280 """Decide on the name this shelve is going to have""" |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
281 def gennames(): |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
282 yield label |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
283 for i in xrange(1, 100): |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
284 yield '%s-%02d' % (label, i) |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
285 name = opts.get('name') |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
286 label = repo._activebookmark or parent.branch() or 'default' |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
287 # slashes aren't allowed in filenames, therefore we rename it |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
288 label = label.replace('/', '_') |
30671
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
289 label = label.replace('\\', '_') |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
290 # filenames must not start with '.' as it should not be hidden |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
291 if label.startswith('.'): |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
292 label = label.replace('.', '_', 1) |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
293 |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
294 if name: |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
295 if shelvedfile(repo, name, patchextension).exists(): |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
296 e = _("a shelved change named '%s' already exists") % name |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
297 raise error.Abort(e) |
30671
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
298 |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
299 # ensure we are not creating a subdirectory or a hidden file |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
300 if '/' in name or '\\' in name: |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
301 raise error.Abort(_('shelved change names can not contain slashes')) |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
302 if name.startswith('.'): |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
303 raise error.Abort(_("shelved change names can not start with '.'")) |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
304 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
305 else: |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
306 for n in gennames(): |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
307 if not shelvedfile(repo, n, patchextension).exists(): |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
308 name = n |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
309 break |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
310 else: |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
311 raise error.Abort(_("too many shelved changes named '%s'") % label) |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
312 |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
313 return name |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
314 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
315 def mutableancestors(ctx): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
316 """return all mutable ancestors for ctx (included) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
317 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
318 Much faster than the revset ancestors(ctx) & draft()""" |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
319 seen = set([nodemod.nullrev]) |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
320 visit = collections.deque() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
321 visit.append(ctx) |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
322 while visit: |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
323 ctx = visit.popleft() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
324 yield ctx.node() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
325 for parent in ctx.parents(): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
326 rev = parent.rev() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
327 if rev not in seen: |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
328 seen.add(rev) |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
329 if parent.mutable(): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
330 visit.append(parent) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
331 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
332 def getcommitfunc(extra, interactive, editor=False): |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
333 def commitfunc(ui, repo, message, match, opts): |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
334 hasmq = util.safehasattr(repo, 'mq') |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
335 if hasmq: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
336 saved, repo.mq.checkapplied = repo.mq.checkapplied, False |
31462 | 337 overrides = {('phases', 'new-commit'): phases.secret} |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
338 try: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
339 editor_ = False |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
340 if editor: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
341 editor_ = cmdutil.getcommiteditor(editform='shelve.shelve', |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
342 **opts) |
31462 | 343 with repo.ui.configoverride(overrides): |
344 return repo.commit(message, shelveuser, opts.get('date'), | |
345 match, editor=editor_, extra=extra) | |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
346 finally: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
347 if hasmq: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
348 repo.mq.checkapplied = saved |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
349 |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
350 def interactivecommitfunc(ui, repo, *pats, **opts): |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
351 match = scmutil.match(repo['.'], pats, {}) |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
352 message = opts['message'] |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
353 return commitfunc(ui, repo, message, match, opts) |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
354 |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
355 return interactivecommitfunc if interactive else commitfunc |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
356 |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
357 def _nothingtoshelvemessaging(ui, repo, pats, opts): |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
358 stat = repo.status(match=scmutil.match(repo[None], pats, opts)) |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
359 if stat.deleted: |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
360 ui.status(_("nothing changed (%d missing files, see " |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
361 "'hg status')\n") % len(stat.deleted)) |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
362 else: |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
363 ui.status(_("nothing changed\n")) |
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
364 |
30383
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
365 def _shelvecreatedcommit(repo, node, name): |
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
366 bases = list(mutableancestors(repo[node])) |
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
367 shelvedfile(repo, name, 'hg').writebundle(bases, node) |
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
368 cmdutil.export(repo, [node], |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
369 fp=shelvedfile(repo, name, patchextension).opener('wb'), |
30383
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
370 opts=mdiff.diffopts(git=True)) |
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
371 |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
372 def _includeunknownfiles(repo, pats, opts, extra): |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
373 s = repo.status(match=scmutil.match(repo[None], pats, opts), |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
374 unknown=True) |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
375 if s.unknown: |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
376 extra['shelve_unknown'] = '\0'.join(s.unknown) |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
377 repo[None].add(s.unknown) |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
378 |
30385
b573d7ca31c4
shelve: move shelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30384
diff
changeset
|
379 def _finishshelve(repo): |
b573d7ca31c4
shelve: move shelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30384
diff
changeset
|
380 _aborttransaction(repo) |
b573d7ca31c4
shelve: move shelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30384
diff
changeset
|
381 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
382 def _docreatecmd(ui, repo, pats, opts): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
383 wctx = repo[None] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
384 parents = wctx.parents() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
385 if len(parents) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
386 raise error.Abort(_('cannot shelve while merging')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
387 parent = parents[0] |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
388 origbranch = wctx.branch() |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
389 |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
390 if parent.node() != nodemod.nullid: |
27092
156985f2dec0
shelve: use colon instead of quotes in 'changes to' description
Siddharth Agarwal <sid0@fb.com>
parents:
27021
diff
changeset
|
391 desc = "changes to: %s" % parent.description().split('\n', 1)[0] |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
392 else: |
20411
66359d8b8d7e
shelve: add 'changes to' prefix to default shelve message
Mads Kiilerich <madski@unity3d.com>
parents:
20410
diff
changeset
|
393 desc = '(changes in empty repository)' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
394 |
28401
2565fe39a76c
shelve: changes getting opts values by get method
liscju <piotr.listkiewicz@gmail.com>
parents:
28378
diff
changeset
|
395 if not opts.get('message'): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
396 opts['message'] = desc |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
397 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
398 lock = tr = activebookmark = None |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
399 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
400 lock = repo.lock() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
401 |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19943
diff
changeset
|
402 # use an uncommitted transaction to generate the bundle to avoid |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
403 # pull races. ensure we don't print the abort message to stderr. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
404 tr = repo.transaction('commit', report=lambda x: None) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
405 |
24477
325f03de849d
shelve: add interactive mode command line option
Laurent Charignon <lcharignon@fb.com>
parents:
23895
diff
changeset
|
406 interactive = opts.get('interactive', False) |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
407 includeunknown = (opts.get('unknown', False) and |
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
408 not opts.get('addremove', False)) |
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
409 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
410 name = getshelvename(repo, parent, opts) |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
411 activebookmark = _backupactivebookmark(repo) |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
412 extra = {} |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
413 if includeunknown: |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
414 _includeunknownfiles(repo, pats, opts, extra) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
415 |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
416 if _iswctxonnewbranch(repo) and not _isbareshelve(pats, opts): |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
417 # In non-bare shelve we don't store newly created branch |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
418 # at bundled commit |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
419 repo.dirstate.setbranch(repo['.'].branch()) |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
420 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
421 commitfunc = getcommitfunc(extra, interactive, editor=True) |
24478
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
422 if not interactive: |
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
423 node = cmdutil.commit(ui, repo, commitfunc, pats, opts) |
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
424 else: |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
425 node = cmdutil.dorecord(ui, repo, commitfunc, None, |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
426 False, cmdutil.recordfilter, *pats, |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
427 **opts) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
428 if not node: |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
429 _nothingtoshelvemessaging(ui, repo, pats, opts) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
430 return 1 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
431 |
30383
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
432 _shelvecreatedcommit(repo, node, name) |
19874
5836edcbdc2e
shelve: copy bookmarks and restore them after a commit
David Soria Parra <dsp@experimentalworks.net>
parents:
19856
diff
changeset
|
433 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
434 if ui.formatted(): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
435 desc = util.ellipsis(desc, ui.termwidth()) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
436 ui.status(_('shelved as %s\n') % name) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
437 hg.update(repo, parent.node()) |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
438 if origbranch != repo['.'].branch() and not _isbareshelve(pats, opts): |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
439 repo.dirstate.setbranch(origbranch) |
26523
1d23bf6cd90a
shelve: restore shelved dirstate explicitly after aborting transaction
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26522
diff
changeset
|
440 |
30385
b573d7ca31c4
shelve: move shelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30384
diff
changeset
|
441 _finishshelve(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
442 finally: |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
443 _restoreactivebookmark(repo, activebookmark) |
27197
6df3ec5bb813
shelve: widen wlock scope of shelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27092
diff
changeset
|
444 lockmod.release(tr, lock) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
445 |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
446 def _isbareshelve(pats, opts): |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
447 return (not pats |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
448 and not opts.get('interactive', False) |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
449 and not opts.get('include', False) |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
450 and not opts.get('exclude', False)) |
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
451 |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
452 def _iswctxonnewbranch(repo): |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
453 return repo[None].branch() != repo['.'].branch() |
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
454 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
455 def cleanupcmd(ui, repo): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
456 """subcommand that deletes all shelves""" |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
457 |
27835
c448d7e00bf9
with: use context manager for wlock in shelve cleanupcmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27834
diff
changeset
|
458 with repo.wlock(): |
28862
39130afcce60
shelve: refactor directory name into constant
Oleg Afanasyev <olegaf@fb.com>
parents:
28666
diff
changeset
|
459 for (name, _type) in repo.vfs.readdir(shelvedir): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
460 suffix = name.rsplit('.', 1)[-1] |
30378
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
461 if suffix in shelvefileextensions: |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
462 shelvedfile(repo, name).movetobackup() |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
463 cleanupoldbackups(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
464 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
465 def deletecmd(ui, repo, pats): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
466 """subcommand that deletes a specific shelve""" |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
467 if not pats: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
468 raise error.Abort(_('no shelved changes specified!')) |
27836
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
469 with repo.wlock(): |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
470 try: |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
471 for name in pats: |
30378
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
472 for suffix in shelvefileextensions: |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
473 shfile = shelvedfile(repo, name, suffix) |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
474 # patch file is necessary, as it should |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
475 # be present for any kind of shelve, |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
476 # but the .hg file is optional as in future we |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
477 # will add obsolete shelve with does not create a |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
478 # bundle |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
479 if shfile.exists() or suffix == patchextension: |
30378
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
480 shfile.movetobackup() |
27836
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
481 cleanupoldbackups(repo) |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
482 except OSError as err: |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
483 if err.errno != errno.ENOENT: |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
484 raise |
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
485 raise error.Abort(_("shelved change '%s' not found") % name) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
486 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
487 def listshelves(repo): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
488 """return all shelves in repo as list of (time, filename)""" |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
489 try: |
28862
39130afcce60
shelve: refactor directory name into constant
Oleg Afanasyev <olegaf@fb.com>
parents:
28666
diff
changeset
|
490 names = repo.vfs.readdir(shelvedir) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25260
diff
changeset
|
491 except OSError as err: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
492 if err.errno != errno.ENOENT: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
493 raise |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
494 return [] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
495 info = [] |
22199
b3e51675f98e
cleanup: avoid _ for local unused tmp variables - that is reserved for i18n
Mads Kiilerich <madski@unity3d.com>
parents:
22184
diff
changeset
|
496 for (name, _type) in names: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
497 pfx, sfx = name.rsplit('.', 1) |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
498 if not pfx or sfx != patchextension: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
499 continue |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
500 st = shelvedfile(repo, name).stat() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
501 info.append((st.st_mtime, shelvedfile(repo, pfx).filename())) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
502 return sorted(info, reverse=True) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
503 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
504 def listcmd(ui, repo, pats, opts): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
505 """subcommand that displays the list of shelves""" |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
506 pats = set(pats) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
507 width = 80 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
508 if not ui.plain(): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
509 width = ui.termwidth() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
510 namelabel = 'shelve.newest' |
31096
356937ea7a02
pager: add support to --patch, --list and --stat options of hg shelve
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31021
diff
changeset
|
511 ui.pager('shelve') |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
512 for mtime, name in listshelves(repo): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
513 sname = util.split(name)[1] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
514 if pats and sname not in pats: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
515 continue |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
516 ui.write(sname, label=namelabel) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
517 namelabel = 'shelve.name' |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
518 if ui.quiet: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
519 ui.write('\n') |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
520 continue |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
521 ui.write(' ' * (16 - len(sname))) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
522 used = 16 |
19855
a3b285882724
shelve: new output format for shelve listings
David Soria Parra <dsp@experimentalworks.net>
parents:
19854
diff
changeset
|
523 age = '(%s)' % templatefilters.age(util.makedate(mtime), abbrev=True) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
524 ui.write(age, label='shelve.age') |
19855
a3b285882724
shelve: new output format for shelve listings
David Soria Parra <dsp@experimentalworks.net>
parents:
19854
diff
changeset
|
525 ui.write(' ' * (12 - len(age))) |
a3b285882724
shelve: new output format for shelve listings
David Soria Parra <dsp@experimentalworks.net>
parents:
19854
diff
changeset
|
526 used += 12 |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
527 with open(name + '.' + patchextension, 'rb') as fp: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
528 while True: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
529 line = fp.readline() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
530 if not line: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
531 break |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
532 if not line.startswith('#'): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
533 desc = line.rstrip() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
534 if ui.formatted(): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
535 desc = util.ellipsis(desc, width - used) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
536 ui.write(desc) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
537 break |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
538 ui.write('\n') |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
539 if not (opts['patch'] or opts['stat']): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
540 continue |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
541 difflines = fp.readlines() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
542 if opts['patch']: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
543 for chunk, label in patch.difflabel(iter, difflines): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
544 ui.write(chunk, label=label) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
545 if opts['stat']: |
30407
e1677cc29da6
patch: remove unused git parameter from patch.diffstat()
Henning Schild <henning@hennsch.de>
parents:
30385
diff
changeset
|
546 for chunk, label in patch.diffstatui(difflines, width=width): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
547 ui.write(chunk, label=label) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
548 |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
549 def patchcmds(ui, repo, pats, opts, subcommand): |
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
550 """subcommand that displays shelves""" |
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
551 if len(pats) == 0: |
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
552 raise error.Abort(_("--%s expects at least one shelf") % subcommand) |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
553 |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
554 for shelfname in pats: |
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
555 if not shelvedfile(repo, shelfname, patchextension).exists(): |
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
556 raise error.Abort(_("cannot find shelf %s") % shelfname) |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
557 |
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
558 listcmd(ui, repo, pats, opts) |
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
559 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
560 def checkparents(repo, state): |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
561 """check parent while resuming an unshelve""" |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
562 if state.parents != repo.dirstate.parents(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
563 raise error.Abort(_('working directory parents do not match unshelve ' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
564 'state')) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
565 |
19943
4de116871044
shelve: make unshelve work even if it don't run in repository root
Takumi IINO <trot.thunder@gmail.com>
parents:
19911
diff
changeset
|
566 def pathtofiles(repo, files): |
4de116871044
shelve: make unshelve work even if it don't run in repository root
Takumi IINO <trot.thunder@gmail.com>
parents:
19911
diff
changeset
|
567 cwd = repo.getcwd() |
4de116871044
shelve: make unshelve work even if it don't run in repository root
Takumi IINO <trot.thunder@gmail.com>
parents:
19911
diff
changeset
|
568 return [repo.pathto(f, cwd) for f in files] |
4de116871044
shelve: make unshelve work even if it don't run in repository root
Takumi IINO <trot.thunder@gmail.com>
parents:
19911
diff
changeset
|
569 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
570 def unshelveabort(ui, repo, state, opts): |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
571 """subcommand that abort an in-progress unshelve""" |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
572 with repo.lock(): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
573 try: |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
574 checkparents(repo, state) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
575 |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
576 repo.vfs.rename('unshelverebasestate', 'rebasestate') |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
577 try: |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
578 rebase.rebase(ui, repo, **{ |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
579 'abort' : True |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
580 }) |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
581 except Exception: |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
582 repo.vfs.rename('rebasestate', 'unshelverebasestate') |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
583 raise |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
584 |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
585 mergefiles(ui, repo, state.wctx, state.pendingctx) |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
586 repair.strip(ui, repo, state.nodestoremove, backup=False, |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
587 topic='shelve') |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
588 finally: |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
589 shelvedstate.clear(repo) |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
590 ui.warn(_("unshelve of '%s' aborted\n") % state.name) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
591 |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
592 def mergefiles(ui, repo, wctx, shelvectx): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
593 """updates to wctx and merges the changes from shelvectx into the |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
594 dirstate.""" |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
595 with ui.configoverride({('ui', 'quiet'): True}): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
596 hg.update(repo, wctx.node()) |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
597 files = [] |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
598 files.extend(shelvectx.files()) |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
599 files.extend(shelvectx.parents()[0].files()) |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
600 |
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
601 # revert will overwrite unknown files, so move them out of the way |
22922
ebef5fcf7bd0
shelve: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22898
diff
changeset
|
602 for file in repo.status(unknown=True).unknown: |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
603 if file in files: |
27651
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27288
diff
changeset
|
604 util.rename(file, scmutil.origpath(ui, repo, file)) |
22184
fb8065de47b0
unshelve: silence internal revert
Matt Mackall <mpm@selenic.com>
parents:
22057
diff
changeset
|
605 ui.pushbuffer(True) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
606 cmdutil.revert(ui, repo, shelvectx, repo.dirstate.parents(), |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
607 *pathtofiles(repo, files), |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
608 **{'no_backup': True}) |
22184
fb8065de47b0
unshelve: silence internal revert
Matt Mackall <mpm@selenic.com>
parents:
22057
diff
changeset
|
609 ui.popbuffer() |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
610 |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
611 def restorebranch(ui, repo, branchtorestore): |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
612 if branchtorestore and branchtorestore != repo.dirstate.branch(): |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
613 repo.dirstate.setbranch(branchtorestore) |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
614 ui.status(_('marked working directory as branch %s\n') |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
615 % branchtorestore) |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
616 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
617 def unshelvecleanup(ui, repo, name, opts): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
618 """remove related files after an unshelve""" |
28401
2565fe39a76c
shelve: changes getting opts values by get method
liscju <piotr.listkiewicz@gmail.com>
parents:
28378
diff
changeset
|
619 if not opts.get('keep'): |
30378
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
620 for filetype in shelvefileextensions: |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
621 shfile = shelvedfile(repo, name, filetype) |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
622 if shfile.exists(): |
c5126aab9c37
shelve: move possible shelve file extensions to a single place
Kostia Balytskyi <ikostia@fb.com>
parents:
29841
diff
changeset
|
623 shfile.movetobackup() |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
624 cleanupoldbackups(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
625 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
626 def unshelvecontinue(ui, repo, state, opts): |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
627 """subcommand to continue an in-progress unshelve""" |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
628 # We're finishing off a merge. First parent is our original |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
629 # parent, second is the temporary "fake" commit we're unshelving. |
27838
60b850b7e4ef
with: use context manager for lock in continue
Bryan O'Sullivan <bryano@fb.com>
parents:
27837
diff
changeset
|
630 with repo.lock(): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
631 checkparents(repo, state) |
26992
b3b5ed560283
shelve: switch to mergestate.read()
Siddharth Agarwal <sid0@fb.com>
parents:
26942
diff
changeset
|
632 ms = merge.mergestate.read(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
633 if [f for f in ms if ms[f] == 'u']: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
634 raise error.Abort( |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
635 _("unresolved conflicts, can't continue"), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
636 hint=_("see 'hg resolve', then 'hg unshelve --continue'")) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
637 |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
638 repo.vfs.rename('unshelverebasestate', 'rebasestate') |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
639 try: |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
640 rebase.rebase(ui, repo, **{ |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
641 'continue' : True |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
642 }) |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
643 except Exception: |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
644 repo.vfs.rename('rebasestate', 'unshelverebasestate') |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
645 raise |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
646 |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
647 shelvectx = repo['tip'] |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
648 if not shelvectx in state.pendingctx.children(): |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
649 # rebase was a no-op, so it produced no child commit |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
650 shelvectx = state.pendingctx |
22842
d43d116a118c
shelve: don't delete "." when rebase is a no-op (issue4398)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21852
diff
changeset
|
651 else: |
d43d116a118c
shelve: don't delete "." when rebase is a no-op (issue4398)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21852
diff
changeset
|
652 # only strip the shelvectx if the rebase produced it |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
653 state.nodestoremove.append(shelvectx.node()) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
654 |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
655 mergefiles(ui, repo, state.wctx, shelvectx) |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
656 restorebranch(ui, repo, state.branchtorestore) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
657 |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
658 repair.strip(ui, repo, state.nodestoremove, backup=False, |
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
659 topic='shelve') |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
660 _restoreactivebookmark(repo, state.activebookmark) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
661 shelvedstate.clear(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
662 unshelvecleanup(ui, repo, state.name, opts) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
663 ui.status(_("unshelve of '%s' complete\n") % state.name) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
664 |
30453
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
665 def _commitworkingcopychanges(ui, repo, opts, tmpwctx): |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
666 """Temporarily commit working copy changes before moving unshelve commit""" |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
667 # Store pending changes in a commit and remember added in case a shelve |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
668 # contains unknown files that are part of the pending change |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
669 s = repo.status() |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
670 addedbefore = frozenset(s.added) |
30846
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
671 if not (s.modified or s.added or s.removed): |
30453
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
672 return tmpwctx, addedbefore |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
673 ui.status(_("temporarily committing pending changes " |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
674 "(restore with 'hg unshelve --abort')\n")) |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
675 commitfunc = getcommitfunc(extra=None, interactive=False, |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
676 editor=False) |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
677 tempopts = {} |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
678 tempopts['message'] = "pending changes temporary commit" |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
679 tempopts['date'] = opts.get('date') |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
680 with ui.configoverride({('ui', 'quiet'): True}): |
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
681 node = cmdutil.commit(ui, repo, commitfunc, [], tempopts) |
30453
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
682 tmpwctx = repo[node] |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
683 return tmpwctx, addedbefore |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
684 |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
685 def _unshelverestorecommit(ui, repo, basename): |
30454
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
686 """Recreate commit in the repository during the unshelve""" |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
687 with ui.configoverride({('ui', 'quiet'): True}): |
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
688 shelvedfile(repo, basename, 'hg').applybundle() |
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
689 shelvectx = repo['tip'] |
30454
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
690 return repo, shelvectx |
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
691 |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
692 def _rebaserestoredcommit(ui, repo, opts, tr, oldtiprev, basename, pctx, |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
693 tmpwctx, shelvectx, branchtorestore, |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
694 activebookmark): |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
695 """Rebase restored commit from its original location to a destination""" |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
696 # If the shelve is not immediately on top of the commit |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
697 # we'll be merging with, rebase it to be on top. |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
698 if tmpwctx.node() == shelvectx.parents()[0].node(): |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
699 return shelvectx |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
700 |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
701 ui.status(_('rebasing shelved changes\n')) |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
702 try: |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
703 rebase.rebase(ui, repo, **{ |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
704 'rev': [shelvectx.rev()], |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
705 'dest': str(tmpwctx.rev()), |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
706 'keep': True, |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
707 'tool': opts.get('tool', ''), |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
708 }) |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
709 except error.InterventionRequired: |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
710 tr.close() |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
711 |
31888
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
712 nodestoremove = [repo.changelog.node(rev) |
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
713 for rev in xrange(oldtiprev, len(repo))] |
1c398f7f4aa4
shelve: rename nodestoprune to nodestoremove
Kostia Balytskyi <ikostia@fb.com>
parents:
31757
diff
changeset
|
714 shelvedstate.save(repo, basename, pctx, tmpwctx, nodestoremove, |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
715 branchtorestore, opts.get('keep'), activebookmark) |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
716 |
31312
7eb53603744b
vfs: use repo.vfs.rename
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
717 repo.vfs.rename('rebasestate', 'unshelverebasestate') |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
718 raise error.InterventionRequired( |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
719 _("unresolved conflicts (see 'hg resolve', then " |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
720 "'hg unshelve --continue')")) |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
721 |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
722 # refresh ctx after rebase completes |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
723 shelvectx = repo['tip'] |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
724 |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
725 if not shelvectx in tmpwctx.children(): |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
726 # rebase was a no-op, so it produced no child commit |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
727 shelvectx = tmpwctx |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
728 return shelvectx |
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
729 |
30456
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
730 def _forgetunknownfiles(repo, shelvectx, addedbefore): |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
731 # Forget any files that were unknown before the shelve, unknown before |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
732 # unshelve started, but are now added. |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
733 shelveunknown = shelvectx.extra().get('shelve_unknown') |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
734 if not shelveunknown: |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
735 return |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
736 shelveunknown = frozenset(shelveunknown.split('\0')) |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
737 addedafter = frozenset(repo.status().added) |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
738 toforget = (addedafter & shelveunknown) - addedbefore |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
739 repo[None].forget(toforget) |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
740 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
741 def _finishunshelve(repo, oldtiprev, tr, activebookmark): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
742 _restoreactivebookmark(repo, activebookmark) |
30457
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
743 # The transaction aborting will strip all the commits for us, |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
744 # but it doesn't update the inmemory structures, so addchangegroup |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
745 # hooks still fire and try to operate on the missing commits. |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
746 # Clean up manually to prevent this. |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
747 repo.unfiltered().changelog.strip(oldtiprev, tr) |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
748 _aborttransaction(repo) |
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
749 |
30846
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
750 def _checkunshelveuntrackedproblems(ui, repo, shelvectx): |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
751 """Check potential problems which may result from working |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
752 copy having untracked changes.""" |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
753 wcdeleted = set(repo.status().deleted) |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
754 shelvetouched = set(shelvectx.files()) |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
755 intersection = wcdeleted.intersection(shelvetouched) |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
756 if intersection: |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
757 m = _("shelved change touches missing files") |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
758 hint = _("run hg status to see which files are missing") |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
759 raise error.Abort(m, hint=hint) |
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
760 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
761 @command('unshelve', |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
762 [('a', 'abort', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
763 _('abort an incomplete unshelve operation')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
764 ('c', 'continue', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
765 _('continue an incomplete unshelve operation')), |
27019
5cf184398ee7
unshelve: add -k as short form of --keep
Siddharth Agarwal <sid0@fb.com>
parents:
26992
diff
changeset
|
766 ('k', 'keep', None, |
20960
8e5b21ce8ee9
shelve: introduce secret option for using fixed date for temporary commit
Mads Kiilerich <madski@unity3d.com>
parents:
20958
diff
changeset
|
767 _('keep shelve after unshelving')), |
31021
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
768 ('n', 'name', '', |
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
769 _('restore shelved change with given name'), _('NAME')), |
27021
f2554154509f
unshelve: add support for custom merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27020
diff
changeset
|
770 ('t', 'tool', '', _('specify merge tool')), |
20960
8e5b21ce8ee9
shelve: introduce secret option for using fixed date for temporary commit
Mads Kiilerich <madski@unity3d.com>
parents:
20958
diff
changeset
|
771 ('', 'date', '', |
8e5b21ce8ee9
shelve: introduce secret option for using fixed date for temporary commit
Mads Kiilerich <madski@unity3d.com>
parents:
20958
diff
changeset
|
772 _('set date for temporary commits (DEPRECATED)'), _('DATE'))], |
31021
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
773 _('hg unshelve [[-n] SHELVED]')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
774 def unshelve(ui, repo, *shelved, **opts): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
775 """restore a shelved change to the working directory |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
776 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
777 This command accepts an optional name of a shelved change to |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
778 restore. If none is given, the most recent shelved change is used. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
779 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
780 If a shelved change is applied successfully, the bundle that |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
781 contains the shelved changes is moved to a backup location |
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
782 (.hg/shelve-backup). |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
783 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
784 Since you can restore a shelved change on top of an arbitrary |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
785 commit, it is possible that unshelving will result in a conflict |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
786 between your changes and the commits you are unshelving onto. If |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
787 this occurs, you must resolve the conflict, then use |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
788 ``--continue`` to complete the unshelve operation. (The bundle |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
789 will not be moved until you successfully complete the unshelve.) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
790 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
791 (Alternatively, you can use ``--abort`` to abandon an unshelve |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
792 that causes a conflict. This reverts the unshelved changes, and |
25712
8a6264a2ee60
shelve: always backup shelves instead of deleting them
Colin Chan <colinchan@fb.com>
parents:
25660
diff
changeset
|
793 leaves the bundle in place.) |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
794 |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
795 If bare shelved change(when no files are specified, without interactive, |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
796 include and exclude option) was done on newly created branch it would |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
797 restore branch information to the working directory. |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
798 |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
799 After a successful unshelve, the shelved changes are stored in a |
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
800 backup directory. Only the N most recent backups are kept. N |
25852
870e361e049c
shelve: make maxbackup doc check-config friendly
Matt Mackall <mpm@selenic.com>
parents:
25799
diff
changeset
|
801 defaults to 10 but can be overridden using the ``shelve.maxbackups`` |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
802 configuration option. |
25774
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
803 |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
804 .. container:: verbose |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
805 |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
806 Timestamp in seconds is used to decide order of backups. More |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
807 than ``maxbackups`` backups are kept, if same timestamp |
4f8c20fe66f0
shelve: keep old backups if timestamp can't decide exact order of them
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25713
diff
changeset
|
808 prevents from deciding exact order of them, for safety. |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
809 """ |
27837
496ca4deddc5
with: use context manager for wlock in unshelve
Bryan O'Sullivan <bryano@fb.com>
parents:
27836
diff
changeset
|
810 with repo.wlock(): |
27287
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
811 return _dounshelve(ui, repo, *shelved, **opts) |
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
812 |
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
813 def _dounshelve(ui, repo, *shelved, **opts): |
28401
2565fe39a76c
shelve: changes getting opts values by get method
liscju <piotr.listkiewicz@gmail.com>
parents:
28378
diff
changeset
|
814 abortf = opts.get('abort') |
2565fe39a76c
shelve: changes getting opts values by get method
liscju <piotr.listkiewicz@gmail.com>
parents:
28378
diff
changeset
|
815 continuef = opts.get('continue') |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
816 if not abortf and not continuef: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
817 cmdutil.checkunfinished(repo) |
31021
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
818 shelved = list(shelved) |
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
819 if opts.get("name"): |
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
820 shelved.append(opts["name"]) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
821 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
822 if abortf or continuef: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
823 if abortf and continuef: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
824 raise error.Abort(_('cannot use both abort and continue')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
825 if shelved: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
826 raise error.Abort(_('cannot combine abort/continue with ' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
827 'naming a shelved change')) |
27021
f2554154509f
unshelve: add support for custom merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27020
diff
changeset
|
828 if abortf and opts.get('tool', False): |
f2554154509f
unshelve: add support for custom merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27020
diff
changeset
|
829 ui.warn(_('tool option will be ignored\n')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
830 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
831 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
832 state = shelvedstate.load(repo) |
30522
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
833 if opts.get('keep') is None: |
7b3136bc7bfd
shelve: make --keep option survive user intervention (issue5431)
Kostia Balytskyi <ikostia@fb.com>
parents:
30457
diff
changeset
|
834 opts['keep'] = state.keep |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25260
diff
changeset
|
835 except IOError as err: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
836 if err.errno != errno.ENOENT: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
837 raise |
28124
983365382465
shelve: suggest the correct tool to continue (not unshelve)
timeless <timeless@mozdev.org>
parents:
27931
diff
changeset
|
838 cmdutil.wrongtooltocontinue(repo, _('unshelve')) |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
839 except error.CorruptedState as err: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
840 ui.debug(str(err) + '\n') |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
841 if continuef: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
842 msg = _('corrupted shelved state file') |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
843 hint = _('please run hg unshelve --abort to abort unshelve ' |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
844 'operation') |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
845 raise error.Abort(msg, hint=hint) |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
846 elif abortf: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
847 msg = _('could not read shelved state file, your working copy ' |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
848 'may be in an unexpected state\nplease update to some ' |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
849 'commit\n') |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
850 ui.warn(msg) |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
851 shelvedstate.clear(repo) |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
852 return |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
853 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
854 if abortf: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
855 return unshelveabort(ui, repo, state, opts) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
856 elif continuef: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
857 return unshelvecontinue(ui, repo, state, opts) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
858 elif len(shelved) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
859 raise error.Abort(_('can only unshelve one change at a time')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
860 elif not shelved: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
861 shelved = listshelves(repo) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
862 if not shelved: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
863 raise error.Abort(_('no shelved changes to apply!')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
864 basename = util.split(shelved[0][1])[1] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
865 ui.status(_("unshelving change '%s'\n") % basename) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
866 else: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
867 basename = shelved[0] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
868 |
30554
1775975dd439
shelve: move patch extension to a string constant
Kostia Balytskyi <ikostia@fb.com>
parents:
30542
diff
changeset
|
869 if not shelvedfile(repo, basename, patchextension).exists(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
870 raise error.Abort(_("shelved change '%s' not found") % basename) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
871 |
27287
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
872 lock = tr = None |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
873 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
874 lock = repo.lock() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
875 tr = repo.transaction('unshelve', report=lambda x: None) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
876 oldtiprev = len(repo) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
877 |
20958
df33c9014430
shelve: repo['.'] is not a wctx but a pctx
Mads Kiilerich <madski@unity3d.com>
parents:
20942
diff
changeset
|
878 pctx = repo['.'] |
df33c9014430
shelve: repo['.'] is not a wctx but a pctx
Mads Kiilerich <madski@unity3d.com>
parents:
20942
diff
changeset
|
879 tmpwctx = pctx |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
880 # The goal is to have a commit structure like so: |
20958
df33c9014430
shelve: repo['.'] is not a wctx but a pctx
Mads Kiilerich <madski@unity3d.com>
parents:
20942
diff
changeset
|
881 # ...-> pctx -> tmpwctx -> shelvectx |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
882 # where tmpwctx is an optional commit with the user's pending changes |
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
883 # and shelvectx is the unshelved changes. Then we merge it all down |
20958
df33c9014430
shelve: repo['.'] is not a wctx but a pctx
Mads Kiilerich <madski@unity3d.com>
parents:
20942
diff
changeset
|
884 # to the original pctx. |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
885 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
886 activebookmark = _backupactivebookmark(repo) |
31462 | 887 overrides = {('ui', 'forcemerge'): opts.get('tool', '')} |
888 with ui.configoverride(overrides, 'unshelve'): | |
889 tmpwctx, addedbefore = _commitworkingcopychanges(ui, repo, opts, | |
890 tmpwctx) | |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
891 repo, shelvectx = _unshelverestorecommit(ui, repo, basename) |
31462 | 892 _checkunshelveuntrackedproblems(ui, repo, shelvectx) |
893 branchtorestore = '' | |
894 if shelvectx.branch() != shelvectx.p1().branch(): | |
895 branchtorestore = shelvectx.branch() | |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
896 |
31462 | 897 shelvectx = _rebaserestoredcommit(ui, repo, opts, tr, oldtiprev, |
898 basename, pctx, tmpwctx, | |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
899 shelvectx, branchtorestore, |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
900 activebookmark) |
31462 | 901 mergefiles(ui, repo, pctx, shelvectx) |
902 restorebranch(ui, repo, branchtorestore) | |
903 _forgetunknownfiles(repo, shelvectx, addedbefore) | |
904 | |
905 shelvedstate.clear(repo) | |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
906 _finishunshelve(repo, oldtiprev, tr, activebookmark) |
31462 | 907 unshelvecleanup(ui, repo, basename, opts) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
908 finally: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
909 if tr: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
910 tr.release() |
27287
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
911 lockmod.release(lock) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
912 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
913 @command('shelve', |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
914 [('A', 'addremove', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
915 _('mark new/missing files as added/removed before shelving')), |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
916 ('u', 'unknown', None, |
27921
158bdc896572
shelve: lowercase flag description
timeless <timeless@mozdev.org>
parents:
27908
diff
changeset
|
917 _('store unknown files in the shelve')), |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
918 ('', 'cleanup', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
919 _('delete all shelved changes')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
920 ('', 'date', '', |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
921 _('shelve with the specified commit date'), _('DATE')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
922 ('d', 'delete', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
923 _('delete the named shelved change(s)')), |
21852
37a5decc6924
shelve: accept '--edit' like other commands creating new changeset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21851
diff
changeset
|
924 ('e', 'edit', False, |
37a5decc6924
shelve: accept '--edit' like other commands creating new changeset
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21851
diff
changeset
|
925 _('invoke editor on commit messages')), |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
926 ('l', 'list', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
927 _('list current shelves')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
928 ('m', 'message', '', |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
929 _('use text as shelve message'), _('TEXT')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
930 ('n', 'name', '', |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
931 _('use the given name for the shelved commit'), _('NAME')), |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
932 ('p', 'patch', None, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
933 _('show patch')), |
24477
325f03de849d
shelve: add interactive mode command line option
Laurent Charignon <lcharignon@fb.com>
parents:
23895
diff
changeset
|
934 ('i', 'interactive', None, |
25260
8fa3e995a375
selve: make 'shelve --interactive' not experimental
Laurent Charignon <lcharignon@fb.com>
parents:
25186
diff
changeset
|
935 _('interactive mode, only works while creating a shelve')), |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
936 ('', 'stat', None, |
20409
0b7a9940a397
shelve: mention walk options in help
Mads Kiilerich <madski@unity3d.com>
parents:
20408
diff
changeset
|
937 _('output diffstat-style summary of changes'))] + commands.walkopts, |
20410
fc5354648224
shelve: mention FILE options in help
Mads Kiilerich <madski@unity3d.com>
parents:
20409
diff
changeset
|
938 _('hg shelve [OPTION]... [FILE]...')) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
939 def shelvecmd(ui, repo, *pats, **opts): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
940 '''save and set aside changes from the working directory |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
941 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
942 Shelving takes files that "hg status" reports as not clean, saves |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
943 the modifications to a bundle (a shelved change), and reverts the |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
944 files so that their state in the working directory becomes clean. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
945 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
946 To restore these changes to the working directory, using "hg |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
947 unshelve"; this will work even if you switch to a different |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
948 commit. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
949 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
950 When no files are specified, "hg shelve" saves all not-clean |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
951 files. If specific files or directories are named, only changes to |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
952 those files are shelved. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
953 |
30419
819f96b82fa4
shelve: add missing space in help text
Mads Kiilerich <madski@unity3d.com>
parents:
29841
diff
changeset
|
954 In bare shelve (when no files are specified, without interactive, |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
955 include and exclude option), shelving remembers information if the |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
956 working directory was on newly created branch, in other words working |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
957 directory was on different branch than its first parent. In this |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
958 situation unshelving restores branch information to the working directory. |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
959 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
960 Each shelved change has a name that makes it easier to find later. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
961 The name of a shelved change defaults to being based on the active |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
962 bookmark, or if there is no active bookmark, the current named |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
963 branch. To specify a different name, use ``--name``. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
964 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
965 To see a list of existing shelved changes, use the ``--list`` |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
966 option. For each shelved change, this will print its name, age, |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
967 and description; use ``--patch`` or ``--stat`` for more details. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
968 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
969 To delete specific shelved changes, use ``--delete``. To delete |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
970 all shelved changes, use ``--cleanup``. |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
971 ''' |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
972 allowables = [ |
25103
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
973 ('addremove', set(['create'])), # 'create' is pseudo action |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
974 ('unknown', set(['create'])), |
25103
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
975 ('cleanup', set(['cleanup'])), |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
976 # ('date', set(['create'])), # ignored for passing '--date "0 0"' in tests |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
977 ('delete', set(['delete'])), |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
978 ('edit', set(['create'])), |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
979 ('list', set(['list'])), |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
980 ('message', set(['create'])), |
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
981 ('name', set(['create'])), |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
982 ('patch', set(['patch', 'list'])), |
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
983 ('stat', set(['stat', 'list'])), |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
984 ] |
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
985 def checkopt(opt): |
28401
2565fe39a76c
shelve: changes getting opts values by get method
liscju <piotr.listkiewicz@gmail.com>
parents:
28378
diff
changeset
|
986 if opts.get(opt): |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
987 for i, allowable in allowables: |
25103
ce00b2e96d09
shelve: refactor allowables to specify sets of valid operations
Tony Tung <tonytung@fb.com>
parents:
25080
diff
changeset
|
988 if opts[i] and opt not in allowable: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
989 raise error.Abort(_("options '--%s' and '--%s' may not be " |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
990 "used together") % (opt, i)) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
991 return True |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
992 if checkopt('cleanup'): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
993 if pats: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
994 raise error.Abort(_("cannot specify names when using '--cleanup'")) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
995 return cleanupcmd(ui, repo) |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
996 elif checkopt('delete'): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
997 return deletecmd(ui, repo, pats) |
21851
aad28ff87788
shelve: refactor option combination check to easily add new ones
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21064
diff
changeset
|
998 elif checkopt('list'): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
999 return listcmd(ui, repo, pats, opts) |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
1000 elif checkopt('patch'): |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
1001 return patchcmds(ui, repo, pats, opts, subcommand='patch') |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
1002 elif checkopt('stat'): |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
1003 return patchcmds(ui, repo, pats, opts, subcommand='stat') |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1004 else: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1005 return createcmd(ui, repo, pats, opts) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1006 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1007 def extsetup(ui): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1008 cmdutil.unfinishedstates.append( |
19963
6f29cc567845
shelve: disallow commit while unshelve is in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19961
diff
changeset
|
1009 [shelvedstate._filename, False, False, |
6f29cc567845
shelve: disallow commit while unshelve is in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19961
diff
changeset
|
1010 _('unshelve already in progress'), |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1011 _("use 'hg unshelve --continue' or 'hg unshelve --abort'")]) |
27694
2dc363274702
shelve: hook afterresolvedstates
timeless <timeless@mozdev.org>
parents:
27651
diff
changeset
|
1012 cmdutil.afterresolvedstates.append( |
2dc363274702
shelve: hook afterresolvedstates
timeless <timeless@mozdev.org>
parents:
27651
diff
changeset
|
1013 [shelvedstate._filename, _('hg unshelve --continue')]) |