Mercurial > hg
annotate hgext/transplant.py @ 47506:29ea3b4c4f62 stable
Added signature for changeset 411dc27fd9fd
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 09 Jul 2021 00:25:14 +0530 |
parents | 0428e555acb7 |
children | d55b71393907 |
rev | line source |
---|---|
3714 | 1 # Patch transplanting extension for Mercurial |
2 # | |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4516
diff
changeset
|
3 # Copyright 2006, 2007 Brendan Cully <brendan@kublai.com> |
3714 | 4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
3714 | 7 |
8934
9dda4c73fc3b
extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8894
diff
changeset
|
8 '''command to transplant changesets from another branch |
3714 | 9 |
19028
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
10 This extension allows you to transplant changes to another parent revision, |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
11 possibly in another repository. The transplant is done using 'diff' patches. |
3714 | 12 |
8000
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
13 Transplanted patches are recorded in .hg/transplant/transplants, as a |
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
14 map from a changeset hash to its hash in the source repository. |
3714 | 15 ''' |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
16 from __future__ import absolute_import |
3714 | 17 |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
18 import os |
38164
aac4be30e250
py3: wrap tempfile.mkstemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37311
diff
changeset
|
19 |
7629
97253bcb44a8
transplant: move docstrings before imports (see issue1466)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7415
diff
changeset
|
20 from mercurial.i18n import _ |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
21 from mercurial.pycompat import open |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
22 from mercurial.node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
23 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
24 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
25 nullid, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
26 short, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
27 ) |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
28 from mercurial import ( |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
29 bundlerepo, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
30 cmdutil, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
31 error, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
32 exchange, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
33 hg, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34469
diff
changeset
|
34 logcmdutil, |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
35 match, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
36 merge, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
37 patch, |
30925
82f1ef8b4477
py3: convert the mode argument of os.fdopen to unicodes (2 of 2)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29841
diff
changeset
|
38 pycompat, |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
39 registrar, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
40 revset, |
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
41 scmutil, |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30925
diff
changeset
|
42 smartset, |
42529
5f2f6912c9e6
states: moved cmdutil.unfinishedstates to state.py
Taapas Agrawal <taapas2897@gmail.com>
parents:
41676
diff
changeset
|
43 state as statemod, |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
44 util, |
31245
c1ebe18d5156
vfs: use 'vfs' module directly in 'hgext.transplant'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
45 vfs as vfsmod, |
28481
ec75c94262a5
transplant: use absolute_import
timeless <timeless@mozdev.org>
parents:
28480
diff
changeset
|
46 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36835
diff
changeset
|
47 from mercurial.utils import ( |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
48 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36835
diff
changeset
|
49 stringutil, |
46944
0428e555acb7
transplant: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46113
diff
changeset
|
50 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36835
diff
changeset
|
51 ) |
7629
97253bcb44a8
transplant: move docstrings before imports (see issue1466)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7415
diff
changeset
|
52 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
53 |
16507
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
54 class TransplantError(error.Abort): |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
55 pass |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
56 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
57 |
14308
e7ea3e38fea8
transplant: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14260
diff
changeset
|
58 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31336
diff
changeset
|
59 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
28540
diff
changeset
|
60 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24365
diff
changeset
|
61 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24365
diff
changeset
|
62 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24365
diff
changeset
|
63 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
64 testedwith = b'ships-with-hg-core' |
14308
e7ea3e38fea8
transplant: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14260
diff
changeset
|
65 |
34468
7bcce17b87e8
configitems: register the 'transplant.filter' config
Boris Feld <boris.feld@octobus.net>
parents:
32337
diff
changeset
|
66 configtable = {} |
7bcce17b87e8
configitems: register the 'transplant.filter' config
Boris Feld <boris.feld@octobus.net>
parents:
32337
diff
changeset
|
67 configitem = registrar.configitem(configtable) |
7bcce17b87e8
configitems: register the 'transplant.filter' config
Boris Feld <boris.feld@octobus.net>
parents:
32337
diff
changeset
|
68 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
69 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
70 b'transplant', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
71 b'filter', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
72 default=None, |
34468
7bcce17b87e8
configitems: register the 'transplant.filter' config
Boris Feld <boris.feld@octobus.net>
parents:
32337
diff
changeset
|
73 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
74 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
75 b'transplant', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
76 b'log', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
77 default=None, |
34469
61275d0f6157
configitems: register the 'transplant.log' config
Boris Feld <boris.feld@octobus.net>
parents:
34468
diff
changeset
|
78 ) |
34468
7bcce17b87e8
configitems: register the 'transplant.filter' config
Boris Feld <boris.feld@octobus.net>
parents:
32337
diff
changeset
|
79 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
80 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8706
diff
changeset
|
81 class transplantentry(object): |
3714 | 82 def __init__(self, lnode, rnode): |
83 self.lnode = lnode | |
84 self.rnode = rnode | |
85 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
86 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8706
diff
changeset
|
87 class transplants(object): |
3714 | 88 def __init__(self, path=None, transplantfile=None, opener=None): |
89 self.path = path | |
90 self.transplantfile = transplantfile | |
91 self.opener = opener | |
92 | |
93 if not opener: | |
31245
c1ebe18d5156
vfs: use 'vfs' module directly in 'hgext.transplant'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
94 self.opener = vfsmod.vfs(self.path) |
12313
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
95 self.transplants = {} |
3714 | 96 self.dirty = False |
97 self.read() | |
98 | |
99 def read(self): | |
100 abspath = os.path.join(self.path, self.transplantfile) | |
101 if self.transplantfile and os.path.exists(abspath): | |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14161
diff
changeset
|
102 for line in self.opener.read(self.transplantfile).splitlines(): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
103 lnode, rnode = map(bin, line.split(b':')) |
12313
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
104 list = self.transplants.setdefault(rnode, []) |
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
105 list.append(transplantentry(lnode, rnode)) |
3714 | 106 |
107 def write(self): | |
108 if self.dirty and self.transplantfile: | |
109 if not os.path.isdir(self.path): | |
110 os.mkdir(self.path) | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 fp = self.opener(self.transplantfile, b'w') |
43104
74802979dd9d
py3: define and use pycompat.itervalues()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
112 for list in pycompat.itervalues(self.transplants): |
12349
7340b0fa049a
transplant: fix var name conflict introduced by 2912881c2a98
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12347
diff
changeset
|
113 for t in list: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
114 l, r = map(hex, (t.lnode, t.rnode)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 fp.write(l + b':' + r + b'\n') |
3714 | 116 fp.close() |
117 self.dirty = False | |
118 | |
119 def get(self, rnode): | |
12313
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
120 return self.transplants.get(rnode) or [] |
3714 | 121 |
122 def set(self, lnode, rnode): | |
12313
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
123 list = self.transplants.setdefault(rnode, []) |
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
124 list.append(transplantentry(lnode, rnode)) |
3714 | 125 self.dirty = True |
126 | |
127 def remove(self, transplant): | |
12313
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
128 list = self.transplants.get(transplant.rnode) |
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
129 if list: |
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
130 del list[list.index(transplant)] |
2912881c2a98
transplant: maintain list of transplants in dict
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12266
diff
changeset
|
131 self.dirty = True |
3714 | 132 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
133 |
8778
c5f36402daad
use new style classes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8706
diff
changeset
|
134 class transplanter(object): |
21411
afff78be4361
transplant: use "getcommiteditor()" instead of explicit editor choice
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20988
diff
changeset
|
135 def __init__(self, ui, repo, opts): |
3714 | 136 self.ui = ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 self.path = repo.vfs.join(b'transplant') |
31245
c1ebe18d5156
vfs: use 'vfs' module directly in 'hgext.transplant'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31216
diff
changeset
|
138 self.opener = vfsmod.vfs(self.path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
139 self.transplants = transplants( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
140 self.path, b'transplants', opener=self.opener |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
141 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
142 |
22252
de783f2403c4
transplant: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22006
diff
changeset
|
143 def getcommiteditor(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 editform = cmdutil.mergeeditform(repo[None], b'transplant') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
145 return cmdutil.getcommiteditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
146 editform=editform, **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
147 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
148 |
22252
de783f2403c4
transplant: change "editform" to distinguish merge commits from others
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
22006
diff
changeset
|
149 self.getcommiteditor = getcommiteditor |
3714 | 150 |
151 def applied(self, repo, node, parent): | |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
152 """returns True if a node is already an ancestor of parent |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
153 or is parent or has already been transplanted""" |
17010
a6c64211acdb
transplant: convert applied() algorithm from nodes to revs
Joshua Redstone <joshua.redstone@fb.com>
parents:
17009
diff
changeset
|
154 if hasnode(repo, parent): |
a6c64211acdb
transplant: convert applied() algorithm from nodes to revs
Joshua Redstone <joshua.redstone@fb.com>
parents:
17009
diff
changeset
|
155 parentrev = repo.changelog.rev(parent) |
3714 | 156 if hasnode(repo, node): |
17010
a6c64211acdb
transplant: convert applied() algorithm from nodes to revs
Joshua Redstone <joshua.redstone@fb.com>
parents:
17009
diff
changeset
|
157 rev = repo.changelog.rev(node) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
158 reachable = repo.changelog.ancestors( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
159 [parentrev], rev, inclusive=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
160 ) |
17010
a6c64211acdb
transplant: convert applied() algorithm from nodes to revs
Joshua Redstone <joshua.redstone@fb.com>
parents:
17009
diff
changeset
|
161 if rev in reachable: |
3714 | 162 return True |
163 for t in self.transplants.get(node): | |
164 # it might have been stripped | |
165 if not hasnode(repo, t.lnode): | |
166 self.transplants.remove(t) | |
167 return False | |
17010
a6c64211acdb
transplant: convert applied() algorithm from nodes to revs
Joshua Redstone <joshua.redstone@fb.com>
parents:
17009
diff
changeset
|
168 lnoderev = repo.changelog.rev(t.lnode) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
169 if lnoderev in repo.changelog.ancestors( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
170 [parentrev], lnoderev, inclusive=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
171 ): |
3714 | 172 return True |
173 return False | |
174 | |
26346
2449a0a6ebda
transplant: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25879
diff
changeset
|
175 def apply(self, repo, source, revmap, merges, opts=None): |
3714 | 176 '''apply the revisions in revmap one by one in revision order''' |
26346
2449a0a6ebda
transplant: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25879
diff
changeset
|
177 if opts is None: |
2449a0a6ebda
transplant: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25879
diff
changeset
|
178 opts = {} |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8176
diff
changeset
|
179 revs = sorted(revmap) |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41371
diff
changeset
|
180 p1 = repo.dirstate.p1() |
3714 | 181 pulls = [] |
23452
86c0d8c1484f
transplant: don't honor whitespace and format-changing diffopts
Siddharth Agarwal <sid0@fb.com>
parents:
23270
diff
changeset
|
182 diffopts = patch.difffeatureopts(self.ui, opts) |
3714 | 183 diffopts.git = True |
184 | |
27289
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
185 lock = tr = None |
3714 | 186 try: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
187 lock = repo.lock() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
188 tr = repo.transaction(b'transplant') |
3714 | 189 for rev in revs: |
190 node = revmap[rev] | |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
191 revstr = b'%d:%s' % (rev, short(node)) |
3714 | 192 |
193 if self.applied(repo, node, p1): | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
194 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
195 _(b'skipping already applied revision %s\n') % revstr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
196 ) |
3714 | 197 continue |
198 | |
199 parents = source.changelog.parents(node) | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
200 if not (opts.get(b'filter') or opts.get(b'log')): |
7744
b44dbb95f07f
transplant: wrapped long lines
Martin Geisler <mg@daimi.au.dk>
parents:
7633
diff
changeset
|
201 # If the changeset parent is the same as the |
b44dbb95f07f
transplant: wrapped long lines
Martin Geisler <mg@daimi.au.dk>
parents:
7633
diff
changeset
|
202 # wdir's parent, just pull it. |
3714 | 203 if parents[0] == p1: |
204 pulls.append(node) | |
205 p1 = node | |
206 continue | |
207 if pulls: | |
208 if source != repo: | |
22699
74da54e52d7c
transplant: use exchange.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22252
diff
changeset
|
209 exchange.pull(repo, source.peer(), heads=pulls) |
45576
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
210 merge.update(repo[pulls[-1]]) |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41371
diff
changeset
|
211 p1 = repo.dirstate.p1() |
3714 | 212 pulls = [] |
213 | |
214 domerge = False | |
215 if node in merges: | |
7744
b44dbb95f07f
transplant: wrapped long lines
Martin Geisler <mg@daimi.au.dk>
parents:
7633
diff
changeset
|
216 # pulling all the merge revs at once would mean we |
b44dbb95f07f
transplant: wrapped long lines
Martin Geisler <mg@daimi.au.dk>
parents:
7633
diff
changeset
|
217 # couldn't transplant after the latest even if |
b44dbb95f07f
transplant: wrapped long lines
Martin Geisler <mg@daimi.au.dk>
parents:
7633
diff
changeset
|
218 # transplants before them fail. |
3714 | 219 domerge = True |
220 if not hasnode(repo, node): | |
22699
74da54e52d7c
transplant: use exchange.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22252
diff
changeset
|
221 exchange.pull(repo, source.peer(), heads=[node]) |
3714 | 222 |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
223 skipmerge = False |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
224 if parents[1] != nullid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 if not opts.get(b'parent'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
226 self.ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
227 _(b'skipping merge changeset %d:%s\n') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
228 % (rev, short(node)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
229 ) |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
230 skipmerge = True |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
231 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
232 parent = source.lookup(opts[b'parent']) |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
233 if parent not in parents: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
234 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 _(b'%s is not a parent of %s') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
236 % (short(parent), short(node)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
237 ) |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
238 else: |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
239 parent = parents[0] |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
240 |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
241 if skipmerge: |
3714 | 242 patchfile = None |
243 else: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 fd, patchfile = pycompat.mkstemp(prefix=b'hg-transplant-') |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
245 fp = os.fdopen(fd, 'wb') |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
246 gen = patch.diff(source, parent, node, opts=diffopts) |
7308
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7280
diff
changeset
|
247 for chunk in gen: |
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7280
diff
changeset
|
248 fp.write(chunk) |
3714 | 249 fp.close() |
250 | |
251 del revmap[rev] | |
252 if patchfile or domerge: | |
253 try: | |
16507
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
254 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
255 n = self.applyone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
256 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
257 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
258 source.changelog.read(node), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
259 patchfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
260 merge=domerge, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 log=opts.get(b'log'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
262 filter=opts.get(b'filter'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
263 ) |
16507
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
264 except TransplantError: |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
265 # Do not rollback, it is up to the user to |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
266 # fix the merge or cancel everything |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
267 tr.close() |
1f020021adfa
transplant: do not rollback on patching error (issue3379)
Patrick Mezard <patrick@mezard.eu>
parents:
16457
diff
changeset
|
268 raise |
4251
e76e52145c3d
transplant: fix ignoring empty changesets (eg after filter)
Brendan Cully <brendan@kublai.com>
parents:
4072
diff
changeset
|
269 if n and domerge: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
270 self.ui.status( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
271 _(b'%s merged at %s\n') % (revstr, short(n)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
272 ) |
4251
e76e52145c3d
transplant: fix ignoring empty changesets (eg after filter)
Brendan Cully <brendan@kublai.com>
parents:
4072
diff
changeset
|
273 elif n: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
274 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
275 _(b'%s transplanted to %s\n') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
276 % (short(node), short(n)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
277 ) |
3714 | 278 finally: |
279 if patchfile: | |
280 os.unlink(patchfile) | |
15204
3ce9b1a7538b
transplant: wrap a transaction around the whole command
Greg Ward <greg@gerg.ca>
parents:
14741
diff
changeset
|
281 tr.close() |
3714 | 282 if pulls: |
22699
74da54e52d7c
transplant: use exchange.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22252
diff
changeset
|
283 exchange.pull(repo, source.peer(), heads=pulls) |
45576
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
284 merge.update(repo[pulls[-1]]) |
3714 | 285 finally: |
286 self.saveseries(revmap, merges) | |
287 self.transplants.write() | |
15204
3ce9b1a7538b
transplant: wrap a transaction around the whole command
Greg Ward <greg@gerg.ca>
parents:
14741
diff
changeset
|
288 if tr: |
3ce9b1a7538b
transplant: wrap a transaction around the whole command
Greg Ward <greg@gerg.ca>
parents:
14741
diff
changeset
|
289 tr.release() |
25879
99e88320d665
transplant: restore dirstate correctly at unexpected failure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25828
diff
changeset
|
290 if lock: |
99e88320d665
transplant: restore dirstate correctly at unexpected failure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25828
diff
changeset
|
291 lock.release() |
3714 | 292 |
13579
3cbb3c57a50e
transplant: added 'HGREVISION' variable to the environment passed to the 'filter' command
Luke Plant <L.Plant.98@cantab.net>
parents:
13031
diff
changeset
|
293 def filter(self, filter, node, changelog, patchfile): |
3714 | 294 '''arbitrarily rewrite changeset before applying it''' |
295 | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
296 self.ui.status(_(b'filtering %s\n') % patchfile) |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
297 user, date, msg = (changelog[1], changelog[2], changelog[4]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
298 fd, headerfile = pycompat.mkstemp(prefix=b'hg-transplant-') |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
299 fp = os.fdopen(fd, 'wb') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
300 fp.write(b"# HG changeset patch\n") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 fp.write(b"# User %s\n" % user) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
302 fp.write(b"# Date %d %d\n" % date) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 fp.write(msg + b'\n') |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
304 fp.close() |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
305 |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
306 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
307 self.ui.system( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 b'%s %s %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
309 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
310 filter, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
311 procutil.shellquote(headerfile), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
312 procutil.shellquote(patchfile), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
313 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
314 environ={ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 b'HGUSER': changelog[1], |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
316 b'HGREVISION': hex(node), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
317 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
318 onerr=error.Abort, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
319 errprefix=_(b'filter failed'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
320 blockedtag=b'transplant_filter', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
321 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 user, date, msg = self.parselog(open(headerfile, b'rb'))[1:4] |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
323 finally: |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
324 os.unlink(headerfile) |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
325 |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
326 return (user, date, msg) |
3714 | 327 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
328 def applyone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
329 self, repo, node, cl, patchfile, merge=False, log=False, filter=None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
330 ): |
3714 | 331 '''apply the patch in patchfile to the repository as a transplant''' |
332 (manifest, user, (time, timezone), files, message) = cl[:5] | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
333 date = b"%d %d" % (time, timezone) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
334 extra = {b'transplant_source': node} |
3714 | 335 if filter: |
13579
3cbb3c57a50e
transplant: added 'HGREVISION' variable to the environment passed to the 'filter' command
Luke Plant <L.Plant.98@cantab.net>
parents:
13031
diff
changeset
|
336 (user, date, message) = self.filter(filter, node, cl, patchfile) |
3714 | 337 |
338 if log: | |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8934
diff
changeset
|
339 # we don't translate messages inserted into commits |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
340 message += b'\n(transplanted from %s)' % hex(node) |
3714 | 341 |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
342 self.ui.status(_(b'applying %s\n') % short(node)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 self.ui.note(b'%s %s\n%s\n' % (user, date, message)) |
3714 | 344 |
345 if not patchfile and not merge: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 raise error.Abort(_(b'can only omit patchfile if merging')) |
3714 | 347 if patchfile: |
348 try: | |
14564
65f4512e40e4
patch: turn patch() touched files dict into a set
Patrick Mezard <pmezard@gmail.com>
parents:
14556
diff
changeset
|
349 files = set() |
14382
2d16f15da7bd
patch: remove patch.patch() cwd argument
Patrick Mezard <pmezard@gmail.com>
parents:
14319
diff
changeset
|
350 patch.patch(self.ui, repo, patchfile, files=files, eolmode=None) |
14260
00a881581400
patch: make patch()/internalpatch() always update the dirstate
Patrick Mezard <pmezard@gmail.com>
parents:
14259
diff
changeset
|
351 files = list(files) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
352 except Exception as inst: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 seriespath = os.path.join(self.path, b'series') |
3757
faed44bab17b
transplant: clobber old series when transplant fails
Brendan Cully <brendan@kublai.com>
parents:
3752
diff
changeset
|
354 if os.path.exists(seriespath): |
faed44bab17b
transplant: clobber old series when transplant fails
Brendan Cully <brendan@kublai.com>
parents:
3752
diff
changeset
|
355 os.unlink(seriespath) |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13790
diff
changeset
|
356 p1 = repo.dirstate.p1() |
3714 | 357 p2 = node |
3725
ccc7a9eb0e5e
transplant: preserve filter changes in --continue log
Brendan Cully <brendan@kublai.com>
parents:
3724
diff
changeset
|
358 self.log(user, date, message, p1, p2, merge=merge) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
359 self.ui.write(stringutil.forcebytestr(inst) + b'\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
360 raise TransplantError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
361 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
362 b'fix up the working directory and run ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
363 b'hg transplant --continue' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
364 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
365 ) |
3714 | 366 else: |
367 files = None | |
368 if merge: | |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41371
diff
changeset
|
369 p1 = repo.dirstate.p1() |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16507
diff
changeset
|
370 repo.setparents(p1, node) |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41399
diff
changeset
|
371 m = match.always() |
8703
8676dd819444
transplant: use match object rather than files for commit
Matt Mackall <mpm@selenic.com>
parents:
8615
diff
changeset
|
372 else: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41399
diff
changeset
|
373 m = match.exact(files) |
3714 | 374 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
375 n = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
376 message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
377 user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
378 date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
379 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
380 match=m, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
381 editor=self.getcommiteditor(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
382 ) |
11638
79231258503b
transplant: crash if repo.commit() finds nothing to commit
Greg Ward <greg-hg@gerg.ca>
parents:
11411
diff
changeset
|
383 if not n: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
384 self.ui.warn(_(b'skipping emptied changeset %s\n') % short(node)) |
17319
a189d4470a34
transplant: handle non-empty patches doing nothing (issue2806)
Patrick Mezard <patrick@mezard.eu>
parents:
17299
diff
changeset
|
385 return None |
3714 | 386 if not merge: |
387 self.transplants.set(n, node) | |
388 | |
389 return n | |
390 | |
27677
128ef8828ed5
transplant: only use checkunfinished if not continue
timeless <timeless@mozdev.org>
parents:
27676
diff
changeset
|
391 def canresume(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
392 return os.path.exists(os.path.join(self.path, b'journal')) |
27677
128ef8828ed5
transplant: only use checkunfinished if not continue
timeless <timeless@mozdev.org>
parents:
27676
diff
changeset
|
393 |
18919
cdf764a2f7a5
repoview: remove unreachable code
Bryan O'Sullivan <bryano@fb.com>
parents:
18082
diff
changeset
|
394 def resume(self, repo, source, opts): |
3714 | 395 '''recover last transaction and apply remaining changesets''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
396 if os.path.exists(os.path.join(self.path, b'journal')): |
18926
8deaa703a622
transplant: pass source through to recover
Bryan O'Sullivan <bryano@fb.com>
parents:
18919
diff
changeset
|
397 n, node = self.recover(repo, source, opts) |
23781
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
398 if n: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
399 self.ui.status( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
400 _(b'%s transplanted as %s\n') % (short(node), short(n)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
401 ) |
23781
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
402 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
403 self.ui.status( |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
404 _(b'%s skipped due to empty diff\n') % (short(node),) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
405 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
406 seriespath = os.path.join(self.path, b'series') |
3714 | 407 if not os.path.exists(seriespath): |
3758
889f7e74a0d9
transplant: log source node when recovering too.
Brendan Cully <brendan@kublai.com>
parents:
3757
diff
changeset
|
408 self.transplants.write() |
3714 | 409 return |
410 nodes, merges = self.readseries() | |
411 revmap = {} | |
412 for n in nodes: | |
413 revmap[source.changelog.rev(n)] = n | |
414 os.unlink(seriespath) | |
415 | |
416 self.apply(repo, source, revmap, merges, opts) | |
417 | |
18926
8deaa703a622
transplant: pass source through to recover
Bryan O'Sullivan <bryano@fb.com>
parents:
18919
diff
changeset
|
418 def recover(self, repo, source, opts): |
3714 | 419 '''commit working directory using journal metadata''' |
420 node, user, date, message, parents = self.readlog() | |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
421 merge = False |
3714 | 422 |
423 if not user or not date or not message or not parents[0]: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
424 raise error.Abort(_(b'transplant log file is corrupt')) |
3714 | 425 |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
426 parent = parents[0] |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
427 if len(parents) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 if opts.get(b'parent'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
429 parent = source.lookup(opts[b'parent']) |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
430 if parent not in parents: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
431 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
432 _(b'%s is not a parent of %s') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
433 % (short(parent), short(node)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
434 ) |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
435 else: |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
436 merge = True |
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
437 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
438 extra = {b'transplant_source': node} |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
439 try: |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41371
diff
changeset
|
440 p1 = repo.dirstate.p1() |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
441 if p1 != parent: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
442 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43104
diff
changeset
|
443 _(b'working directory not at transplant parent %s') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
444 % hex(parent) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
445 ) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
446 if merge: |
16551
ebf6d38c9063
localrepo: add setparents() to adjust dirstate copies (issue3407)
Patrick Mezard <patrick@mezard.eu>
parents:
16507
diff
changeset
|
447 repo.setparents(p1, parents[1]) |
43642
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
448 st = repo.status() |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
449 modified, added, removed, deleted = ( |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
450 st.modified, |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
451 st.added, |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
452 st.removed, |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
453 st.deleted, |
96edd0c38740
transplant: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
454 ) |
23781
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
455 if merge or modified or added or removed or deleted: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
456 n = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
457 message, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
458 user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
459 date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
460 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
461 editor=self.getcommiteditor(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
462 ) |
23781
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
463 if not n: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
464 raise error.Abort(_(b'commit failed')) |
23781
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
465 if not merge: |
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
466 self.transplants.set(n, node) |
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
467 else: |
49caef455912
transplant: properly skip empty changeset (issue4423)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23452
diff
changeset
|
468 n = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
469 self.unlog() |
3714 | 470 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
471 return n, node |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4680
diff
changeset
|
472 finally: |
27289
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
473 # TODO: get rid of this meaningless try/finally enclosing. |
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
474 # this is kept only to reduce changes in a patch. |
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
475 pass |
3714 | 476 |
42762
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
477 def stop(self, ui, repo): |
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
478 """logic to stop an interrupted transplant""" |
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
479 if self.canresume(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
480 startctx = repo[b'.'] |
45556
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44452
diff
changeset
|
481 merge.clean_update(startctx) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
482 ui.status(_(b"stopped the interrupted transplant\n")) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
483 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
484 _(b"working directory is now at %s\n") % startctx.hex()[:12] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
485 ) |
42762
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
486 self.unlog() |
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
487 return 0 |
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
488 |
3714 | 489 def readseries(self): |
490 nodes = [] | |
491 merges = [] | |
492 cur = nodes | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
493 for line in self.opener.read(b'series').splitlines(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
494 if line.startswith(b'# Merges'): |
3714 | 495 cur = merges |
496 continue | |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
497 cur.append(bin(line)) |
3714 | 498 |
499 return (nodes, merges) | |
500 | |
501 def saveseries(self, revmap, merges): | |
502 if not revmap: | |
503 return | |
504 | |
505 if not os.path.isdir(self.path): | |
506 os.mkdir(self.path) | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
507 series = self.opener(b'series', b'w') |
8209
a1a5a57efe90
replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents:
8176
diff
changeset
|
508 for rev in sorted(revmap): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
509 series.write(hex(revmap[rev]) + b'\n') |
3714 | 510 if merges: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 series.write(b'# Merges\n') |
3714 | 512 for m in merges: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
513 series.write(hex(m) + b'\n') |
3714 | 514 series.close() |
515 | |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
516 def parselog(self, fp): |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
517 parents = [] |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
518 message = [] |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
519 node = nullid |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
520 inmsg = False |
13789
7e5031180c0f
transplant: fix crash if filter script munges log file
Luke Plant <L.Plant.98@cantab.net>
parents:
13742
diff
changeset
|
521 user = None |
7e5031180c0f
transplant: fix crash if filter script munges log file
Luke Plant <L.Plant.98@cantab.net>
parents:
13742
diff
changeset
|
522 date = None |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
523 for line in fp.read().splitlines(): |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
524 if inmsg: |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
525 message.append(line) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
526 elif line.startswith(b'# User '): |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
527 user = line[7:] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
528 elif line.startswith(b'# Date '): |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
529 date = line[7:] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 elif line.startswith(b'# Node ID '): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
531 node = bin(line[10:]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 elif line.startswith(b'# Parent '): |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
533 parents.append(bin(line[9:])) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
534 elif not line.startswith(b'# '): |
3759
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
535 inmsg = True |
e96f97ca0358
transplant: split filter args into changelog entry and patch
Brendan Cully <brendan@kublai.com>
parents:
3758
diff
changeset
|
536 message.append(line) |
13789
7e5031180c0f
transplant: fix crash if filter script munges log file
Luke Plant <L.Plant.98@cantab.net>
parents:
13742
diff
changeset
|
537 if None in (user, date): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
538 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 _(b"filter corrupted changeset (no user or date)") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
540 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
541 return (node, user, date, b'\n'.join(message), parents) |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4251
diff
changeset
|
542 |
3725
ccc7a9eb0e5e
transplant: preserve filter changes in --continue log
Brendan Cully <brendan@kublai.com>
parents:
3724
diff
changeset
|
543 def log(self, user, date, message, p1, p2, merge=False): |
3714 | 544 '''journal changelog metadata for later recover''' |
545 | |
546 if not os.path.isdir(self.path): | |
547 os.mkdir(self.path) | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
548 fp = self.opener(b'journal', b'w') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
549 fp.write(b'# User %s\n' % user) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 fp.write(b'# Date %s\n' % date) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
551 fp.write(b'# Node ID %s\n' % hex(p2)) |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
552 fp.write(b'# Parent ' + hex(p1) + b'\n') |
3714 | 553 if merge: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
554 fp.write(b'# Parent ' + hex(p2) + b'\n') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 fp.write(message.rstrip() + b'\n') |
3714 | 556 fp.close() |
557 | |
558 def readlog(self): | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 return self.parselog(self.opener(b'journal')) |
3714 | 560 |
561 def unlog(self): | |
562 '''remove changelog journal''' | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 absdst = os.path.join(self.path, b'journal') |
3714 | 564 if os.path.exists(absdst): |
565 os.unlink(absdst) | |
566 | |
567 def transplantfilter(self, repo, source, root): | |
568 def matchfn(node): | |
569 if self.applied(repo, node, root): | |
570 return False | |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
571 if source.changelog.parents(node)[1] != nullid: |
3714 | 572 return False |
573 extra = source.changelog.read(node)[5] | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
574 cnode = extra.get(b'transplant_source') |
3714 | 575 if cnode and self.applied(repo, cnode, root): |
576 return False | |
577 return True | |
578 | |
579 return matchfn | |
580 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
581 |
3714 | 582 def hasnode(repo, node): |
583 try: | |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
12823
diff
changeset
|
584 return repo.changelog.rev(node) is not None |
39777
b63dee7bd0d9
global: replace most uses of RevlogError with StorageError (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38370
diff
changeset
|
585 except error.StorageError: |
3714 | 586 return False |
587 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
588 |
3714 | 589 def browserevs(ui, repo, nodes, opts): |
590 '''interactively transplant changesets''' | |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
34469
diff
changeset
|
591 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
3714 | 592 transplants = [] |
593 merges = [] | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
594 prompt = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
595 b'apply changeset? [ynmpcq?]:' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
596 b'$$ &yes, transplant this changeset' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
597 b'$$ &no, skip this changeset' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
598 b'$$ &merge at this changeset' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
599 b'$$ show &patch' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
600 b'$$ &commit selected changesets' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 b'$$ &quit and cancel transplant' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 b'$$ &? (show this help)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
603 ) |
3714 | 604 for node in nodes: |
7369
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7308
diff
changeset
|
605 displayer.show(repo[node]) |
3714 | 606 action = None |
607 while not action: | |
38370
c7eb9bce6041
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38369
diff
changeset
|
608 choice = ui.promptchoice(prompt) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
609 action = b'ynmpcq?'[choice : choice + 1] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
610 if action == b'?': |
20269
acb6cceaffd5
transplant: use "ui.extractchoices()" to show the list of available responses
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20268
diff
changeset
|
611 for c, t in ui.extractchoices(prompt)[1]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
612 ui.write(b'%s: %s\n' % (c, t)) |
3714 | 613 action = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
614 elif action == b'p': |
3714 | 615 parent = repo.changelog.parents(node)[0] |
7308
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7280
diff
changeset
|
616 for chunk in patch.diff(repo, parent, node): |
8615
94ca38e63576
use ui instead of repo.ui when the former is in scope
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
617 ui.write(chunk) |
3714 | 618 action = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
619 if action == b'y': |
3714 | 620 transplants.append(node) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
621 elif action == b'm': |
3714 | 622 merges.append(node) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 elif action == b'c': |
3714 | 624 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
625 elif action == b'q': |
3714 | 626 transplants = () |
627 merges = () | |
628 break | |
10152
56284451a22c
Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents:
9995
diff
changeset
|
629 displayer.close() |
3714 | 630 return (transplants, merges) |
631 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
632 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
633 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 b'transplant', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
635 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
637 b's', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
638 b'source', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
639 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
640 _(b'transplant changesets from REPO'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
641 _(b'REPO'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
642 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
643 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
644 b'b', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
645 b'branch', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
646 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
647 _(b'use this source changeset as head'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
648 _(b'REV'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
649 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
650 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
651 b'a', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
652 b'all', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
653 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
654 _(b'pull all changesets up to the --branch revisions'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
655 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
656 (b'p', b'prune', [], _(b'skip over REV'), _(b'REV')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
657 (b'm', b'merge', [], _(b'merge at REV'), _(b'REV')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
658 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
659 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
660 b'parent', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
662 _(b'parent to choose when transplanting merge'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
664 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 (b'e', b'edit', False, _(b'invoke editor on commit messages')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
666 (b'', b'log', None, _(b'append transplant info to log message')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 (b'', b'stop', False, _(b'stop interrupted transplant')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
668 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
669 b'c', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
670 b'continue', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
671 None, |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43104
diff
changeset
|
672 _(b'continue last transplant session after fixing conflicts'), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
673 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
674 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
675 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
676 b'filter', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
677 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
678 _(b'filter changesets through command'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
679 _(b'CMD'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
680 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
681 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
682 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
683 b'hg transplant [-s REPO] [-b BRANCH [-a]] [-p REV] ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
684 b'[-m REV] [REV]...' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
685 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
686 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
687 ) |
3714 | 688 def transplant(ui, repo, *revs, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
689 """transplant changesets from another branch |
3714 | 690 |
691 Selected changesets will be applied on top of the current working | |
13605
888ec2650c2d
transplant: explain that changesets are copied, not moved
Martin Geisler <mg@lazybytes.net>
parents:
13031
diff
changeset
|
692 directory with the log of the original changeset. The changesets |
19028
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
693 are copied and will thus appear twice in the history with different |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
694 identities. |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
695 |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
696 Consider using the graft command if everything is inside the same |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
697 repository - it will use merges and will usually give a better result. |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
698 Use the rebase extension if the changesets are unpublished and you want |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
699 to move them instead of copying them. |
13605
888ec2650c2d
transplant: explain that changesets are copied, not moved
Martin Geisler <mg@lazybytes.net>
parents:
13031
diff
changeset
|
700 |
888ec2650c2d
transplant: explain that changesets are copied, not moved
Martin Geisler <mg@lazybytes.net>
parents:
13031
diff
changeset
|
701 If --log is specified, log messages will have a comment appended |
888ec2650c2d
transplant: explain that changesets are copied, not moved
Martin Geisler <mg@lazybytes.net>
parents:
13031
diff
changeset
|
702 of the form:: |
3714 | 703 |
9200
6b4c527c3d22
transplant: better reST formatting
Martin Geisler <mg@lazybytes.net>
parents:
9196
diff
changeset
|
704 (transplanted from CHANGESETHASH) |
3714 | 705 |
706 You can rewrite the changelog message with the --filter option. | |
8000
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
707 Its argument will be invoked with the current changelog message as |
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
708 $1 and the patch as $2. |
3714 | 709 |
19028
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
710 --source/-s specifies another repository to use for selecting changesets, |
b512934988d4
transplant: improve documentation
Mads Kiilerich <madski@unity3d.com>
parents:
19027
diff
changeset
|
711 just as if it temporarily had been pulled. |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
712 If --branch/-b is specified, these revisions will be used as |
19951
d51c4d85ec23
spelling: random spell checker fixes
Mads Kiilerich <madski@unity3d.com>
parents:
19496
diff
changeset
|
713 heads when deciding which changesets to transplant, just as if only |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
714 these revisions had been pulled. |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
715 If --all/-a is specified, all the revisions up to the heads specified |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
716 with --branch will be transplanted. |
3714 | 717 |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
718 Example: |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
719 |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
720 - transplant all changes up to REV on top of your current revision:: |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
721 |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
722 hg transplant --branch REV --all |
3714 | 723 |
8000
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
724 You can optionally mark selected transplanted changesets as merge |
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
725 changesets. You will not be prompted to transplant any ancestors |
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
726 of a merged transplant, and you can merge descendants of them |
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
727 normally instead of transplanting them. |
3714 | 728 |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
729 Merge changesets may be transplanted directly by specifying the |
16457
91196ebcaeed
transplant: remove extraneous whitespace
Steven Stallion <sstallion@gmail.com>
parents:
16400
diff
changeset
|
730 proper parent changeset by calling :hg:`transplant --parent`. |
16400
f2ba409dbb0f
transplant: permit merge changesets via --parent
Steven Stallion <sstallion@gmail.com>
parents:
15220
diff
changeset
|
731 |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
10510
diff
changeset
|
732 If no merges or revisions are provided, :hg:`transplant` will |
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
10510
diff
changeset
|
733 start an interactive changeset browser. |
3714 | 734 |
8000
83d7c9cfb065
transplant: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
735 If a changeset application fails, you can fix the merge by hand |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
10510
diff
changeset
|
736 and then resume where you left off by calling :hg:`transplant |
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
10510
diff
changeset
|
737 --continue/-c`. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
738 """ |
27840
dc237afacbd4
with: use context manager for wlock in transplant
Bryan O'Sullivan <bryano@fb.com>
parents:
27678
diff
changeset
|
739 with repo.wlock(): |
27289
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
740 return _dotransplant(ui, repo, *revs, **opts) |
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
741 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
742 |
27289
ee33e677f0ac
transplant: widen wlock scope of transplant for consitency while processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
743 def _dotransplant(ui, repo, *revs, **opts): |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
744 def incwalk(repo, csets, match=util.always): |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
745 for node in csets: |
3714 | 746 if match(node): |
747 yield node | |
748 | |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
749 def transplantwalk(repo, dest, heads, match=util.always): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
750 """Yield all nodes that are ancestors of a head but not ancestors |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
751 of dest. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
752 If no heads are specified, the heads of repo will be used.""" |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
753 if not heads: |
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
754 heads = repo.heads() |
3714 | 755 ancestors = [] |
20988
8c2f1e2a11ff
transplant: use context ancestor instead of changelog ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20442
diff
changeset
|
756 ctx = repo[dest] |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
757 for head in heads: |
20988
8c2f1e2a11ff
transplant: use context ancestor instead of changelog ancestor
Mads Kiilerich <madski@unity3d.com>
parents:
20442
diff
changeset
|
758 ancestors.append(ctx.ancestor(repo[head]).node()) |
19027
3f5fac4b1cfa
transplant: clarify what --branch do - it has nothing to do with branches
Mads Kiilerich <madski@unity3d.com>
parents:
18926
diff
changeset
|
759 for node in repo.changelog.nodesbetween(ancestors, heads)[0]: |
3714 | 760 if match(node): |
761 yield node | |
762 | |
763 def checkopts(opts, revs): | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
764 if opts.get(b'continue'): |
43903
d50b4ad1d4a5
transplant: use check_incompatible_arguments()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43642
diff
changeset
|
765 cmdutil.check_incompatible_arguments( |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
43903
diff
changeset
|
766 opts, b'continue', [b'branch', b'all', b'merge'] |
43903
d50b4ad1d4a5
transplant: use check_incompatible_arguments()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43642
diff
changeset
|
767 ) |
3714 | 768 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
769 if opts.get(b'stop'): |
43903
d50b4ad1d4a5
transplant: use check_incompatible_arguments()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43642
diff
changeset
|
770 cmdutil.check_incompatible_arguments( |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
43903
diff
changeset
|
771 opts, b'stop', [b'branch', b'all', b'merge'] |
43903
d50b4ad1d4a5
transplant: use check_incompatible_arguments()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43642
diff
changeset
|
772 ) |
42762
ac6121a24f27
transplant: added support for --stop flag
Taapas Agrawal <taapas2897@gmail.com>
parents:
42717
diff
changeset
|
773 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
774 if not ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 opts.get(b'source') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
776 or revs |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
777 or opts.get(b'merge') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
778 or opts.get(b'branch') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
779 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
780 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
781 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
782 b'no source URL, branch revision, or revision ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
783 b'list provided' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
784 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
785 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
786 if opts.get(b'all'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
787 if not opts.get(b'branch'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
788 raise error.Abort(_(b'--all requires a branch revision')) |
3714 | 789 if revs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
790 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43104
diff
changeset
|
791 _(b'--all is incompatible with a revision list') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
792 ) |
3714 | 793 |
36190
7fda2a8ed24e
py3: use pycompat.{bytes|str}kwargs in transplant.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36189
diff
changeset
|
794 opts = pycompat.byteskwargs(opts) |
3714 | 795 checkopts(opts, revs) |
796 | |
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'log'): |
25828
5ae4b128a291
transplant: mark some undocumented options deprecated
Matt Mackall <mpm@selenic.com>
parents:
25695
diff
changeset
|
798 # deprecated config: transplant.log |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
799 opts[b'log'] = ui.config(b'transplant', b'log') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
800 if not opts.get(b'filter'): |
25828
5ae4b128a291
transplant: mark some undocumented options deprecated
Matt Mackall <mpm@selenic.com>
parents:
25695
diff
changeset
|
801 # deprecated config: transplant.filter |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
802 opts[b'filter'] = ui.config(b'transplant', b'filter') |
3714 | 803 |
21411
afff78be4361
transplant: use "getcommiteditor()" instead of explicit editor choice
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20988
diff
changeset
|
804 tp = transplanter(ui, repo, opts) |
3714 | 805 |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
41371
diff
changeset
|
806 p1 = repo.dirstate.p1() |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
807 if len(repo) > 0 and p1 == nullid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
808 raise error.Abort(_(b'no revision checked out')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
809 if opts.get(b'continue'): |
27677
128ef8828ed5
transplant: only use checkunfinished if not continue
timeless <timeless@mozdev.org>
parents:
27676
diff
changeset
|
810 if not tp.canresume(): |
45840
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45576
diff
changeset
|
811 raise error.StateError(_(b'no transplant to continue')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
812 elif opts.get(b'stop'): |
42765
0770e221d24b
transplant: unnest --stop case
Yuya Nishihara <yuya@tcha.org>
parents:
42762
diff
changeset
|
813 if not tp.canresume(): |
45840
527ce85c2e60
errors: introduce StateError and use it from commands and cmdutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
45576
diff
changeset
|
814 raise error.StateError(_(b'no interrupted transplant found')) |
42765
0770e221d24b
transplant: unnest --stop case
Yuya Nishihara <yuya@tcha.org>
parents:
42762
diff
changeset
|
815 return tp.stop(ui, repo) |
27677
128ef8828ed5
transplant: only use checkunfinished if not continue
timeless <timeless@mozdev.org>
parents:
27676
diff
changeset
|
816 else: |
128ef8828ed5
transplant: only use checkunfinished if not continue
timeless <timeless@mozdev.org>
parents:
27676
diff
changeset
|
817 cmdutil.checkunfinished(repo) |
41371
608c15f76f50
transplant: use bailifchanged() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
40366
diff
changeset
|
818 cmdutil.bailifchanged(repo) |
3714 | 819 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
820 sourcerepo = opts.get(b'source') |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
821 if sourcerepo: |
46944
0428e555acb7
transplant: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46113
diff
changeset
|
822 u = urlutil.get_unique_pull_path(b'transplant', repo, ui, sourcerepo)[0] |
0428e555acb7
transplant: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46113
diff
changeset
|
823 peer = hg.peer(repo, opts, u) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
824 heads = pycompat.maplist(peer.lookup, opts.get(b'branch', ())) |
25679
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
825 target = set(heads) |
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
826 for r in revs: |
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
827 try: |
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
828 target.add(peer.lookup(r)) |
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
829 except error.RepoError: |
540cd0ddac49
transplant: only pull the transplanted revision (issue4692)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24365
diff
changeset
|
830 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
831 source, csets, cleanupfn = bundlerepo.getremotechanges( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
832 ui, repo, peer, onlyheads=sorted(target), force=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
833 ) |
3714 | 834 else: |
835 source = repo | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
836 heads = pycompat.maplist(source.lookup, opts.get(b'branch', ())) |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
837 cleanupfn = None |
3714 | 838 |
839 try: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
840 if opts.get(b'continue'): |
3724
ea523d6f5f1a
transplant: fix --continue; add --continue test
Brendan Cully <brendan@kublai.com>
parents:
3723
diff
changeset
|
841 tp.resume(repo, source, opts) |
3714 | 842 return |
843 | |
10394
4612cded5176
fix coding style (reported by pylint)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
844 tf = tp.transplantfilter(repo, source, p1) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
845 if opts.get(b'prune'): |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44194
diff
changeset
|
846 prune = { |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
847 source[r].node() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
848 for r in scmutil.revrange(source, opts.get(b'prune')) |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44194
diff
changeset
|
849 } |
3714 | 850 matchfn = lambda x: tf(x) and x not in prune |
851 else: | |
852 matchfn = tf | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
853 merges = pycompat.maplist(source.lookup, opts.get(b'merge', ())) |
3714 | 854 revmap = {} |
855 if revs: | |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14308
diff
changeset
|
856 for r in scmutil.revrange(source, revs): |
37311
2a8939e25d07
transplant: avoid repo.lookup() for converting revnum to nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37120
diff
changeset
|
857 revmap[int(r)] = source[r].node() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 elif opts.get(b'all') or not merges: |
3714 | 859 if source != repo: |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
860 alltransplants = incwalk(source, csets, match=matchfn) |
3714 | 861 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
862 alltransplants = transplantwalk( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
863 source, p1, heads, match=matchfn |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
864 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
865 if opts.get(b'all'): |
3714 | 866 revs = alltransplants |
867 else: | |
868 revs, newmerges = browserevs(ui, source, alltransplants, opts) | |
869 merges.extend(newmerges) | |
870 for r in revs: | |
871 revmap[source.changelog.rev(r)] = r | |
872 for r in merges: | |
873 revmap[source.changelog.rev(r)] = r | |
874 | |
875 tp.apply(repo, source, revmap, merges, opts) | |
876 finally: | |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
877 if cleanupfn: |
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14073
diff
changeset
|
878 cleanupfn() |
3714 | 879 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
880 |
42717
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
881 def continuecmd(ui, repo): |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
882 """logic to resume an interrupted transplant using |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
883 'hg continue'""" |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
884 with repo.wlock(): |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
885 tp = transplanter(ui, repo, {}) |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
886 return tp.resume(repo, repo, {}) |
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
887 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
888 |
28394
dcb4209bd30d
revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27840
diff
changeset
|
889 revsetpredicate = registrar.revsetpredicate() |
27586
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27344
diff
changeset
|
890 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
891 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
892 @revsetpredicate(b'transplanted([set])') |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
893 def revsettransplanted(repo, subset, x): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45840
diff
changeset
|
894 """Transplanted changesets in set, or all transplanted changesets.""" |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
895 if x: |
17299
e51d4aedace9
check-code: indent 4 spaces in py files
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
896 s = revset.getset(repo, subset, x) |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
897 else: |
17299
e51d4aedace9
check-code: indent 4 spaces in py files
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
898 s = subset |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
899 return smartset.baseset( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
900 [r for r in s if repo[r].extra().get(b'transplant_source')] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
901 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
902 |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
903 |
28540
012411b9940d
hgext: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28481
diff
changeset
|
904 templatekeyword = registrar.templatekeyword() |
012411b9940d
hgext: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28481
diff
changeset
|
905 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
906 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
907 @templatekeyword(b'transplanted', requires={b'ctx'}) |
36514
7b74afec6772
templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents:
36229
diff
changeset
|
908 def kwtransplanted(context, mapping): |
28540
012411b9940d
hgext: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28481
diff
changeset
|
909 """String. The node identifier of the transplanted |
13689
65399579da68
transplant: add "transplanted" keyword
Patrick Mezard <pmezard@gmail.com>
parents:
13607
diff
changeset
|
910 changeset if any.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
911 ctx = context.resource(mapping, b'ctx') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
912 n = ctx.extra().get(b'transplant_source') |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
913 return n and hex(n) or b'' |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
914 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
915 |
12822
f13acb96b2a7
Fix and unify transplant and bookmarks revsets doc registration
Patrick Mezard <pmezard@gmail.com>
parents:
12734
diff
changeset
|
916 def extsetup(ui): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
917 statemod.addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
918 b'transplant', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
919 fname=b'transplant/journal', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
920 clearable=True, |
42717
0a4303c77637
continue: added support for transplant
Taapas Agrawal <taapas2897@gmail.com>
parents:
42532
diff
changeset
|
921 continuefunc=continuecmd, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
922 statushint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
923 b'To continue: hg transplant --continue\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
924 b'To stop: hg transplant --stop' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
925 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
926 cmdhint=_(b"use 'hg transplant --continue' or 'hg transplant --stop'"), |
42530
dc3fdd1b5af4
state: created new class statecheck to handle unfinishedstates
Taapas Agrawal <taapas2897@gmail.com>
parents:
42529
diff
changeset
|
927 ) |
12581
19dabc8a3236
transplant: add the transplanted revset predicate
Juan Pablo Aroztegi <juanpablo.aroztegi@openbravo.com>
parents:
12349
diff
changeset
|
928 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42765
diff
changeset
|
929 |
12823
80deae3bc5ea
hggettext: handle i18nfunctions declaration for docstrings translations
Patrick Mezard <pmezard@gmail.com>
parents:
12822
diff
changeset
|
930 # tell hggettext to extract docstrings from these functions: |
13698
f30ce5983896
i18n: register new template keywords for translation
Patrick Mezard <pmezard@gmail.com>
parents:
13689
diff
changeset
|
931 i18nfunctions = [revsettransplanted, kwtransplanted] |