Mercurial > hg
annotate mercurial/shelve.py @ 48598:a6f16ec07ed7
stream-clone: add a explicit test for format change during stream clone
They are different kind of requirements, the one which impact the data storage
and are relevant to the files being streamed and the one which does not. For
example some requirements are only relevant to the working copy, like sparse, or
dirstate-v2.
Since they are irrelevant to the content being streamed, they do not prevent the
receiving side to use streaming clone and mercurial skip adverting them over
the wire and, ideally, within the bundle.
In addition, this let the client decide to use whichever format it desire for
the part that does not affect the store itself. So the configuration related to
these format are used as normal when doing a streaming clone.
In practice, the feature was not really tested and is badly broken with bundle-2,
since the requirements are not filtered out from the stream bundle.
So we start with adding simple tests as a good base before the fix and adjust
the feature.
Differential Revision: https://phab.mercurial-scm.org/D12029
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 17 Jan 2022 18:51:47 +0100 |
parents | bcc4820242cf |
children | 6000f5b25c9b |
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 |
36781
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
36607
diff
changeset
|
28 import stat |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28862
diff
changeset
|
29 |
42541
3de4f17f4824
shelve: move shelve extension to core
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42540
diff
changeset
|
30 from .i18n import _ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
31 from .node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
32 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
33 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
34 nullrev, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
35 ) |
42541
3de4f17f4824
shelve: move shelve extension to core
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42540
diff
changeset
|
36 from . import ( |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
37 bookmarks, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
38 bundle2, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
39 changegroup, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
40 cmdutil, |
34097
f7d41b85bbf6
changegroup: replace changegroupsubset with makechangegroup
Durham Goode <durham@fb.com>
parents:
33440
diff
changeset
|
41 discovery, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
42 error, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
43 exchange, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
44 hg, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
45 lock as lockmod, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
46 mdiff, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
47 merge, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44595
diff
changeset
|
48 mergestate as mergestatemod, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
49 patch, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
50 phases, |
35005
aad6b9fdfc75
py3: handle keyword arguments in hgext/shelve.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34496
diff
changeset
|
51 pycompat, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
52 repair, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
53 scmutil, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
54 templatefilters, |
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
55 util, |
31244
636f55b9ba23
vfs: use 'vfs' module directly in 'hgext.shelve'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31096
diff
changeset
|
56 vfs as vfsmod, |
28378
96a7368a79b6
shelve: use absolute_import
timeless <timeless@mozdev.org>
parents:
28124
diff
changeset
|
57 ) |
42541
3de4f17f4824
shelve: move shelve extension to core
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42540
diff
changeset
|
58 from .utils import ( |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
59 dateutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
60 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
61 ) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
62 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 backupdir = b'shelve-backup' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
64 shelvedir = b'shelved' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
65 shelvefileextensions = [b'hg', b'patch', b'shelve'] |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
66 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
67 # 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
|
68 # generic user for all shelve operations |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
69 shelveuser = b'shelve@localhost' |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
70 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
71 |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
72 class ShelfDir(object): |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
73 def __init__(self, repo, for_backups=False): |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
74 if for_backups: |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
75 self.vfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
76 else: |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
77 self.vfs = vfsmod.vfs(repo.vfs.join(shelvedir)) |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
78 |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
79 def get(self, name): |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
80 return Shelf(self.vfs, name) |
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
81 |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
82 def listshelves(self): |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
83 """return all shelves in repo as list of (time, name)""" |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
84 try: |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
85 names = self.vfs.listdir() |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
86 except OSError as err: |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
87 if err.errno != errno.ENOENT: |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
88 raise |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
89 return [] |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
90 info = [] |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
91 seen = set() |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
92 for filename in names: |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
93 name = filename.rsplit(b'.', 1)[0] |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
94 if name in seen: |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
95 continue |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
96 seen.add(name) |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
97 shelf = self.get(name) |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
98 if not shelf.exists(): |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
99 continue |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
100 mtime = shelf.mtime() |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
101 info.append((mtime, name)) |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
102 return sorted(info, reverse=True) |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
103 |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
104 |
46273
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
105 class Shelf(object): |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
106 """Represents a shelf, including possibly multiple files storing it. |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
107 |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
108 Old shelves will have a .patch and a .hg file. Newer shelves will |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
109 also have a .shelve file. This class abstracts away some of the |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
110 differences and lets you work with the shelf as a whole. |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
111 """ |
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
112 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
113 def __init__(self, vfs, name): |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
114 self.vfs = vfs |
46273
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
115 self.name = name |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
116 |
46273
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
117 def exists(self): |
46294
d3b226b6c8c6
shelve: inline ".patch" constant now that it's only used in the Shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46293
diff
changeset
|
118 return self.vfs.exists(self.name + b'.patch') and self.vfs.exists( |
d3b226b6c8c6
shelve: inline ".patch" constant now that it's only used in the Shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46293
diff
changeset
|
119 self.name + b'.hg' |
d3b226b6c8c6
shelve: inline ".patch" constant now that it's only used in the Shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46293
diff
changeset
|
120 ) |
46273
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
121 |
46280
7e300d297547
shelve: move method for getting stat (mtime) to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46279
diff
changeset
|
122 def mtime(self): |
46294
d3b226b6c8c6
shelve: inline ".patch" constant now that it's only used in the Shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46293
diff
changeset
|
123 return self.vfs.stat(self.name + b'.patch')[stat.ST_MTIME] |
46280
7e300d297547
shelve: move method for getting stat (mtime) to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46279
diff
changeset
|
124 |
46274
a344ec05b99c
shelve: move method for writing .shelve to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46273
diff
changeset
|
125 def writeinfo(self, info): |
a344ec05b99c
shelve: move method for writing .shelve to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46273
diff
changeset
|
126 scmutil.simplekeyvaluefile(self.vfs, self.name + b'.shelve').write(info) |
a344ec05b99c
shelve: move method for writing .shelve to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46273
diff
changeset
|
127 |
46286
3b08f56c8a11
shelve: teach new shelf class to check if .shelve file exists
Martin von Zweigbergk <martinvonz@google.com>
parents:
46285
diff
changeset
|
128 def hasinfo(self): |
3b08f56c8a11
shelve: teach new shelf class to check if .shelve file exists
Martin von Zweigbergk <martinvonz@google.com>
parents:
46285
diff
changeset
|
129 return self.vfs.exists(self.name + b'.shelve') |
3b08f56c8a11
shelve: teach new shelf class to check if .shelve file exists
Martin von Zweigbergk <martinvonz@google.com>
parents:
46285
diff
changeset
|
130 |
46275
157305bf859f
shelve: move method for reading .shelve file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46274
diff
changeset
|
131 def readinfo(self): |
157305bf859f
shelve: move method for reading .shelve file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46274
diff
changeset
|
132 return scmutil.simplekeyvaluefile( |
157305bf859f
shelve: move method for reading .shelve file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46274
diff
changeset
|
133 self.vfs, self.name + b'.shelve' |
157305bf859f
shelve: move method for reading .shelve file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46274
diff
changeset
|
134 ).read() |
157305bf859f
shelve: move method for reading .shelve file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46274
diff
changeset
|
135 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
136 def writebundle(self, repo, bases, node): |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
137 cgversion = changegroup.safeversion(repo) |
46276
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
138 if cgversion == b'01': |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
139 btype = b'HG10BZ' |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
140 compression = None |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
141 else: |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
142 btype = b'HG20' |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
143 compression = b'BZ' |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
144 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
145 repo = repo.unfiltered() |
46276
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
146 |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
147 outgoing = discovery.outgoing( |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
148 repo, missingroots=bases, ancestorsof=[node] |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
149 ) |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
150 cg = changegroup.makechangegroup(repo, outgoing, cgversion, b'shelve') |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
151 |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
152 bundle_filename = self.vfs.join(self.name + b'.hg') |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
153 bundle2.writebundle( |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
154 repo.ui, |
46276
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
155 cg, |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
156 bundle_filename, |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
157 btype, |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
158 self.vfs, |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
159 compression=compression, |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
160 ) |
eb7b2929ae49
shelve: move method for writing bundle to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46275
diff
changeset
|
161 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
162 def applybundle(self, repo, tr): |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
163 filename = self.name + b'.hg' |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
164 fp = self.vfs(filename) |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
165 try: |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
166 targetphase = phases.internal |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
167 if not phases.supportinternal(repo): |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
168 targetphase = phases.secret |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
169 gen = exchange.readbundle(repo.ui, fp, filename, self.vfs) |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
170 pretip = repo[b'tip'] |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
171 bundle2.applybundle( |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
172 repo, |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
173 gen, |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
174 tr, |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
175 source=b'unshelve', |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
176 url=b'bundle:' + self.vfs.join(filename), |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
177 targetphase=targetphase, |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
178 ) |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
179 shelvectx = repo[b'tip'] |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
180 if pretip == shelvectx: |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
181 shelverev = tr.changes[b'revduplicates'][-1] |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
182 shelvectx = repo[shelverev] |
46277
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
183 return shelvectx |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
184 finally: |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
185 fp.close() |
ed2f2150d57c
shelve: move method for reading .hg to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46276
diff
changeset
|
186 |
46278
58ca94869287
shelve: move function for opening .patch file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46277
diff
changeset
|
187 def open_patch(self, mode=b'rb'): |
58ca94869287
shelve: move function for opening .patch file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46277
diff
changeset
|
188 return self.vfs(self.name + b'.patch', mode) |
58ca94869287
shelve: move function for opening .patch file to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46277
diff
changeset
|
189 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
190 def _backupfilename(self, backupvfs, filename): |
46285
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
191 def gennames(base): |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
192 yield base |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
193 base, ext = base.rsplit(b'.', 1) |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
194 for i in itertools.count(1): |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
195 yield b'%s-%d.%s' % (base, i, ext) |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
196 |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
197 for n in gennames(filename): |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
198 if not backupvfs.exists(n): |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
199 return backupvfs.join(n) |
46285
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
200 |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
201 def movetobackup(self, backupvfs): |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
202 if not backupvfs.isdir(): |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
203 backupvfs.makedir() |
46285
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
204 for suffix in shelvefileextensions: |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
205 filename = self.name + b'.' + suffix |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
206 if self.vfs.exists(filename): |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
207 util.rename( |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
208 self.vfs.join(filename), |
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
209 self._backupfilename(backupvfs, filename), |
46285
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
210 ) |
e79f8ae0901b
shelve: move method for creating backup to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46284
diff
changeset
|
211 |
46295
f8c5e6ecd008
shelve: add a method for deleting shelf to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46294
diff
changeset
|
212 def delete(self): |
f8c5e6ecd008
shelve: add a method for deleting shelf to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46294
diff
changeset
|
213 for ext in shelvefileextensions: |
f8c5e6ecd008
shelve: add a method for deleting shelf to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46294
diff
changeset
|
214 self.vfs.tryunlink(self.name + b'.' + ext) |
f8c5e6ecd008
shelve: add a method for deleting shelf to new shelf class
Martin von Zweigbergk <martinvonz@google.com>
parents:
46294
diff
changeset
|
215 |
46273
efc71bb71682
shelve: introduce class representing a shelf
Martin von Zweigbergk <martinvonz@google.com>
parents:
46272
diff
changeset
|
216 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
217 class shelvedstate(object): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
218 """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
|
219 |
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
220 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
|
221 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
|
222 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
223 |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
224 _version = 2 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 _filename = b'shelvedstate' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 _keep = b'keep' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
227 _nokeep = b'nokeep' |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
228 # colon is essential to differentiate from a real bookmark name |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 _noactivebook = b':no-active-bookmark' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
230 _interactive = b'interactive' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
231 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
232 @classmethod |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
233 def _verifyandtransform(cls, d): |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
234 """Some basic shelvestate syntactic verification and transformation""" |
19904
5b327880a660
shelve: drop pickle usage
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19887
diff
changeset
|
235 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
236 d[b'originalwctx'] = bin(d[b'originalwctx']) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
237 d[b'pendingctx'] = bin(d[b'pendingctx']) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
238 d[b'parents'] = [bin(h) for h in d[b'parents'].split(b' ')] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 d[b'nodestoremove'] = [ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
240 bin(h) for h in d[b'nodestoremove'].split(b' ') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
241 ] |
32284
16d424b97125
shelve: refactor shelvestate loading
Kostia Balytskyi <ikostia@fb.com>
parents:
31888
diff
changeset
|
242 except (ValueError, TypeError, KeyError) as err: |
46640
e571fec5b606
shelve: fix conversion of exceptions to strings flagged by pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46361
diff
changeset
|
243 raise error.CorruptedState(stringutil.forcebytestr(err)) |
32284
16d424b97125
shelve: refactor shelvestate loading
Kostia Balytskyi <ikostia@fb.com>
parents:
31888
diff
changeset
|
244 |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
245 @classmethod |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
246 def _getversion(cls, repo): |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
247 """Read version information from shelvestate file""" |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
248 fp = repo.vfs(cls._filename) |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
249 try: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
250 version = int(fp.readline().strip()) |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
251 except ValueError as err: |
46640
e571fec5b606
shelve: fix conversion of exceptions to strings flagged by pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
46361
diff
changeset
|
252 raise error.CorruptedState(stringutil.forcebytestr(err)) |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
253 finally: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
254 fp.close() |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
255 return version |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
256 |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
257 @classmethod |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
258 def _readold(cls, repo): |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
259 """Read the old position-based version of a shelvestate file""" |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
260 # Order is important, because old shelvestate file uses it |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
261 # to detemine values of fields (i.g. name is on the second line, |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
262 # originalwctx is on the third and so forth). Please do not change. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
263 keys = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 b'version', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
265 b'name', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 b'originalwctx', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 b'pendingctx', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 b'parents', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
269 b'nodestoremove', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
270 b'branchtorestore', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 b'keep', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 b'activebook', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
273 ] |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
274 # this is executed only seldomly, so it is not a big deal |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
275 # that we open this file twice |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
276 fp = repo.vfs(cls._filename) |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
277 d = {} |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
278 try: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
279 for key in keys: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
280 d[key] = fp.readline().strip() |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
281 finally: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
282 fp.close() |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
283 return d |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
284 |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
285 @classmethod |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
286 def load(cls, repo): |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
287 version = cls._getversion(repo) |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
288 if version < cls._version: |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
289 d = cls._readold(repo) |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
290 elif version == cls._version: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
291 d = scmutil.simplekeyvaluefile(repo.vfs, cls._filename).read( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
292 firstlinenonkeyval=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
293 ) |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
294 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
295 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
296 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
297 b'this version of shelve is incompatible ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
298 b'with the version used in this repo' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
299 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
300 ) |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
301 |
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
302 cls._verifyandtransform(d) |
29536
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
303 try: |
b17a6e3cd2ac
shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents:
29270
diff
changeset
|
304 obj = cls() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 obj.name = d[b'name'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
306 obj.wctx = repo[d[b'originalwctx']] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 obj.pendingctx = repo[d[b'pendingctx']] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 obj.parents = d[b'parents'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
309 obj.nodestoremove = d[b'nodestoremove'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
310 obj.branchtorestore = d.get(b'branchtorestore', b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
311 obj.keep = d.get(b'keep') == cls._keep |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
312 obj.activebookmark = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
313 if d.get(b'activebook', b'') != cls._noactivebook: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
314 obj.activebookmark = d.get(b'activebook', b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 obj.interactive = d.get(b'interactive') == cls._interactive |
32284
16d424b97125
shelve: refactor shelvestate loading
Kostia Balytskyi <ikostia@fb.com>
parents:
31888
diff
changeset
|
316 except (error.RepoLookupError, KeyError) as err: |
36496
7af7443877da
py3: replace str() with it's bytes equivalent in hgext/shelve.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36185
diff
changeset
|
317 raise error.CorruptedState(pycompat.bytestr(err)) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
318 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
319 return obj |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
320 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
321 @classmethod |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
322 def save( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
323 cls, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
324 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
325 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
326 originalwctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
327 pendingctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
328 nodestoremove, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
329 branchtorestore, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
330 keep=False, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 activebook=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
332 interactive=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
333 ): |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
334 info = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
335 b"name": name, |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
336 b"originalwctx": hex(originalwctx.node()), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
337 b"pendingctx": hex(pendingctx.node()), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
338 b"parents": b' '.join([hex(p) for p in repo.dirstate.parents()]), |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
339 b"nodestoremove": b' '.join([hex(n) for n in nodestoremove]), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 b"branchtorestore": branchtorestore, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
341 b"keep": cls._keep if keep else cls._nokeep, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 b"activebook": activebook or cls._noactivebook, |
32285
fe3105e6e051
shelve: make shelvestate use simplekeyvaluefile
Kostia Balytskyi <ikostia@fb.com>
parents:
32284
diff
changeset
|
343 } |
42662
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
344 if interactive: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 info[b'interactive'] = cls._interactive |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
346 scmutil.simplekeyvaluefile(repo.vfs, cls._filename).write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 info, firstline=(b"%d" % cls._version) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
348 ) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
349 |
19908
07ee5c8867ca
shelve: use the class constant in the clear method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19904
diff
changeset
|
350 @classmethod |
07ee5c8867ca
shelve: use the class constant in the clear method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19904
diff
changeset
|
351 def clear(cls, repo): |
31311
f59b6cf663a9
vfs: use repo.vfs.unlinkpath
Mads Kiilerich <mads@kiilerich.com>
parents:
31244
diff
changeset
|
352 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
|
353 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
354 |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
355 def cleanupoldbackups(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 maxbackups = repo.ui.configint(b'shelve', b'maxbackups') |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
357 backup_dir = ShelfDir(repo, for_backups=True) |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
358 hgfiles = backup_dir.listshelves() |
40029
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39889
diff
changeset
|
359 if maxbackups > 0 and maxbackups < len(hgfiles): |
46293
9cdef4c41c94
shelve: use listshelves() in cleanupoldbackups()
Martin von Zweigbergk <martinvonz@google.com>
parents:
46292
diff
changeset
|
360 bordermtime = hgfiles[maxbackups - 1][0] |
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
|
361 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
|
362 bordermtime = None |
46293
9cdef4c41c94
shelve: use listshelves() in cleanupoldbackups()
Martin von Zweigbergk <martinvonz@google.com>
parents:
46292
diff
changeset
|
363 for mtime, name in 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
|
364 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
|
365 # 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
|
366 continue |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
367 backup_dir.get(name).delete() |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
368 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
369 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
370 def _backupactivebookmark(repo): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
371 activebookmark = repo._activebookmark |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
372 if activebookmark: |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
373 bookmarks.deactivate(repo) |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
374 return activebookmark |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
375 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
376 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
377 def _restoreactivebookmark(repo, mark): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
378 if mark: |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
379 bookmarks.activate(repo, mark) |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
380 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
381 |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
382 def _aborttransaction(repo, tr): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45860
diff
changeset
|
383 """Abort current transaction for shelve/unshelve, but keep dirstate""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 dirstatebackupname = b'dirstate.shelve' |
38869
ad24b581e4d9
narrow: call narrowspec.{save,restore,clear}backup directly
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
385 repo.dirstate.savebackup(tr, dirstatebackupname) |
29270
48b38b16a8f8
shelve: use backup functions instead of manually copying dirstate
Mateusz Kwapich <mitrandir@fb.com>
parents:
29205
diff
changeset
|
386 tr.abort() |
38869
ad24b581e4d9
narrow: call narrowspec.{save,restore,clear}backup directly
Martin von Zweigbergk <martinvonz@google.com>
parents:
38783
diff
changeset
|
387 repo.dirstate.restorebackup(None, dirstatebackupname) |
26522
10f14bb22950
shelve: add utility to abort current transaction but keep dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26520
diff
changeset
|
388 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
389 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
390 def getshelvename(repo, parent, opts): |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
391 """Decide on the name this shelve is going to have""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
392 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
393 def gennames(): |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
394 yield label |
32968
4107eb8a5648
shelve: allow unlimited shelved changes per name
Jun Wu <quark@fb.com>
parents:
32930
diff
changeset
|
395 for i in itertools.count(1): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
396 yield b'%s-%02d' % (label, i) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
397 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 name = opts.get(b'name') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 label = repo._activebookmark or parent.branch() or b'default' |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
400 # slashes aren't allowed in filenames, therefore we rename it |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
401 label = label.replace(b'/', b'_') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
402 label = label.replace(b'\\', b'_') |
30671
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
403 # filenames must not start with '.' as it should not be hidden |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
404 if label.startswith(b'.'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
405 label = label.replace(b'.', b'_', 1) |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
406 |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
407 if name: |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
408 if ShelfDir(repo).get(name).exists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
409 e = _(b"a shelved change named '%s' already exists") % name |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
410 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
|
411 |
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
412 # ensure we are not creating a subdirectory or a hidden file |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
413 if b'/' in name or b'\\' in name: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
414 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
415 _(b'shelved change names can not contain slashes') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
417 if name.startswith(b'.'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 raise error.Abort(_(b"shelved change names can not start with '.'")) |
30671
64a75655b988
shelve: choose a legal shelve name when no name is passed (issue5112)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30554
diff
changeset
|
419 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
420 else: |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
421 shelf_dir = ShelfDir(repo) |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
422 for n in gennames(): |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
423 if not shelf_dir.get(n).exists(): |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
424 name = n |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
425 break |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
426 |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
427 return name |
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
428 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
429 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
430 def mutableancestors(ctx): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
431 """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
|
432 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
433 Much faster than the revset ancestors(ctx) & draft()""" |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
434 seen = {nullrev} |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
435 visit = collections.deque() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
436 visit.append(ctx) |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
437 while visit: |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
438 ctx = visit.popleft() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
439 yield ctx.node() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
440 for parent in ctx.parents(): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
441 rev = parent.rev() |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
442 if rev not in seen: |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
443 seen.add(rev) |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
444 if parent.mutable(): |
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
445 visit.append(parent) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
446 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
447 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
448 def getcommitfunc(extra, interactive, editor=False): |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
449 def commitfunc(ui, repo, message, match, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
450 hasmq = util.safehasattr(repo, b'mq') |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
451 if hasmq: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
452 saved, repo.mq.checkapplied = repo.mq.checkapplied, False |
39519
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
453 |
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
454 targetphase = phases.internal |
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
455 if not phases.supportinternal(repo): |
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
456 targetphase = phases.secret |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
457 overrides = {(b'phases', b'new-commit'): targetphase} |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
458 try: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
459 editor_ = False |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
460 if editor: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
461 editor_ = cmdutil.getcommiteditor( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 editform=b'shelve.shelve', **pycompat.strkwargs(opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
463 ) |
31462 | 464 with repo.ui.configoverride(overrides): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
465 return repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
466 message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
467 shelveuser, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
468 opts.get(b'date'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
469 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
470 editor=editor_, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
471 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
472 ) |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
473 finally: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
474 if hasmq: |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
475 repo.mq.checkapplied = saved |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
476 |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
477 def interactivecommitfunc(ui, repo, *pats, **opts): |
35005
aad6b9fdfc75
py3: handle keyword arguments in hgext/shelve.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34496
diff
changeset
|
478 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
479 match = scmutil.match(repo[b'.'], pats, {}) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 message = opts[b'message'] |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
481 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
|
482 |
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
483 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
|
484 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
485 |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
486 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
|
487 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
|
488 if stat.deleted: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
489 ui.status( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43085
diff
changeset
|
490 _(b"nothing changed (%d missing files, see 'hg status')\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
491 % len(stat.deleted) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
492 ) |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
493 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
494 ui.status(_(b"nothing changed\n")) |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
495 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
496 |
42012
9b78bbb76111
shelve: refactor _shelvecreatedcommit's match object into calling site
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42011
diff
changeset
|
497 def _shelvecreatedcommit(repo, node, name, match): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
498 info = {b'node': hex(node)} |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
499 shelf = ShelfDir(repo).get(name) |
46287
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
500 shelf.writeinfo(info) |
30383
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
501 bases = list(mutableancestors(repo[node])) |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
502 shelf.writebundle(repo, bases, node) |
46287
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
503 with shelf.open_patch(b'wb') as fp: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
504 cmdutil.exportfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
505 repo, [node], fp, opts=mdiff.diffopts(git=True), match=match |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
506 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
507 |
30383
455f7856db20
shelve: move actual created commit shelving to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30382
diff
changeset
|
508 |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
509 def _includeunknownfiles(repo, pats, opts, extra): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
510 s = repo.status(match=scmutil.match(repo[None], pats, opts), unknown=True) |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
511 if s.unknown: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
512 extra[b'shelve_unknown'] = b'\0'.join(s.unknown) |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
513 repo[None].add(s.unknown) |
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
514 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
515 |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
516 def _finishshelve(repo, tr): |
39744
52dfa1eb0ad4
shelve: no longer strip internal commit when using internal phase
Boris Feld <boris.feld@octobus.net>
parents:
39601
diff
changeset
|
517 if phases.supportinternal(repo): |
52dfa1eb0ad4
shelve: no longer strip internal commit when using internal phase
Boris Feld <boris.feld@octobus.net>
parents:
39601
diff
changeset
|
518 tr.close() |
52dfa1eb0ad4
shelve: no longer strip internal commit when using internal phase
Boris Feld <boris.feld@octobus.net>
parents:
39601
diff
changeset
|
519 else: |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
520 _aborttransaction(repo, tr) |
30385
b573d7ca31c4
shelve: move shelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30384
diff
changeset
|
521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
522 |
39342
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
523 def createcmd(ui, repo, pats, opts): |
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
524 """subcommand that creates a new shelve""" |
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
525 with repo.wlock(): |
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
526 cmdutil.checkunfinished(repo) |
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
527 return _docreatecmd(ui, repo, pats, opts) |
d52fa7ddd1ac
shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net>
parents:
38869
diff
changeset
|
528 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
529 |
30380
84e8cbdbdee4
shelve: move mutableancestors to not be a closure
Kostia Balytskyi <ikostia@fb.com>
parents:
30379
diff
changeset
|
530 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
|
531 wctx = repo[None] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
532 parents = wctx.parents() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
533 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
|
534 origbranch = wctx.branch() |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
535 |
46843
728d89f6f9b1
refactor: prefer checks against nullrev over nullid
Joerg Sonnenberger <joerg@bec.de>
parents:
46640
diff
changeset
|
536 if parent.rev() != nullrev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
537 desc = b"changes to: %s" % parent.description().split(b'\n', 1)[0] |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
538 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 desc = b'(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
|
540 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
541 if not opts.get(b'message'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
542 opts[b'message'] = desc |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
543 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
544 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
|
545 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
546 lock = repo.lock() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
547 |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19943
diff
changeset
|
548 # 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
|
549 # pull races. ensure we don't print the abort message to stderr. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 tr = repo.transaction(b'shelve', report=lambda x: None) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
551 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
552 interactive = opts.get(b'interactive', False) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 includeunknown = opts.get(b'unknown', False) and not opts.get( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 b'addremove', False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
555 ) |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
556 |
30379
684068d24658
shelve: move shelve name generation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30378
diff
changeset
|
557 name = getshelvename(repo, parent, opts) |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
558 activebookmark = _backupactivebookmark(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 extra = {b'internal': b'shelve'} |
27908
d73a5ab18015
shelve: permit shelves to contain unknown files
Simon Farnsworth <simonfar@fb.com>
parents:
27888
diff
changeset
|
560 if includeunknown: |
30384
21a75b63c10e
shelve: move unknown files handling to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30383
diff
changeset
|
561 _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
|
562 |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
563 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
|
564 # 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
|
565 # at bundled commit |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 repo.dirstate.setbranch(repo[b'.'].branch()) |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
567 |
30381
caba61934721
shelve: move commitfunc creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30380
diff
changeset
|
568 commitfunc = getcommitfunc(extra, interactive, editor=True) |
24478
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
569 if not interactive: |
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
570 node = cmdutil.commit(ui, repo, commitfunc, pats, opts) |
95cbc77c0cad
shelve: add interactive mode
Laurent Charignon <lcharignon@fb.com>
parents:
24477
diff
changeset
|
571 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
572 node = cmdutil.dorecord( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
573 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
574 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
575 commitfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
576 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
577 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
578 cmdutil.recordfilter, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
579 *pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
580 **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
581 ) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
582 if not node: |
30382
dedf0915ca5b
shelve: move 'nothing changed' messaging to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30381
diff
changeset
|
583 _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
|
584 return 1 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
585 |
42012
9b78bbb76111
shelve: refactor _shelvecreatedcommit's match object into calling site
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42011
diff
changeset
|
586 # Create a matcher so that prefetch doesn't attempt to fetch |
42013
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
587 # the entire repository pointlessly, and as an optimisation |
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
588 # for movedirstate, if needed. |
42012
9b78bbb76111
shelve: refactor _shelvecreatedcommit's match object into calling site
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42011
diff
changeset
|
589 match = scmutil.matchfiles(repo, repo[node].files()) |
9b78bbb76111
shelve: refactor _shelvecreatedcommit's match object into calling site
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42011
diff
changeset
|
590 _shelvecreatedcommit(repo, node, name, match) |
19874
5836edcbdc2e
shelve: copy bookmarks and restore them after a commit
David Soria Parra <dsp@experimentalworks.net>
parents:
19856
diff
changeset
|
591 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
592 ui.status(_(b'shelved as %s\n') % name) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
593 if opts[b'keep']: |
42013
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
594 with repo.dirstate.parentchange(): |
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
595 scmutil.movedirstate(repo, parent, match) |
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
596 else: |
50d5e64ec561
shelve: do not update when keeping changes, just move the dirstate
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
42012
diff
changeset
|
597 hg.update(repo, parent.node()) |
45860
073bb7563931
shelve: clear merge state after partial shelve
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
598 ms = mergestatemod.mergestate.read(repo) |
073bb7563931
shelve: clear merge state after partial shelve
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
599 if not ms.unresolvedcount(): |
073bb7563931
shelve: clear merge state after partial shelve
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
600 ms.reset() |
073bb7563931
shelve: clear merge state after partial shelve
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
601 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 if origbranch != repo[b'.'].branch() and not _isbareshelve(pats, opts): |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
603 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
|
604 |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
605 _finishshelve(repo, tr) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
606 finally: |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
607 _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
|
608 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
|
609 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
610 |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
611 def _isbareshelve(pats, opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
612 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
613 not pats |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
614 and not opts.get(b'interactive', False) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 and not opts.get(b'include', False) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
616 and not opts.get(b'exclude', False) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
617 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
618 |
28571
3f0e25e89e28
shelve: preserve newly created branch on non-bare shelve in wctx (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28401
diff
changeset
|
619 |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
620 def _iswctxonnewbranch(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
621 return repo[None].branch() != repo[b'.'].branch() |
28572
43c204ddf333
shelve: make non bare shelve not saving branch information in bundle
liscju <piotr.listkiewicz@gmail.com>
parents:
28571
diff
changeset
|
622 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
623 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
624 def cleanupcmd(ui, repo): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
625 """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
|
626 |
27835
c448d7e00bf9
with: use context manager for wlock in shelve cleanupcmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27834
diff
changeset
|
627 with repo.wlock(): |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
628 shelf_dir = ShelfDir(repo) |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
629 backupvfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
630 for _mtime, name in shelf_dir.listshelves(): |
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
631 shelf_dir.get(name).movetobackup(backupvfs) |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
632 cleanupoldbackups(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
633 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
634 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
635 def deletecmd(ui, repo, pats): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
636 """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
|
637 if not pats: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
638 raise error.InputError(_(b'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
|
639 with repo.wlock(): |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
640 backupvfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
43719
cb23d9e3e21f
shelve: fix a missing variable in the exception handler for delete
Matt Harbison <matt_harbison@yahoo.com>
parents:
43117
diff
changeset
|
641 for name in pats: |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
642 shelf = ShelfDir(repo).get(name) |
46287
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
643 if not shelf.exists(): |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
644 raise error.InputError( |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
645 _(b"shelved change '%s' not found") % name |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
646 ) |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
647 shelf.movetobackup(backupvfs) |
27836
1c2408c28aff
with: use context manager for wlock in shelve deletecmd
Bryan O'Sullivan <bryano@fb.com>
parents:
27835
diff
changeset
|
648 cleanupoldbackups(repo) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
649 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
650 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
651 def listcmd(ui, repo, pats, opts): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
652 """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
|
653 pats = set(pats) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
654 width = 80 |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
655 if not ui.plain(): |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
656 width = ui.termwidth() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
657 namelabel = b'shelve.newest' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
658 ui.pager(b'shelve') |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
659 shelf_dir = ShelfDir(repo) |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
660 for mtime, name in shelf_dir.listshelves(): |
46281
a34607b6d320
shelve: make listshelves() return shelf names instead of filenames
Martin von Zweigbergk <martinvonz@google.com>
parents:
46280
diff
changeset
|
661 if pats and name not in pats: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
662 continue |
46281
a34607b6d320
shelve: make listshelves() return shelf names instead of filenames
Martin von Zweigbergk <martinvonz@google.com>
parents:
46280
diff
changeset
|
663 ui.write(name, label=namelabel) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
664 namelabel = b'shelve.name' |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
665 if ui.quiet: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
666 ui.write(b'\n') |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
667 continue |
46281
a34607b6d320
shelve: make listshelves() return shelf names instead of filenames
Martin von Zweigbergk <martinvonz@google.com>
parents:
46280
diff
changeset
|
668 ui.write(b' ' * (16 - len(name))) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
669 used = 16 |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36496
diff
changeset
|
670 date = dateutil.makedate(mtime) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
671 age = b'(%s)' % templatefilters.age(date, abbrev=True) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
672 ui.write(age, label=b'shelve.age') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
673 ui.write(b' ' * (12 - len(age))) |
19855
a3b285882724
shelve: new output format for shelve listings
David Soria Parra <dsp@experimentalworks.net>
parents:
19854
diff
changeset
|
674 used += 12 |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
675 with shelf_dir.get(name).open_patch() as fp: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
676 while True: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
677 line = fp.readline() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
678 if not line: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
679 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
680 if not line.startswith(b'#'): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
681 desc = line.rstrip() |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
682 if ui.formatted(): |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36781
diff
changeset
|
683 desc = stringutil.ellipsis(desc, width - used) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
684 ui.write(desc) |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
685 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
686 ui.write(b'\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
687 if not (opts[b'patch'] or opts[b'stat']): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
688 continue |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
689 difflines = fp.readlines() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
690 if opts[b'patch']: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
691 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
|
692 ui.write(chunk, label=label) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
693 if opts[b'stat']: |
30407
e1677cc29da6
patch: remove unused git parameter from patch.diffstat()
Henning Schild <henning@hennsch.de>
parents:
30385
diff
changeset
|
694 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
|
695 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
|
696 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
697 |
38715
905b66681004
shelve: pick the most recent shelve if none specified for --patch/--stat
Danny Hooper <hooper@google.com>
parents:
38714
diff
changeset
|
698 def patchcmds(ui, repo, pats, opts): |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
699 """subcommand that displays shelves""" |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
700 shelf_dir = ShelfDir(repo) |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
701 if len(pats) == 0: |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
702 shelves = shelf_dir.listshelves() |
38715
905b66681004
shelve: pick the most recent shelve if none specified for --patch/--stat
Danny Hooper <hooper@google.com>
parents:
38714
diff
changeset
|
703 if not shelves: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
704 raise error.Abort(_(b"there are no shelves to show")) |
38715
905b66681004
shelve: pick the most recent shelve if none specified for --patch/--stat
Danny Hooper <hooper@google.com>
parents:
38714
diff
changeset
|
705 mtime, name = shelves[0] |
46281
a34607b6d320
shelve: make listshelves() return shelf names instead of filenames
Martin von Zweigbergk <martinvonz@google.com>
parents:
46280
diff
changeset
|
706 pats = [name] |
25104
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
707 |
30823
806a830e6612
shelve: allow multiple shelves with --patch and --stat
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30671
diff
changeset
|
708 for shelfname in pats: |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
709 if not shelf_dir.get(shelfname).exists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
710 raise error.Abort(_(b"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
|
711 |
d6453f6fbdba
shelve: allow --patch and --stat without --list for a single shelf
Tony Tung <tonytung@fb.com>
parents:
25103
diff
changeset
|
712 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
|
713 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
714 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
715 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
|
716 """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
|
717 if state.parents != repo.dirstate.parents(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
718 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43085
diff
changeset
|
719 _(b'working directory parents do not match unshelve state') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
720 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
721 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
722 |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
723 def _loadshelvedstate(ui, repo, opts): |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
724 try: |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
725 state = shelvedstate.load(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
726 if opts.get(b'keep') is None: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
727 opts[b'keep'] = state.keep |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
728 except IOError as err: |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
729 if err.errno != errno.ENOENT: |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
730 raise |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
731 cmdutil.wrongtooltocontinue(repo, _(b'unshelve')) |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
732 except error.CorruptedState as err: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
733 ui.debug(pycompat.bytestr(err) + b'\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
734 if opts.get(b'continue'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
735 msg = _(b'corrupted shelved state file') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
736 hint = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
737 b'please run hg unshelve --abort to abort unshelve ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
738 b'operation' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
739 ) |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
740 raise error.Abort(msg, hint=hint) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
741 elif opts.get(b'abort'): |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
742 shelvedstate.clear(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
743 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
744 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
745 b'could not read shelved state file, your ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
746 b'working copy may be in an unexpected state\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
747 b'please update to some commit\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
748 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
749 ) |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
750 return state |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
751 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
752 |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
753 def unshelveabort(ui, repo, state): |
19909
df54786a3203
shelve: add minimal documentation to all functions
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19908
diff
changeset
|
754 """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
|
755 with repo.lock(): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
756 try: |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
757 checkparents(repo, state) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
758 |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44212
diff
changeset
|
759 merge.clean_update(state.pendingctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
760 if state.activebookmark and state.activebookmark in repo._bookmarks: |
38462
61e4cf1be5b2
shelve: directly handle the abort process
Boris Feld <boris.feld@octobus.net>
parents:
37967
diff
changeset
|
761 bookmarks.activate(repo, state.activebookmark) |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
762 mergefiles(ui, repo, state.wctx, state.pendingctx) |
39744
52dfa1eb0ad4
shelve: no longer strip internal commit when using internal phase
Boris Feld <boris.feld@octobus.net>
parents:
39601
diff
changeset
|
763 if not phases.supportinternal(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
764 repair.strip( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
765 ui, repo, state.nodestoremove, backup=False, topic=b'shelve' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
766 ) |
27841
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
767 finally: |
83995fdde225
with: use context manager in unshelveabort
Bryan O'Sullivan <bryano@fb.com>
parents:
27838
diff
changeset
|
768 shelvedstate.clear(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
769 ui.warn(_(b"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
|
770 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
771 |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
772 def hgabortunshelve(ui, repo): |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
773 """logic to abort unshelve using 'hg abort""" |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
774 with repo.wlock(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 state = _loadshelvedstate(ui, repo, {b'abort': True}) |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
776 return unshelveabort(ui, repo, state) |
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
777 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
778 |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
779 def mergefiles(ui, repo, wctx, shelvectx): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
780 """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
|
781 dirstate.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
782 with ui.configoverride({(b'ui', b'quiet'): True}): |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
783 hg.update(repo, wctx.node()) |
45375
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45151
diff
changeset
|
784 cmdutil.revert(ui, repo, shelvectx) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
785 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
786 |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
787 def restorebranch(ui, repo, branchtorestore): |
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
788 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
|
789 repo.dirstate.setbranch(branchtorestore) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
790 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
791 _(b'marked working directory as branch %s\n') % branchtorestore |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
792 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
793 |
28573
6a42564081cb
shelve: adds restoring newly created branch (issue5048) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
28572
diff
changeset
|
794 |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
795 def unshelvecleanup(ui, repo, name, opts): |
19911
1c58e368fbfd
shelve: some docstring cleanups
Augie Fackler <raf@durin42.com>
parents:
19909
diff
changeset
|
796 """remove related files after an unshelve""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
797 if not opts.get(b'keep'): |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
798 backupvfs = vfsmod.vfs(repo.vfs.join(backupdir)) |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
799 ShelfDir(repo).get(name).movetobackup(backupvfs) |
25713
2ca116614cfc
shelve: only keep the latest N shelve backups
Colin Chan <colinchan@fb.com>
parents:
25712
diff
changeset
|
800 cleanupoldbackups(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
801 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
802 |
42662
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
803 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
|
804 """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
|
805 # 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
|
806 # parent, second is the temporary "fake" commit we're unshelving. |
42662
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
807 interactive = state.interactive |
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
808 basename = state.name |
27838
60b850b7e4ef
with: use context manager for lock in continue
Bryan O'Sullivan <bryano@fb.com>
parents:
27837
diff
changeset
|
809 with repo.lock(): |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
810 checkparents(repo, state) |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44595
diff
changeset
|
811 ms = mergestatemod.mergestate.read(repo) |
46361
dfca84970da8
cleanup: use mergestate.unresolvedcount() instead of bool(list(unresolved()))
Augie Fackler <augie@google.com>
parents:
46297
diff
changeset
|
812 if ms.unresolvedcount(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26577
diff
changeset
|
813 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
814 _(b"unresolved conflicts, can't continue"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
815 hint=_(b"see 'hg resolve', then 'hg unshelve --continue'"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
816 ) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
817 |
38463
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
818 shelvectx = repo[state.parents[1]] |
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
819 pendingctx = state.pendingctx |
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
820 |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
821 with repo.dirstate.parentchange(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46843
diff
changeset
|
822 repo.setparents(state.pendingctx.node(), repo.nullid) |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
823 repo.dirstate.write(repo.currenttransaction()) |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
824 |
39519
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
825 targetphase = phases.internal |
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
826 if not phases.supportinternal(repo): |
5d69e2412ec8
shelve: use the internal phase when possible
Boris Feld <boris.feld@octobus.net>
parents:
39387
diff
changeset
|
827 targetphase = phases.secret |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
828 overrides = {(b'phases', b'new-commit'): targetphase} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
829 with repo.ui.configoverride(overrides, b'unshelve'): |
38463
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
830 with repo.dirstate.parentchange(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46843
diff
changeset
|
831 repo.setparents(state.parents[0], repo.nullid) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
832 newnode, ispartialunshelve = _createunshelvectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
833 ui, repo, shelvectx, basename, interactive, opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
834 ) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
835 |
38463
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
836 if newnode is None: |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
837 shelvectx = state.pendingctx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
838 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
839 b'note: unshelved changes already existed ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
840 b'in the working copy\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
841 ) |
38463
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
842 ui.status(msg) |
22842
d43d116a118c
shelve: don't delete "." when rebase is a no-op (issue4398)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21852
diff
changeset
|
843 else: |
38463
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
844 # only strip the shelvectx if we produced one |
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
845 state.nodestoremove.append(newnode) |
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
846 shelvectx = repo[newnode] |
f4776f8b98e0
shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net>
parents:
38462
diff
changeset
|
847 |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
848 merge.update(pendingctx) |
20149
578b888c820e
unshelve: don't commit unknown files during unshelve (issue4113)
Durham Goode <durham@fb.com>
parents:
20103
diff
changeset
|
849 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
|
850 restorebranch(ui, repo, state.branchtorestore) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
851 |
42702
4814d993fe21
unshelve: handle stripping changesets on interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42668
diff
changeset
|
852 if not phases.supportinternal(repo): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
853 repair.strip( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
854 ui, repo, state.nodestoremove, backup=False, topic=b'shelve' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
855 ) |
42703
073cfff9aaef
unshelve: delete shelvedstate after a successful unshelve --continue
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42702
diff
changeset
|
856 shelvedstate.clear(repo) |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
857 if not ispartialunshelve: |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
858 unshelvecleanup(ui, repo, state.name, opts) |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
859 _restoreactivebookmark(repo, state.activebookmark) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
860 ui.status(_(b"unshelve of '%s' complete\n") % state.name) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
861 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
862 |
42614
117437f3f541
continue: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42599
diff
changeset
|
863 def hgcontinueunshelve(ui, repo): |
117437f3f541
continue: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42599
diff
changeset
|
864 """logic to resume unshelve using 'hg continue'""" |
117437f3f541
continue: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42599
diff
changeset
|
865 with repo.wlock(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
866 state = _loadshelvedstate(ui, repo, {b'continue': True}) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
867 return unshelvecontinue(ui, repo, state, {b'keep': state.keep}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
868 |
42614
117437f3f541
continue: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42599
diff
changeset
|
869 |
30453
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
870 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
|
871 """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
|
872 # 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
|
873 # 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
|
874 s = repo.status() |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
875 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
|
876 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
|
877 return tmpwctx, addedbefore |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
878 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
879 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 b"temporarily committing pending changes " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
881 b"(restore with 'hg unshelve --abort')\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
882 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
883 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
884 extra = {b'internal': b'shelve'} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
885 commitfunc = getcommitfunc(extra=extra, interactive=False, editor=False) |
30453
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
886 tempopts = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
887 tempopts[b'message'] = b"pending changes temporary commit" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
888 tempopts[b'date'] = opts.get(b'date') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
889 with ui.configoverride({(b'ui', b'quiet'): True}): |
31757
473f2fcc7629
shelve: move ui.quiet manipulations to configoverride
Kostia Balytskyi <ikostia@fb.com>
parents:
31664
diff
changeset
|
890 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
|
891 tmpwctx = repo[node] |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
892 return tmpwctx, addedbefore |
2e736f01a710
shelve: move temporary commit creation to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30407
diff
changeset
|
893 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
894 |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
895 def _unshelverestorecommit(ui, repo, tr, basename): |
30454
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
896 """Recreate commit in the repository during the unshelve""" |
39373
6a71324cb68b
shelve: handle shelved node on unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
39372
diff
changeset
|
897 repo = repo.unfiltered() |
39387
da84cca65036
shelve: fix crash on unshelve without .shelve metadata file
Yuya Nishihara <yuya@tcha.org>
parents:
39376
diff
changeset
|
898 node = None |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
899 shelf = ShelfDir(repo).get(basename) |
46287
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
900 if shelf.hasinfo(): |
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
901 node = shelf.readinfo()[b'node'] |
39374
c67c94c0e7ae
shelve: look for shelved node in the repository before unbundling
Boris Feld <boris.feld@octobus.net>
parents:
39373
diff
changeset
|
902 if node is None or node not in repo: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
903 with ui.configoverride({(b'ui', b'quiet'): True}): |
46291
e2713c68b477
shelve: replace repo instance in Shelf class by vfs instance
Martin von Zweigbergk <martinvonz@google.com>
parents:
46290
diff
changeset
|
904 shelvectx = shelf.applybundle(repo, tr) |
39375
38373da1af02
shelve: write metadata file on the fly if they are missing
Boris Feld <boris.feld@octobus.net>
parents:
39374
diff
changeset
|
905 # We might not strip the unbundled changeset, so we should keep track of |
38373da1af02
shelve: write metadata file on the fly if they are missing
Boris Feld <boris.feld@octobus.net>
parents:
39374
diff
changeset
|
906 # the unshelve node in case we need to reuse it (eg: unshelve --keep) |
38373da1af02
shelve: write metadata file on the fly if they are missing
Boris Feld <boris.feld@octobus.net>
parents:
39374
diff
changeset
|
907 if node is None: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
908 info = {b'node': hex(shelvectx.node())} |
46287
ae7a77a7ebc0
shelve: extract some repeated creation of shelf instances to variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
46286
diff
changeset
|
909 shelf.writeinfo(info) |
39374
c67c94c0e7ae
shelve: look for shelved node in the repository before unbundling
Boris Feld <boris.feld@octobus.net>
parents:
39373
diff
changeset
|
910 else: |
c67c94c0e7ae
shelve: look for shelved node in the repository before unbundling
Boris Feld <boris.feld@octobus.net>
parents:
39373
diff
changeset
|
911 shelvectx = repo[node] |
c67c94c0e7ae
shelve: look for shelved node in the repository before unbundling
Boris Feld <boris.feld@octobus.net>
parents:
39373
diff
changeset
|
912 |
30454
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
913 return repo, shelvectx |
672026aece64
shelve: move commit restoration logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30453
diff
changeset
|
914 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
915 |
42656
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
916 def _createunshelvectx(ui, repo, shelvectx, basename, interactive, opts): |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
917 """Handles the creation of unshelve commit and updates the shelve if it |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
918 was partially unshelved. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
919 |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
920 If interactive is: |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
921 |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
922 * False: Commits all the changes in the working directory. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
923 * True: Prompts the user to select changes to unshelve and commit them. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
924 Update the shelve with remaining changes. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
925 |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
926 Returns the node of the new commit formed and a bool indicating whether |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
927 the shelve was partially unshelved.Creates a commit ctx to unshelve |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
928 interactively or non-interactively. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
929 |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
930 The user might want to unshelve certain changes only from the stored |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
931 shelve in interactive. So, we would create two commits. One with requested |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
932 changes to unshelve at that time and the latter is shelved for future. |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
933 |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
934 Here, we return both the newnode which is created interactively and a |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
935 bool to know whether the shelve is partly done or completely done. |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
936 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
937 opts[b'message'] = shelvectx.description() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
938 opts[b'interactive-unshelve'] = True |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
939 pats = [] |
42656
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
940 if not interactive: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
941 newnode = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
942 text=shelvectx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
943 extra=shelvectx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
944 user=shelvectx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
945 date=shelvectx.date(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
946 ) |
42656
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
947 return newnode, False |
c9114885c14b
unshelve: unify logic around creating an unshelve changeset
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42616
diff
changeset
|
948 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
949 commitfunc = getcommitfunc(shelvectx.extra(), interactive=True, editor=True) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
950 newnode = cmdutil.dorecord( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
951 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
952 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
953 commitfunc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
954 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
955 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
956 cmdutil.recordfilter, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
957 *pats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
958 **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
959 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
960 snode = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
961 text=shelvectx.description(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
962 extra=shelvectx.extra(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
963 user=shelvectx.user(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
964 ) |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
965 if snode: |
42658
d5cdce3d9164
unshelve: create a matcher only if required on creating unshelve ctx
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42657
diff
changeset
|
966 m = scmutil.matchfiles(repo, repo[snode].files()) |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
967 _shelvecreatedcommit(repo, snode, basename, m) |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
968 |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
969 return newnode, bool(snode) |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
970 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
971 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
972 def _rebaserestoredcommit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
973 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
974 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
975 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
976 tr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
977 oldtiprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
978 basename, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
979 pctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
980 tmpwctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
981 shelvectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
982 branchtorestore, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
983 activebookmark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
984 ): |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
985 """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
|
986 # 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
|
987 # we'll be merging with, rebase it to be on top. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
988 interactive = opts.get(b'interactive') |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
989 if tmpwctx.node() == shelvectx.p1().node() and not interactive: |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
990 # We won't skip on interactive mode because, the user might want to |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
991 # unshelve certain changes only. |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
992 return shelvectx, False |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
993 |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
994 overrides = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
995 (b'ui', b'forcemerge'): opts.get(b'tool', b''), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
996 (b'phases', b'new-commit'): phases.secret, |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
997 } |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
998 with repo.ui.configoverride(overrides, b'unshelve'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
999 ui.status(_(b'rebasing shelved changes\n')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1000 stats = merge.graft( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1001 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1002 shelvectx, |
48592
bcc4820242cf
shelve: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
47436
diff
changeset
|
1003 labels=[ |
bcc4820242cf
shelve: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
47436
diff
changeset
|
1004 b'working-copy', |
bcc4820242cf
shelve: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
47436
diff
changeset
|
1005 b'shelved change', |
bcc4820242cf
shelve: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
47436
diff
changeset
|
1006 b'parent of shelved change', |
bcc4820242cf
shelve: attempt to make merge labels more helpful
Martin von Zweigbergk <martinvonz@google.com>
parents:
47436
diff
changeset
|
1007 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1008 keepconflictparent=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1009 ) |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1010 if stats.unresolvedcount: |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1011 tr.close() |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1012 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1013 nodestoremove = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1014 repo.changelog.node(rev) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1015 for rev in pycompat.xrange(oldtiprev, len(repo)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1016 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1017 shelvedstate.save( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1018 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1019 basename, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1020 pctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1021 tmpwctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1022 nodestoremove, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1023 branchtorestore, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1024 opts.get(b'keep'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1025 activebookmark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1026 interactive, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1027 ) |
45151
e429e7c801b2
error: normalize "unresolved conflicts" error messages with a custom class
Daniel Ploch <dploch@google.com>
parents:
45144
diff
changeset
|
1028 raise error.ConflictResolutionRequired(b'unshelve') |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
1029 |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1030 with repo.dirstate.parentchange(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46843
diff
changeset
|
1031 repo.setparents(tmpwctx.node(), repo.nullid) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1032 newnode, ispartialunshelve = _createunshelvectx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1033 ui, repo, shelvectx, basename, interactive, opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1034 ) |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
1035 |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1036 if newnode is None: |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1037 shelvectx = tmpwctx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1038 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1039 b'note: unshelved changes already existed ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1040 b'in the working copy\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1041 ) |
38618
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1042 ui.status(msg) |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1043 else: |
c829749e7639
shelve: directly handle the initial parent alignment
Boris Feld <boris.feld@octobus.net>
parents:
38508
diff
changeset
|
1044 shelvectx = repo[newnode] |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
1045 merge.update(tmpwctx) |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
1046 |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
1047 return shelvectx, ispartialunshelve |
30455
10684a298973
shelve: move rebasing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30454
diff
changeset
|
1048 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1049 |
30456
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1050 def _forgetunknownfiles(repo, shelvectx, addedbefore): |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1051 # 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
|
1052 # unshelve started, but are now added. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1053 shelveunknown = shelvectx.extra().get(b'shelve_unknown') |
30456
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1054 if not shelveunknown: |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1055 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1056 shelveunknown = frozenset(shelveunknown.split(b'\0')) |
30456
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1057 addedafter = frozenset(repo.status().added) |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1058 toforget = (addedafter & shelveunknown) - addedbefore |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1059 repo[None].forget(toforget) |
b924375cce3a
shelve: move file-forgetting logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30455
diff
changeset
|
1060 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1061 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
1062 def _finishunshelve(repo, oldtiprev, tr, activebookmark): |
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
1063 _restoreactivebookmark(repo, activebookmark) |
30457
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
1064 # 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
|
1065 # 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
|
1066 # 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
|
1067 # 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
|
1068 repo.unfiltered().changelog.strip(oldtiprev, tr) |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
1069 _aborttransaction(repo, tr) |
30457
893be22cdb38
shelve: move unshelve-finishing logic to a separate function
Kostia Balytskyi <ikostia@fb.com>
parents:
30456
diff
changeset
|
1070 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1071 |
30846
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
1072 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
|
1073 """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
|
1074 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
|
1075 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
|
1076 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
|
1077 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
|
1078 if intersection: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1079 m = _(b"shelved change touches missing files") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1080 hint = _(b"run hg status to see which files are missing") |
30846
dfc6663f97ca
shelve: make unshelve not crash when there are missing files (issue4176)
Kostia Balytskyi <ikostia@fb.com>
parents:
30823
diff
changeset
|
1081 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
|
1082 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1083 |
44595
47c1226463a1
shelve: split up dounshelve() in unshelvecmd() and _dounshelve()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44438
diff
changeset
|
1084 def unshelvecmd(ui, repo, *shelved, **opts): |
35005
aad6b9fdfc75
py3: handle keyword arguments in hgext/shelve.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34496
diff
changeset
|
1085 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1086 abortf = opts.get(b'abort') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1087 continuef = opts.get(b'continue') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1088 interactive = opts.get(b'interactive') |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1089 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
|
1090 cmdutil.checkunfinished(repo) |
31021
4189d790e8a4
shelve: add -n/--name option to unshelve (issue5475)
liscju <piotr.listkiewicz@gmail.com>
parents:
30846
diff
changeset
|
1091 shelved = list(shelved) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1092 if opts.get(b"name"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1093 shelved.append(opts[b"name"]) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1094 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1095 if interactive and opts.get(b'keep'): |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1096 raise error.InputError( |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1097 _(b'--keep on --interactive is not yet supported') |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1098 ) |
42662
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
1099 if abortf or continuef: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1100 if abortf and continuef: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1101 raise error.InputError(_(b'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
|
1102 if shelved: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1103 raise error.InputError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1104 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1105 b'cannot combine abort/continue with ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1106 b'naming a shelved change' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1107 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1108 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1109 if abortf and opts.get(b'tool', False): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1110 ui.warn(_(b'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
|
1111 |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
1112 state = _loadshelvedstate(ui, repo, opts) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1113 if abortf: |
42599
3fb0493812c0
abort: added support for unshelve
Taapas Agrawal <taapas2897@gmail.com>
parents:
42598
diff
changeset
|
1114 return unshelveabort(ui, repo, state) |
42668
52a383451739
unshelve: add abort on using continue and interactive together
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42662
diff
changeset
|
1115 elif continuef and interactive: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1116 raise error.InputError( |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1117 _(b'cannot use both continue and interactive') |
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1118 ) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1119 elif continuef: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1120 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
|
1121 elif len(shelved) > 1: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1122 raise error.InputError(_(b'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
|
1123 elif not shelved: |
46297
82edad33fd81
shelve: move listshelves() to new ShelfDir class, so caller need not pass vfs
Martin von Zweigbergk <martinvonz@google.com>
parents:
46296
diff
changeset
|
1124 shelved = ShelfDir(repo).listshelves() |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1125 if not shelved: |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1126 raise error.StateError(_(b'no shelved changes to apply!')) |
46281
a34607b6d320
shelve: make listshelves() return shelf names instead of filenames
Martin von Zweigbergk <martinvonz@google.com>
parents:
46280
diff
changeset
|
1127 basename = shelved[0][1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1128 ui.status(_(b"unshelving change '%s'\n") % basename) |
42662
ee86ad6f50fe
unshelve: store information about interactive mode in shelvedstate
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42658
diff
changeset
|
1129 else: |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1130 basename = shelved[0] |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1131 |
46296
eec8899407f4
shelve: also create class representing whole directory of shelves
Martin von Zweigbergk <martinvonz@google.com>
parents:
46295
diff
changeset
|
1132 if not ShelfDir(repo).get(basename).exists(): |
46272
a68d3386138c
shelve: raise more specific errors
Martin von Zweigbergk <martinvonz@google.com>
parents:
46271
diff
changeset
|
1133 raise error.InputError(_(b"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
|
1134 |
44595
47c1226463a1
shelve: split up dounshelve() in unshelvecmd() and _dounshelve()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44438
diff
changeset
|
1135 return _dounshelve(ui, repo, basename, opts) |
47c1226463a1
shelve: split up dounshelve() in unshelvecmd() and _dounshelve()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44438
diff
changeset
|
1136 |
47c1226463a1
shelve: split up dounshelve() in unshelvecmd() and _dounshelve()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44438
diff
changeset
|
1137 |
47c1226463a1
shelve: split up dounshelve() in unshelvecmd() and _dounshelve()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44438
diff
changeset
|
1138 def _dounshelve(ui, repo, basename, opts): |
39373
6a71324cb68b
shelve: handle shelved node on unfiltered repository
Boris Feld <boris.feld@octobus.net>
parents:
39372
diff
changeset
|
1139 repo = repo.unfiltered() |
27287
c9ceea3f2d8e
shelve: widen wlock scope of unshelve for consistency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27198
diff
changeset
|
1140 lock = tr = None |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1141 try: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1142 lock = repo.lock() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1143 tr = repo.transaction(b'unshelve', report=lambda x: None) |
19854
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1144 oldtiprev = len(repo) |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
1145 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1146 pctx = repo[b'.'] |
20958
df33c9014430
shelve: repo['.'] is not a wctx but a pctx
Mads Kiilerich <madski@unity3d.com>
parents:
20942
diff
changeset
|
1147 tmpwctx = pctx |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
1148 # 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
|
1149 # ...-> pctx -> tmpwctx -> shelvectx |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
1150 # 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
|
1151 # 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
|
1152 # to the original pctx. |
19961
1d7a36ff2615
shelve: use rebase instead of merge (issue4068)
Durham Goode <durham@fb.com>
parents:
19951
diff
changeset
|
1153 |
31664
1cbeefa59343
shelve: add logic to preserve active bookmarks
Kostia Balytskyi <ikostia@fb.com>
parents:
31555
diff
changeset
|
1154 activebookmark = _backupactivebookmark(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1155 tmpwctx, addedbefore = _commitworkingcopychanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1156 ui, repo, opts, tmpwctx |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1157 ) |
41007
a06dc62f1c82
shelve: pass transaction around to clarify where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
40854
diff
changeset
|
1158 repo, shelvectx = _unshelverestorecommit(ui, repo, tr, basename) |
37967
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1159 _checkunshelveuntrackedproblems(ui, repo, shelvectx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1160 branchtorestore = b'' |
37967
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1161 if shelvectx.branch() != shelvectx.p1().branch(): |
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1162 branchtorestore = shelvectx.branch() |
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1163 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1164 shelvectx, ispartialunshelve = _rebaserestoredcommit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1165 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1166 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1167 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1168 tr, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1169 oldtiprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1170 basename, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1171 pctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1172 tmpwctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1173 shelvectx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1174 branchtorestore, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1175 activebookmark, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42761
diff
changeset
|
1176 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1177 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1178 with ui.configoverride(overrides, b'unshelve'): |
37967
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1179 mergefiles(ui, repo, pctx, shelvectx) |
7932be8b0559
shelve: reduce scope of merge tool config override
Martin von Zweigbergk <martinvonz@google.com>
parents:
37603
diff
changeset
|
1180 restorebranch(ui, repo, branchtorestore) |
42704
6957f7b93e03
unshelve: clear shelvedstate and _finishunshelve() on partial unshelve
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42703
diff
changeset
|
1181 shelvedstate.clear(repo) |
6957f7b93e03
unshelve: clear shelvedstate and _finishunshelve() on partial unshelve
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42703
diff
changeset
|
1182 _finishunshelve(repo, oldtiprev, tr, activebookmark) |
42733
d684449eef67
unshelve: forget unknown files after a partial unshelve
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42704
diff
changeset
|
1183 _forgetunknownfiles(repo, shelvectx, addedbefore) |
42616
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
1184 if not ispartialunshelve: |
5162753c4c14
unshelve: add interactive mode
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42614
diff
changeset
|
1185 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
|
1186 finally: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1187 if tr: |
49d4919d21c2
shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents:
diff
changeset
|
1188 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
|
1189 lockmod.release(lock) |