Mercurial > hg
annotate hgext/rebase.py @ 45073:54009f8c3e25
fix: obtain base paths before starting workers
This moves calculation of base paths to before work is dispatched.
While this does mean that copy tracing will be serialized instead of
parallel, it is necessary to be able to prefetch the base contents
in a batch, which will likely be more efficient.
Differential Revision: https://phab.mercurial-scm.org/D8722
author | Rodrigo Damazio Bovendorp <rdamazio@google.com> |
---|---|
date | Thu, 09 Jul 2020 20:45:35 -0700 |
parents | 78cafd48b9b2 |
children | a0192a03216d |
rev | line source |
---|---|
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1 # rebase.py - rebasing feature for mercurial |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2 # |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2008 Stefano Tortarolo <stefano.tortarolo at gmail dot com> |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8222
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. |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
7 |
8934
9dda4c73fc3b
extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8706
diff
changeset
|
8 '''command to move sets of revisions to a different ancestor |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
9 |
7999
b25110140573
rebase: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7955
diff
changeset
|
10 This extension lets you rebase changesets in an existing Mercurial |
b25110140573
rebase: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7955
diff
changeset
|
11 repository. |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
12 |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
13 For more information: |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
26360
diff
changeset
|
14 https://mercurial-scm.org/wiki/RebaseExtension |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
15 ''' |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
16 |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
17 from __future__ import absolute_import |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
18 |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
19 import errno |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
20 import os |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
21 |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
22 from mercurial.i18n import _ |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
23 from mercurial.node import ( |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
24 nullrev, |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
25 short, |
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
29128
diff
changeset
|
26 ) |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
27 from mercurial.pycompat import open |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
28 from mercurial import ( |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
29 bookmarks, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
30 cmdutil, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
31 commands, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
32 copies, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
33 destutil, |
30490
ee2097c560c1
rebase: refer to dirstateguard by its new name
Augie Fackler <augie@google.com>
parents:
30459
diff
changeset
|
34 dirstateguard, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
35 error, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
36 extensions, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
37 hg, |
30271
0fa1a41d04e4
rebase: rename merge to mergemod
timeless <timeless@mozdev.org>
parents:
30007
diff
changeset
|
38 merge as mergemod, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44666
diff
changeset
|
39 mergestate as mergestatemod, |
30495
d528ddc11b33
rebase: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents:
30490
diff
changeset
|
40 mergeutil, |
44239
830eae18b2f3
rebase: abort if the user tries to rebase the working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44214
diff
changeset
|
41 node as nodemod, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
42 obsolete, |
33145
0a370b93cca2
obsutil: move 'allsuccessors' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33139
diff
changeset
|
43 obsutil, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
44 patch, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
45 phases, |
35002
1a07f9187831
py3: handle keyword arguments in hgext/rebase.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34963
diff
changeset
|
46 pycompat, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
47 registrar, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
48 repair, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
49 revset, |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
50 revsetlang, |
43934
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
51 rewriteutil, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
52 scmutil, |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30865
diff
changeset
|
53 smartset, |
38516
7c853edcf4ed
rebase: add a stateobj variable to rebaseruntime class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38515
diff
changeset
|
54 state as statemod, |
29128
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
55 util, |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
56 ) |
e521cb13d354
py3: make hgext/rebase.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29063
diff
changeset
|
57 |
26669
07db7e95c464
rebase: added comments
Christian Delahousse <cdelahousse@fb.com>
parents:
26587
diff
changeset
|
58 # The following constants are used throughout the rebase module. The ordering of |
07db7e95c464
rebase: added comments
Christian Delahousse <cdelahousse@fb.com>
parents:
26587
diff
changeset
|
59 # their values must be maintained. |
07db7e95c464
rebase: added comments
Christian Delahousse <cdelahousse@fb.com>
parents:
26587
diff
changeset
|
60 |
07db7e95c464
rebase: added comments
Christian Delahousse <cdelahousse@fb.com>
parents:
26587
diff
changeset
|
61 # Indicates that a revision needs to be rebased |
23490
102f144f6e02
rebase: add a 'revtodo' constant
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23489
diff
changeset
|
62 revtodo = -1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 revtodostr = b'-1' |
33843
d8d0ef5f5975
rebase: remove revprecursor and revpruned states (BC)
Jun Wu <quark@fb.com>
parents:
33842
diff
changeset
|
64 |
d8d0ef5f5975
rebase: remove revprecursor and revpruned states (BC)
Jun Wu <quark@fb.com>
parents:
33842
diff
changeset
|
65 # legacy revstates no longer needed in current code |
33845
3ddbab49efcf
rebase: remove revignored and nullmerge states
Jun Wu <quark@fb.com>
parents:
33844
diff
changeset
|
66 # -2: nullmerge, -3: revignored, -4: revprecursor, -5: revpruned |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
67 legacystates = {b'-2', b'-3', b'-4', b'-5'} |
10352
66d954e76ffb
rebase: add --detach option to detach intermediate revisions (issue1950)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10351
diff
changeset
|
68 |
14306
db2a8eabe952
rebase: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14289
diff
changeset
|
69 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32327
diff
changeset
|
70 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29610
diff
changeset
|
71 # 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:
25102
diff
changeset
|
72 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
25102
diff
changeset
|
73 # 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:
25102
diff
changeset
|
74 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 testedwith = b'ships-with-hg-core' |
14306
db2a8eabe952
rebase: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14289
diff
changeset
|
76 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
77 |
26671
66dc39cd7d06
rebase: factor out nothing to rebase return code
Ryan McElroy <rmcelroy@fb.com>
parents:
26669
diff
changeset
|
78 def _nothingtorebase(): |
66dc39cd7d06
rebase: factor out nothing to rebase return code
Ryan McElroy <rmcelroy@fb.com>
parents:
26669
diff
changeset
|
79 return 1 |
66dc39cd7d06
rebase: factor out nothing to rebase return code
Ryan McElroy <rmcelroy@fb.com>
parents:
26669
diff
changeset
|
80 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
81 |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
82 def _savegraft(ctx, extra): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
83 s = ctx.extra().get(b'source', None) |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
84 if s is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
85 extra[b'source'] = s |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
86 s = ctx.extra().get(b'intermediate-source', None) |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
87 if s is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
88 extra[b'intermediate-source'] = s |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
89 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
90 |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
91 def _savebranch(ctx, extra): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
92 extra[b'branch'] = ctx.branch() |
27976
8f4d3eeb5198
rebase: backout changeset d755a9531fce
Siddharth Agarwal <sid0@fb.com>
parents:
27975
diff
changeset
|
93 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
94 |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28686
diff
changeset
|
95 def _destrebase(repo, sourceset, destspace=None): |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
96 """small wrapper around destmerge to pass the right extra args |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
97 |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
98 Please wrap destutil.destmerge instead.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
99 return destutil.destmerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
100 repo, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
101 action=b'rebase', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
102 sourceset=sourceset, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
103 onheadcheck=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
104 destspace=destspace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
105 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
106 |
26717
1755e1d9d1c3
rebase: extra default destination in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26677
diff
changeset
|
107 |
28394
dcb4209bd30d
revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28280
diff
changeset
|
108 revsetpredicate = registrar.revsetpredicate() |
27586
42910f9fffeb
revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27577
diff
changeset
|
109 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
110 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
111 @revsetpredicate(b'_destrebase') |
26719
8bed1eae99df
rebase: rename and test '_destrebase'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26718
diff
changeset
|
112 def _revsetdestrebase(repo, subset, x): |
26301
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
113 # ``_rebasedefaultdest()`` |
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
114 |
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
115 # default destination for rebase. |
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
116 # # XXX: Currently private because I expect the signature to change. |
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
117 # # XXX: - bailing out in case of ambiguity vs returning all data. |
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
118 # i18n: "_rebasedefaultdest" is a keyword |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
119 sourceset = None |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
120 if x is not None: |
31023
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30865
diff
changeset
|
121 sourceset = revset.getset(repo, smartset.fullreposet(repo), x) |
aea06029919e
revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents:
30865
diff
changeset
|
122 return subset & smartset.baseset([_destrebase(repo, sourceset)]) |
26301
3f8c5c284c86
rebase: move destination computation in a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26165
diff
changeset
|
123 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
124 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
125 @revsetpredicate(b'_destautoorphanrebase') |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
126 def _revsetdestautoorphanrebase(repo, subset, x): |
42299
80a213f9ed87
rebase: hide help for revisions.Predicates._destautoorphanrebase
timeless <timeless@mozdev.org>
parents:
42108
diff
changeset
|
127 # ``_destautoorphanrebase()`` |
80a213f9ed87
rebase: hide help for revisions.Predicates._destautoorphanrebase
timeless <timeless@mozdev.org>
parents:
42108
diff
changeset
|
128 |
80a213f9ed87
rebase: hide help for revisions.Predicates._destautoorphanrebase
timeless <timeless@mozdev.org>
parents:
42108
diff
changeset
|
129 # automatic rebase destination for a single orphan revision. |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
130 unfi = repo.unfiltered() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 obsoleted = unfi.revs(b'obsolete()') |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
132 |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
133 src = revset.getset(repo, subset, x).first() |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
134 |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
135 # Empty src or already obsoleted - Do not return a destination |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
136 if not src or src in obsoleted: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
137 return smartset.baseset() |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
138 dests = destutil.orphanpossibledestination(repo, src) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
139 if len(dests) > 1: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
140 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
141 _(b"ambiguous automatic rebase: %r could end up on any of %r") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
142 % (src, dests) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
143 ) |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
144 # We have zero or one destination, so we can just return here. |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
145 return smartset.baseset(dests) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
146 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
147 |
33841
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
148 def _ctxdesc(ctx): |
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
149 """short description for a context""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 desc = b'%d:%s "%s"' % ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 ctx.rev(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
152 ctx, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
153 ctx.description().split(b'\n', 1)[0], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 ) |
33841
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
155 repo = ctx.repo() |
34290
4f969b9e0cf5
rebase: also include other namespaces in changeset description
Martin von Zweigbergk <martinvonz@google.com>
parents:
34095
diff
changeset
|
156 names = [] |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
157 for nsname, ns in pycompat.iteritems(repo.names): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 if nsname == b'branches': |
34290
4f969b9e0cf5
rebase: also include other namespaces in changeset description
Martin von Zweigbergk <martinvonz@google.com>
parents:
34095
diff
changeset
|
159 continue |
4f969b9e0cf5
rebase: also include other namespaces in changeset description
Martin von Zweigbergk <martinvonz@google.com>
parents:
34095
diff
changeset
|
160 names.extend(ns.names(repo, ctx.node())) |
33841
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
161 if names: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 desc += b' (%s)' % b' '.join(names) |
33841
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
163 return desc |
35fc5e919675
rebase: extract ctx description logic to a function
Jun Wu <quark@fb.com>
parents:
33789
diff
changeset
|
164 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
165 |
29358
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
166 class rebaseruntime(object): |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
167 """This class is a container for rebase runtime state""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
168 |
35388
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
169 def __init__(self, repo, ui, inmemory=False, opts=None): |
29399
adb0d58b8b0b
rebase: pass repo, ui and opts objects to the RR class constructor
Kostia Balytskyi <ikostia@fb.com>
parents:
29372
diff
changeset
|
170 if opts is None: |
adb0d58b8b0b
rebase: pass repo, ui and opts objects to the RR class constructor
Kostia Balytskyi <ikostia@fb.com>
parents:
29372
diff
changeset
|
171 opts = {} |
adb0d58b8b0b
rebase: pass repo, ui and opts objects to the RR class constructor
Kostia Balytskyi <ikostia@fb.com>
parents:
29372
diff
changeset
|
172 |
34094
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
173 # prepared: whether we have rebasestate prepared or not. Currently it |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
174 # decides whether "self.repo" is unfiltered or not. |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
175 # The rebasestate has explicit hash to hash instructions not depending |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
176 # on visibility. If rebasestate exists (in-memory or on-disk), use |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
177 # unfiltered repo to avoid visibility issues. |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
178 # Before knowing rebasestate (i.e. when starting a new rebase (not |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
179 # --continue or --abort)), the original repo should be used so |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
180 # visibility-dependent revsets are correct. |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
181 self.prepared = False |
44346
b42ce825308e
rebase: stop relying on having two parents to resume rebase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44341
diff
changeset
|
182 self.resume = False |
34094
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
183 self._repo = repo |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
184 |
29399
adb0d58b8b0b
rebase: pass repo, ui and opts objects to the RR class constructor
Kostia Balytskyi <ikostia@fb.com>
parents:
29372
diff
changeset
|
185 self.ui = ui |
adb0d58b8b0b
rebase: pass repo, ui and opts objects to the RR class constructor
Kostia Balytskyi <ikostia@fb.com>
parents:
29372
diff
changeset
|
186 self.opts = opts |
29358
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
187 self.originalwd = None |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
188 self.external = nullrev |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
189 # Mapping between the old revision id and either what is the new rebased |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
190 # revision or what needs to be done with the old revision. The state |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
191 # dict will be what contains most of the rebase progress state. |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
192 self.state = {} |
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
193 self.activebookmark = None |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
194 self.destmap = {} |
29360
4cbe62ab5c97
rebase: move local variable 'skipped' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29359
diff
changeset
|
195 self.skipped = set() |
29358
6e83f5bbed8d
rebase: introduce a rebaseruntime (RR) class
Kostia Balytskyi <ikostia@fb.com>
parents:
29205
diff
changeset
|
196 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
197 self.collapsef = opts.get(b'collapse', False) |
29400
c79da70a4659
rebase: move collapse-related local variables to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29399
diff
changeset
|
198 self.collapsemsg = cmdutil.logmessage(ui, opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 self.date = opts.get(b'date', None) |
29401
87acd047711e
rebase: move local variables 'date' and 'extrafns' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29400
diff
changeset
|
200 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
201 e = opts.get(b'extrafn') # internal, used by e.g. hgsubversion |
29401
87acd047711e
rebase: move local variables 'date' and 'extrafns' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29400
diff
changeset
|
202 self.extrafns = [_savegraft] |
87acd047711e
rebase: move local variables 'date' and 'extrafns' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29400
diff
changeset
|
203 if e: |
87acd047711e
rebase: move local variables 'date' and 'extrafns' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29400
diff
changeset
|
204 self.extrafns = [e] |
29400
c79da70a4659
rebase: move collapse-related local variables to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29399
diff
changeset
|
205 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 self.backupf = ui.configbool(b'rewrite', b'backup-bundle') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 self.keepf = opts.get(b'keep', False) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
208 self.keepbranchesf = opts.get(b'keepbranches', False) |
29404
591a8069b60e
rebase: move local variable 'obsoletenotrebased' to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29403
diff
changeset
|
209 self.obsoletenotrebased = {} |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
210 self.obsoletewithoutsuccessorindestination = set() |
35388
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
211 self.inmemory = inmemory |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 self.stateobj = statemod.cmdstate(repo, b'rebasestate') |
29402
7481ffb7ff83
rebase: move local variables related to keeping things unchanged to the RR
Kostia Balytskyi <ikostia@fb.com>
parents:
29401
diff
changeset
|
213 |
34094
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
214 @property |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
215 def repo(self): |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
216 if self.prepared: |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
217 return self._repo.unfiltered() |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
218 else: |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
219 return self._repo |
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
220 |
31224
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
221 def storestatus(self, tr=None): |
31223
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
222 """Store the current status to allow recovery""" |
31224
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
223 if tr: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
224 tr.addfilegenerator( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 b'rebasestate', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 (b'rebasestate',), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
227 self._writestatus, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
228 location=b'plain', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
229 ) |
31224
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
230 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
231 with self.repo.vfs(b"rebasestate", b"w") as f: |
31224
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
232 self._writestatus(f) |
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
233 |
183eb1d7f87d
rebase: add storestatus support for transactions
Durham Goode <durham@fb.com>
parents:
31223
diff
changeset
|
234 def _writestatus(self, f): |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
235 repo = self.repo |
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
236 assert repo.filtername is None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 f.write(repo[self.originalwd].hex() + b'\n') |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
238 # was "dest". we now write dest per src root below. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 f.write(b'\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 f.write(repo[self.external].hex() + b'\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
241 f.write(b'%d\n' % int(self.collapsef)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
242 f.write(b'%d\n' % int(self.keepf)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
243 f.write(b'%d\n' % int(self.keepbranchesf)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 f.write(b'%s\n' % (self.activebookmark or b'')) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
245 destmap = self.destmap |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
246 for d, v in pycompat.iteritems(self.state): |
31223
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
247 oldrev = repo[d].hex() |
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
248 if v >= 0: |
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
249 newrev = repo[v].hex() |
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
250 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
251 newrev = b"%d" % v |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
252 destnode = repo[destmap[d]].hex() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 f.write(b"%s:%s:%s\n" % (oldrev, newrev, destnode)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 repo.ui.debug(b'rebase status stored\n') |
31223
685b8d077577
rebase: move storestatus onto rebaseruntime
Durham Goode <durham@fb.com>
parents:
31222
diff
changeset
|
255 |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
256 def restorestatus(self): |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
257 """Restore a previously stored status""" |
38518
cf24f678adda
rebase: check whether the rebasestate exists or not a bit early
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38517
diff
changeset
|
258 if not self.stateobj.exists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
259 cmdutil.wrongtooltocontinue(self.repo, _(b'rebase')) |
38518
cf24f678adda
rebase: check whether the rebasestate exists or not a bit early
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38517
diff
changeset
|
260 |
38515
19076e2d62e7
rebase: refactor logic to read rebasestate in a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38508
diff
changeset
|
261 data = self._read() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
262 self.repo.ui.debug(b'rebase status resumed\n') |
38515
19076e2d62e7
rebase: refactor logic to read rebasestate in a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38508
diff
changeset
|
263 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
264 self.originalwd = data[b'originalwd'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
265 self.destmap = data[b'destmap'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 self.state = data[b'state'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 self.skipped = data[b'skipped'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 self.collapsef = data[b'collapse'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
269 self.keepf = data[b'keep'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
270 self.keepbranchesf = data[b'keepbranches'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 self.external = data[b'external'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 self.activebookmark = data[b'activebookmark'] |
38515
19076e2d62e7
rebase: refactor logic to read rebasestate in a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38508
diff
changeset
|
273 |
19076e2d62e7
rebase: refactor logic to read rebasestate in a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38508
diff
changeset
|
274 def _read(self): |
34094
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
275 self.prepared = True |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
276 repo = self.repo |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
277 assert repo.filtername is None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
278 data = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 b'keepbranches': None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 b'collapse': None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 b'activebookmark': None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
282 b'external': nullrev, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 b'keep': None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 b'originalwd': None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
285 } |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
286 legacydest = None |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
287 state = {} |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
288 destmap = {} |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
289 |
38518
cf24f678adda
rebase: check whether the rebasestate exists or not a bit early
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38517
diff
changeset
|
290 if True: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 f = repo.vfs(b"rebasestate") |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
292 for i, l in enumerate(f.read().splitlines()): |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
293 if i == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 data[b'originalwd'] = repo[l].rev() |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
295 elif i == 1: |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
296 # this line should be empty in newer version. but legacy |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
297 # clients may still use it |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
298 if l: |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
299 legacydest = repo[l].rev() |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
300 elif i == 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 data[b'external'] = repo[l].rev() |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
302 elif i == 3: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 data[b'collapse'] = bool(int(l)) |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
304 elif i == 4: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 data[b'keep'] = bool(int(l)) |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
306 elif i == 5: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 data[b'keepbranches'] = bool(int(l)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 elif i == 6 and not (len(l) == 81 and b':' in l): |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
309 # line 6 is a recent addition, so for backwards |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
310 # compatibility check that the line doesn't look like the |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
311 # oldrev:newrev lines |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
312 data[b'activebookmark'] = l |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
313 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
314 args = l.split(b':') |
37377
3dfd7f018c69
rebase: convert "oldrev" to revnum earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
37376
diff
changeset
|
315 oldrev = repo[args[0]].rev() |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
316 newrev = args[1] |
33843
d8d0ef5f5975
rebase: remove revprecursor and revpruned states (BC)
Jun Wu <quark@fb.com>
parents:
33842
diff
changeset
|
317 if newrev in legacystates: |
d8d0ef5f5975
rebase: remove revprecursor and revpruned states (BC)
Jun Wu <quark@fb.com>
parents:
33842
diff
changeset
|
318 continue |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
319 if len(args) > 2: |
37376
25940470c7e6
rebase: make "destnode" consistently a revnum and rename it to "destrev"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37332
diff
changeset
|
320 destrev = repo[args[2]].rev() |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
321 else: |
37376
25940470c7e6
rebase: make "destnode" consistently a revnum and rename it to "destrev"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37332
diff
changeset
|
322 destrev = legacydest |
37377
3dfd7f018c69
rebase: convert "oldrev" to revnum earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
37376
diff
changeset
|
323 destmap[oldrev] = destrev |
37378
953db9e00eeb
rebase: remove unnecessary and incorrect handling of nullid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37377
diff
changeset
|
324 if newrev == revtodostr: |
37377
3dfd7f018c69
rebase: convert "oldrev" to revnum earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
37376
diff
changeset
|
325 state[oldrev] = revtodo |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
326 # Legacy compat special case |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
327 else: |
37377
3dfd7f018c69
rebase: convert "oldrev" to revnum earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
37376
diff
changeset
|
328 state[oldrev] = repo[newrev].rev() |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
329 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 if data[b'keepbranches'] is None: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 raise error.Abort(_(b'.hg/rebasestate is incomplete')) |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
332 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
333 data[b'destmap'] = destmap |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
334 data[b'state'] = state |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
335 skipped = set() |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
336 # recompute the set of skipped revs |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
337 if not data[b'collapse']: |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
338 seen = set(destmap.values()) |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
339 for old, new in sorted(state.items()): |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
340 if new != revtodo and new in seen: |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
341 skipped.add(old) |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
342 seen.add(new) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
343 data[b'skipped'] = skipped |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
344 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
345 b'computed skipped revs: %s\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
346 % (b' '.join(b'%d' % r for r in sorted(skipped)) or b'') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
347 ) |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
348 |
38515
19076e2d62e7
rebase: refactor logic to read rebasestate in a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38508
diff
changeset
|
349 return data |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
350 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
351 def _handleskippingobsolete(self, obsoleterevs, destmap): |
29479
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
352 """Compute structures necessary for skipping obsolete revisions |
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
353 |
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
354 obsoleterevs: iterable of all obsolete revisions in rebaseset |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
355 destmap: {srcrev: destrev} destination revisions |
29479
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
356 """ |
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
357 self.obsoletenotrebased = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 if not self.ui.configbool(b'experimental', b'rebaseskipobsolete'): |
29479
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
359 return |
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
360 obsoleteset = set(obsoleterevs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
361 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
362 self.obsoletenotrebased, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
363 self.obsoletewithoutsuccessorindestination, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
364 obsoleteextinctsuccessors, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
365 ) = _computeobsoletenotrebased(self.repo, obsoleteset, destmap) |
29479
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
366 skippedset = set(self.obsoletenotrebased) |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
367 skippedset.update(self.obsoletewithoutsuccessorindestination) |
35995
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
368 skippedset.update(obsoleteextinctsuccessors) |
33846
3b04a6ff625c
rebase: remove rebaseset from _checkobsrebase
Jun Wu <quark@fb.com>
parents:
33845
diff
changeset
|
369 _checkobsrebase(self.repo, self.ui, obsoleteset, skippedset) |
29479
5d16ebe7b14f
rebase: move handling of obsolete commits to be a separate RR class method
Kostia Balytskyi <ikostia@fb.com>
parents:
29478
diff
changeset
|
370 |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
371 def _prepareabortorcontinue( |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
372 self, isabort, backup=True, suppwarns=False, dryrun=False, confirm=False |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
373 ): |
44346
b42ce825308e
rebase: stop relying on having two parents to resume rebase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44341
diff
changeset
|
374 self.resume = True |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
375 try: |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
376 self.restorestatus() |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
377 self.collapsemsg = restorecollapsemsg(self.repo, isabort) |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
378 except error.RepoLookupError: |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
379 if isabort: |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
380 clearstatus(self.repo) |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
381 clearcollapsemsg(self.repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
382 self.repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
383 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 b'rebase aborted (no revision is removed,' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 b' only broken state is cleared)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
386 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
387 ) |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
388 return 0 |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
389 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
390 msg = _(b'cannot continue inconsistent rebase') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 hint = _(b'use "hg rebase --abort" to clear broken state') |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
392 raise error.Abort(msg, hint=hint) |
38816
2b728789edfd
rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38799
diff
changeset
|
393 |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
394 if isabort: |
38816
2b728789edfd
rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38799
diff
changeset
|
395 backup = backup and self.backupf |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
396 return self._abort( |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
397 backup=backup, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
398 suppwarns=suppwarns, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
399 dryrun=dryrun, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
400 confirm=confirm, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
401 ) |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
402 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
403 def _preparenewrebase(self, destmap): |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
404 if not destmap: |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
405 return _nothingtorebase() |
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
406 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
407 rebaseset = destmap.keys() |
43934
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
408 if not self.keepf: |
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
409 try: |
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
410 rewriteutil.precheck(self.repo, rebaseset, action=b'rebase') |
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
411 except error.Abort as e: |
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
412 if e.hint is None: |
43940
d77230743968
rebase: restore i18n of a hint message
Martin von Zweigbergk <martinvonz@google.com>
parents:
43934
diff
changeset
|
413 e.hint = _(b'use --keep to keep original changesets') |
43934
71fee4564410
rebase: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents:
43932
diff
changeset
|
414 raise e |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
415 |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
416 result = buildstate(self.repo, destmap, self.collapsef) |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
417 |
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
418 if not result: |
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
419 # Empty state built, nothing to rebase |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
420 self.ui.status(_(b'nothing to rebase\n')) |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
421 return _nothingtorebase() |
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
422 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
423 (self.originalwd, self.destmap, self.state) = result |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
424 if self.collapsef: |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
425 dests = set(self.destmap.values()) |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
426 if len(dests) != 1: |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
427 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
428 _(b'--collapse does not work with multiple destinations') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
429 ) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
430 destrev = next(iter(dests)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
431 destancestors = self.repo.changelog.ancestors( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
432 [destrev], inclusive=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
433 ) |
33847 | 434 self.external = externalparent(self.repo, self.state, destancestors) |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
435 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
436 for destrev in sorted(set(destmap.values())): |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
437 dest = self.repo[destrev] |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
438 if dest.closesbranch() and not self.keepbranchesf: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 self.ui.status(_(b'reopening closed branch head %s\n') % dest) |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
440 |
34094
5d45a997d11d
rebase: remove complex unhiding code
Jun Wu <quark@fb.com>
parents:
34093
diff
changeset
|
441 self.prepared = True |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
442 |
35333
8dba17546016
rebase: extract _assignworkingcopy
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
443 def _assignworkingcopy(self): |
35290
482614b3802a
rebase: add the --inmemory option flag; assign a wctx object for the rebase
Phil Cohen <phillco@fb.com>
parents:
35287
diff
changeset
|
444 if self.inmemory: |
482614b3802a
rebase: add the --inmemory option flag; assign a wctx object for the rebase
Phil Cohen <phillco@fb.com>
parents:
35287
diff
changeset
|
445 from mercurial.context import overlayworkingctx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
446 |
35290
482614b3802a
rebase: add the --inmemory option flag; assign a wctx object for the rebase
Phil Cohen <phillco@fb.com>
parents:
35287
diff
changeset
|
447 self.wctx = overlayworkingctx(self.repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
448 self.repo.ui.debug(b"rebasing in-memory\n") |
35290
482614b3802a
rebase: add the --inmemory option flag; assign a wctx object for the rebase
Phil Cohen <phillco@fb.com>
parents:
35287
diff
changeset
|
449 else: |
482614b3802a
rebase: add the --inmemory option flag; assign a wctx object for the rebase
Phil Cohen <phillco@fb.com>
parents:
35287
diff
changeset
|
450 self.wctx = self.repo[None] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
451 self.repo.ui.debug(b"rebasing on disk\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
452 self.repo.ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
453 b"rebase", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
454 b"using in-memory rebase: %r\n", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
455 self.inmemory, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
456 rebase_imm_used=self.inmemory, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
457 ) |
35333
8dba17546016
rebase: extract _assignworkingcopy
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
458 |
8dba17546016
rebase: extract _assignworkingcopy
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
459 def _performrebase(self, tr): |
8dba17546016
rebase: extract _assignworkingcopy
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
460 self._assignworkingcopy() |
8dba17546016
rebase: extract _assignworkingcopy
Phil Cohen <phillco@fb.com>
parents:
35332
diff
changeset
|
461 repo, ui = self.repo, self.ui |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
462 if self.keepbranchesf: |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
463 # insert _savebranch at the start of extrafns so if |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
464 # there's a user-provided extrafn it can clobber branch if |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
465 # desired |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
466 self.extrafns.insert(0, _savebranch) |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
467 if self.collapsef: |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
468 branches = set() |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
469 for rev in self.state: |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
470 branches.add(repo[rev].branch()) |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
471 if len(branches) > 1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
472 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
473 _(b'cannot collapse multiple named branches') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
474 ) |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
475 |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
476 # Calculate self.obsoletenotrebased |
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
477 obsrevs = _filterobsoleterevs(self.repo, self.state) |
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
478 self._handleskippingobsolete(obsrevs, self.destmap) |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
479 |
33332
3b7cb3d17137
rebase: use scmutil.cleanupnodes (issue5606) (BC)
Jun Wu <quark@fb.com>
parents:
33157
diff
changeset
|
480 # Keep track of the active bookmarks in order to reset them later |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
481 self.activebookmark = self.activebookmark or repo._activebookmark |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
482 if self.activebookmark: |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
483 bookmarks.deactivate(repo) |
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
484 |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
485 # Store the state before we begin so users can run 'hg rebase --abort' |
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
486 # if we fail before the transaction closes. |
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
487 self.storestatus() |
37031
74f91bec6991
rebase: register status file generator only once when using single transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
37028
diff
changeset
|
488 if tr: |
74f91bec6991
rebase: register status file generator only once when using single transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
37028
diff
changeset
|
489 # When using single transaction, store state when transaction |
74f91bec6991
rebase: register status file generator only once when using single transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
37028
diff
changeset
|
490 # commits. |
74f91bec6991
rebase: register status file generator only once when using single transaction
Martin von Zweigbergk <martinvonz@google.com>
parents:
37028
diff
changeset
|
491 self.storestatus(tr) |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
492 |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
493 cands = [k for k, v in pycompat.iteritems(self.state) if v == revtodo] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
494 p = repo.ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
495 _(b"rebasing"), unit=_(b'changesets'), total=len(cands) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
496 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
497 |
36933
61600b024a70
rebase: move constant expressions out of inner loop in _performrebase()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36932
diff
changeset
|
498 def progress(ctx): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
499 p.increment(item=(b"%d:%s" % (ctx.rev(), ctx))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
500 |
36933
61600b024a70
rebase: move constant expressions out of inner loop in _performrebase()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36932
diff
changeset
|
501 allowdivergence = self.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 b'experimental', b'evolution.allowdivergence' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
503 ) |
34006 | 504 for subset in sortsource(self.destmap): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
505 sortedrevs = self.repo.revs(b'sort(%ld, -topo)', subset) |
36932
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
506 if not allowdivergence: |
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
507 sortedrevs -= self.repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
508 b'descendants(%ld) and not %ld', |
36932
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
509 self.obsoletewithoutsuccessorindestination, |
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
510 self.obsoletewithoutsuccessorindestination, |
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
511 ) |
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
512 for rev in sortedrevs: |
437f80436186
rebase: inline _performrebasesubset()
Martin von Zweigbergk <martinvonz@google.com>
parents:
36931
diff
changeset
|
513 self._rebasenode(tr, rev, allowdivergence, progress) |
38377
a73eab7d6575
rebase: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38372
diff
changeset
|
514 p.complete() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
515 ui.note(_(b'rebase merging completed\n')) |
34006 | 516 |
44349
cd43cae79f25
rebase: remove some now-unused parent arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44348
diff
changeset
|
517 def _concludenode(self, rev, p1, editor, commitmsg=None): |
37033
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
518 '''Commit the wd changes with parents p1 and p2. |
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
519 |
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
520 Reuse commit info from rev but also store useful information in extra. |
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
521 Return node of committed revision.''' |
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
522 repo = self.repo |
37034
fbc82a08bdcb
rebase: pass in ctx, not rev, to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37033
diff
changeset
|
523 ctx = repo[rev] |
37035
b7f5d03e1e54
rebase: look up commit message to reuse outside of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37034
diff
changeset
|
524 if commitmsg is None: |
b7f5d03e1e54
rebase: look up commit message to reuse outside of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37034
diff
changeset
|
525 commitmsg = ctx.description() |
37041
0b1230a5a958
rebase: look up default date outside of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37040
diff
changeset
|
526 date = self.date |
0b1230a5a958
rebase: look up default date outside of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37040
diff
changeset
|
527 if date is None: |
0b1230a5a958
rebase: look up default date outside of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37040
diff
changeset
|
528 date = ctx.date() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
529 extra = {b'rebase_source': ctx.hex()} |
37037
bd0086bd3af4
rebase: inline _makextrafn() now that we have only one caller
Martin von Zweigbergk <martinvonz@google.com>
parents:
37036
diff
changeset
|
530 for c in self.extrafns: |
bd0086bd3af4
rebase: inline _makextrafn() now that we have only one caller
Martin von Zweigbergk <martinvonz@google.com>
parents:
37036
diff
changeset
|
531 c(ctx, extra) |
37038
7db86856f27f
rebase: pass in "keepbranch" to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37037
diff
changeset
|
532 keepbranch = self.keepbranchesf and repo[p1].branch() != ctx.branch() |
37039
7616073a4cf1
rebase: pass in entire "overrides" dict to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37038
diff
changeset
|
533 destphase = max(ctx.phase(), phases.draft) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
534 overrides = {(b'phases', b'new-commit'): destphase} |
37039
7616073a4cf1
rebase: pass in entire "overrides" dict to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37038
diff
changeset
|
535 if keepbranch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
536 overrides[(b'ui', b'allowemptycommit')] = True |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
537 with repo.ui.configoverride(overrides, b'rebase'): |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
538 if self.inmemory: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
539 newnode = commitmemorynode( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
540 repo, |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
541 wctx=self.wctx, |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
542 extra=extra, |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
543 commitmsg=commitmsg, |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
544 editor=editor, |
37042
8ff5772711fa
rebase: pass in "user" instead of "ctx" to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37041
diff
changeset
|
545 user=ctx.user(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
546 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
547 ) |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44666
diff
changeset
|
548 mergestatemod.mergestate.clean(repo) |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
549 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
550 newnode = commitnode( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
551 repo, |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
552 extra=extra, |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
553 commitmsg=commitmsg, |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
554 editor=editor, |
37042
8ff5772711fa
rebase: pass in "user" instead of "ctx" to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37041
diff
changeset
|
555 user=ctx.user(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
556 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
557 ) |
37033
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
558 |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
559 return newnode |
37033
5f99142f59cc
rebase: extract common _concludenode()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37032
diff
changeset
|
560 |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
561 def _rebasenode(self, tr, rev, allowdivergence, progressfn): |
34006 | 562 repo, ui, opts = self.repo, self.ui, self.opts |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
563 dest = self.destmap[rev] |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
564 ctx = repo[rev] |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
565 desc = _ctxdesc(ctx) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
566 if self.state[rev] == rev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
567 ui.status(_(b'already rebased %s\n') % desc) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
568 elif ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
569 not allowdivergence |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
570 and rev in self.obsoletewithoutsuccessorindestination |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
571 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
572 msg = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
573 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
574 b'note: not rebasing %s and its descendants as ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
575 b'this would cause divergence\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
576 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
577 % desc |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
578 ) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
579 repo.ui.status(msg) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
580 self.skipped.add(rev) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
581 elif rev in self.obsoletenotrebased: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
582 succ = self.obsoletenotrebased[rev] |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
583 if succ is None: |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
584 msg = _(b'note: not rebasing %s, it has no successor\n') % desc |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
585 else: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
586 succdesc = _ctxdesc(repo[succ]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
587 msg = _( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
588 b'note: not rebasing %s, already in destination as %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
589 ) % (desc, succdesc) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
590 repo.ui.status(msg) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
591 # Make clearrebased aware state[rev] is not a true successor |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
592 self.skipped.add(rev) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
593 # Record rev as moved to its desired destination in self.state. |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
594 # This helps bookmark and working parent movement. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
595 dest = max( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
596 adjustdest(repo, rev, self.destmap, self.state, self.skipped) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
597 ) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
598 self.state[rev] = dest |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
599 elif self.state[rev] == revtodo: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
600 ui.status(_(b'rebasing %s\n') % desc) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
601 progressfn(ctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
602 p1, p2, base = defineparents( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
603 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
604 rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
605 self.destmap, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
606 self.state, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
607 self.skipped, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
608 self.obsoletenotrebased, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
609 ) |
44346
b42ce825308e
rebase: stop relying on having two parents to resume rebase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44341
diff
changeset
|
610 if self.resume and self.wctx.p1().rev() == p1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
611 repo.ui.debug(b'resuming interrupted rebase\n') |
44346
b42ce825308e
rebase: stop relying on having two parents to resume rebase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44341
diff
changeset
|
612 self.resume = False |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
613 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
614 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 with ui.configoverride(overrides, b'rebase'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
616 stats = rebasenode( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
617 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
618 rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
619 p1, |
44347
9c9cfecd4600
rebase: don't use rebased node as dirstate p2 (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44346
diff
changeset
|
620 p2, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
621 base, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
622 self.collapsef, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
623 dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
624 wctx=self.wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
625 ) |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37043
diff
changeset
|
626 if stats.unresolvedcount > 0: |
37027
81b35d275a60
rebase: get "inmemory" state directly from rebase runtime
Martin von Zweigbergk <martinvonz@google.com>
parents:
37025
diff
changeset
|
627 if self.inmemory: |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
628 raise error.InMemoryMergeConflictsError() |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
629 else: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
630 raise error.InterventionRequired( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
631 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
632 b'unresolved conflicts (see hg ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
633 b'resolve, then hg rebase --continue)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
634 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
635 ) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
636 if not self.collapsef: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
637 merging = p2 != nullrev |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
638 editform = cmdutil.mergeeditform(merging, b'rebase') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
639 editor = cmdutil.getcommiteditor( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
640 editform=editform, **pycompat.strkwargs(opts) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
641 ) |
44666
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
642 # We need to set parents again here just in case we're continuing |
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
643 # a rebase started with an old hg version (before 9c9cfecd4600), |
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
644 # because those old versions would have left us with two dirstate |
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
645 # parents, and we don't want to create a merge commit here (unless |
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
646 # we're rebasing a merge commit). |
e7af56a0733e
rebase: don't create merge when continuing rebase interrupted by old hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
44556
diff
changeset
|
647 self.wctx.setparents(repo[p1].node(), repo[p2].node()) |
44349
cd43cae79f25
rebase: remove some now-unused parent arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44348
diff
changeset
|
648 newnode = self._concludenode(rev, p1, editor) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
649 else: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
650 # Skip commit if we are collapsing |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
651 newnode = None |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
652 # Update the state |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
653 if newnode is not None: |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
654 self.state[rev] = repo[newnode].rev() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
655 ui.debug(b'rebased as %s\n' % short(newnode)) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
656 else: |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
657 if not self.collapsef: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
658 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
659 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
660 b'note: not rebasing %s, its destination already ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 b'has all its changes\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
662 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
663 % desc |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
664 ) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
665 self.skipped.add(rev) |
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
666 self.state[rev] = p1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 ui.debug(b'next revision set to %d\n' % p1) |
36931
28f988093911
rebase: extract function for rebasing a single node
Martin von Zweigbergk <martinvonz@google.com>
parents:
36930
diff
changeset
|
668 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
669 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
670 _(b'already rebased %s as %s\n') % (desc, repo[self.state[rev]]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
671 ) |
37032
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
672 if not tr: |
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
673 # When not using single transaction, store state after each |
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
674 # commit is completely done. On InterventionRequired, we thus |
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
675 # won't store the status. Instead, we'll hit the "len(parents) == 2" |
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
676 # case and realize that the commit was in progress. |
98663bed146e
rebase: store rebase state after each commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
37031
diff
changeset
|
677 self.storestatus() |
29477
becc4c6eca42
rebase: move core rebase logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29476
diff
changeset
|
678 |
38816
2b728789edfd
rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38799
diff
changeset
|
679 def _finishrebase(self): |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
680 repo, ui, opts = self.repo, self.ui, self.opts |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
681 fm = ui.formatter(b'rebase', opts) |
34883
c858afe9c59b
rebase: add support to output nodechanges
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34872
diff
changeset
|
682 fm.startitem() |
36771
f7e3fe95b663
rebase: delete obsolete internal "keepopen" option
Martin von Zweigbergk <martinvonz@google.com>
parents:
36478
diff
changeset
|
683 if self.collapsef: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
684 p1, p2, _base = defineparents( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
685 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
686 min(self.state), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
687 self.destmap, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
688 self.state, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
689 self.skipped, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
690 self.obsoletenotrebased, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
691 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
692 editopt = opts.get(b'edit') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
693 editform = b'rebase.collapse' |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
694 if self.collapsemsg: |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
695 commitmsg = self.collapsemsg |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
696 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
697 commitmsg = b'Collapsed revision' |
33622
5a5f600b06ad
rebase: sort collapsed revisions in commit message (issue5643)
Yuya Nishihara <yuya@tcha.org>
parents:
33590
diff
changeset
|
698 for rebased in sorted(self.state): |
33848
bc9e075133c9
rebase: remove "state >= revtodo" condition
Jun Wu <quark@fb.com>
parents:
33847
diff
changeset
|
699 if rebased not in self.skipped: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
700 commitmsg += b'\n* %s' % repo[rebased].description() |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
701 editopt = True |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
702 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) |
29552
db26925bdbb0
rebase: remove sortedstate-related confusion
Kostia Balytskyi <ikostia@fb.com>
parents:
29551
diff
changeset
|
703 revtoreuse = max(self.state) |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
704 |
44348
8082a77cc3a2
rebase: remove some redundant setting of dirstate parents
Martin von Zweigbergk <martinvonz@google.com>
parents:
44347
diff
changeset
|
705 self.wctx.setparents(repo[p1].node(), repo[self.external].node()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
706 newnode = self._concludenode( |
44349
cd43cae79f25
rebase: remove some now-unused parent arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44348
diff
changeset
|
707 revtoreuse, p1, editor, commitmsg=commitmsg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
708 ) |
36928
9457c395fcbb
rebase: fix issue 5494 also with --collapse
Martin von Zweigbergk <martinvonz@google.com>
parents:
36927
diff
changeset
|
709 |
33864
70354bd4f19b
rebase: only change self.state when collapsing in _finishrebase
Jun Wu <quark@fb.com>
parents:
33863
diff
changeset
|
710 if newnode is not None: |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
711 newrev = repo[newnode].rev() |
36299
238646784294
py3: use default dict iterator instead of iterkeys
Augie Fackler <augie@google.com>
parents:
36271
diff
changeset
|
712 for oldrev in self.state: |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
713 self.state[oldrev] = newrev |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
714 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
715 if b'qtip' in repo.tags(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
716 updatemq(repo, self.state, self.skipped, **pycompat.strkwargs(opts)) |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
717 |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
718 # restore original working directory |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
719 # (we do this before stripping) |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
720 newwd = self.state.get(self.originalwd, self.originalwd) |
33843
d8d0ef5f5975
rebase: remove revprecursor and revpruned states (BC)
Jun Wu <quark@fb.com>
parents:
33842
diff
changeset
|
721 if newwd < 0: |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
722 # original directory is a parent of rebase set root or ignored |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
723 newwd = self.originalwd |
36975
795eb53f1d3e
rebase: allow in-memory merge of the working copy parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
36960
diff
changeset
|
724 if newwd not in [c.rev() for c in repo[None].parents()]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
725 ui.note(_(b"update back to initial working directory parent\n")) |
38508
39db5a01cd53
cleanup: pass in overwrite flag to hg.updaterepo() as named argument
Yuya Nishihara <yuya@tcha.org>
parents:
38501
diff
changeset
|
726 hg.updaterepo(repo, newwd, overwrite=False) |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
727 |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
728 collapsedas = None |
36774
a835bf3fe40a
rebase: collapse two nested if-conditions
Martin von Zweigbergk <martinvonz@google.com>
parents:
36773
diff
changeset
|
729 if self.collapsef and not self.keepf: |
a835bf3fe40a
rebase: collapse two nested if-conditions
Martin von Zweigbergk <martinvonz@google.com>
parents:
36773
diff
changeset
|
730 collapsedas = newnode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
731 clearrebased( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
732 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
733 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
734 self.destmap, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
735 self.state, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
736 self.skipped, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
737 collapsedas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
738 self.keepf, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
739 fm=fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
740 backup=self.backupf, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
741 ) |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
742 |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
743 clearstatus(repo) |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
744 clearcollapsemsg(repo) |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
745 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
746 ui.note(_(b"rebase completed\n")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
747 util.unlinkpath(repo.sjoin(b'undo'), ignoremissing=True) |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
748 if self.skipped: |
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
749 skippedlen = len(self.skipped) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
750 ui.note(_(b"%d revisions have been skipped\n") % skippedlen) |
34883
c858afe9c59b
rebase: add support to output nodechanges
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34872
diff
changeset
|
751 fm.end() |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
752 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
753 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
754 self.activebookmark |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
755 and self.activebookmark in repo._bookmarks |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
756 and repo[b'.'].node() == repo._bookmarks[self.activebookmark] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
757 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
758 bookmarks.activate(repo, self.activebookmark) |
29478
007da66960a8
rebase: move rebase finish logic to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29477
diff
changeset
|
759 |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
760 def _abort(self, backup=True, suppwarns=False, dryrun=False, confirm=False): |
40857
2041991f1ce2
rebase: remove now-unnecessary arguments to _abort()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40856
diff
changeset
|
761 '''Restore the repository to its original state.''' |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
762 |
40857
2041991f1ce2
rebase: remove now-unnecessary arguments to _abort()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40856
diff
changeset
|
763 repo = self.repo |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
764 try: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
765 # If the first commits in the rebased set get skipped during the |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
766 # rebase, their values within the state mapping will be the dest |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
767 # rev id. The rebased list must must not contain the dest rev |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
768 # (issue4896) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
769 rebased = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
770 s |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
771 for r, s in self.state.items() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
772 if s >= 0 and s != r and s != self.destmap[r] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
773 ] |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
774 immutable = [d for d in rebased if not repo[d].mutable()] |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
775 cleanup = True |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
776 if immutable: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
777 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
778 _(b"warning: can't clean up public changesets %s\n") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
779 % b', '.join(bytes(repo[r]) for r in immutable), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
780 hint=_(b"see 'hg help phases' for details"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
781 ) |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
782 cleanup = False |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
783 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
784 descendants = set() |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
785 if rebased: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
786 descendants = set(repo.changelog.descendants(rebased)) |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
787 if descendants - set(rebased): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
788 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
789 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
790 b"warning: new changesets detected on " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
791 b"destination branch, can't strip\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
792 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
793 ) |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
794 cleanup = False |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
795 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
796 if cleanup: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
797 if rebased: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
798 strippoints = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
799 c.node() for c in repo.set(b'roots(%ld)', rebased) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
800 ] |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
801 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
802 updateifonnodes = set(rebased) |
40857
2041991f1ce2
rebase: remove now-unnecessary arguments to _abort()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40856
diff
changeset
|
803 updateifonnodes.update(self.destmap.values()) |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
804 |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
805 if not dryrun and not confirm: |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
806 updateifonnodes.add(self.originalwd) |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
807 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
808 shouldupdate = repo[b'.'].rev() in updateifonnodes |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
809 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
810 # Update away from the rebase if necessary |
44053
894c91c2e363
rebase: delete seemingly unnecessary needupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44051
diff
changeset
|
811 if shouldupdate: |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44239
diff
changeset
|
812 mergemod.clean_update(repo[self.originalwd]) |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
813 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
814 # Strip from the first rebased revision |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
815 if rebased: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
816 repair.strip(repo.ui, repo, strippoints, backup=backup) |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
817 |
40857
2041991f1ce2
rebase: remove now-unnecessary arguments to _abort()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40856
diff
changeset
|
818 if self.activebookmark and self.activebookmark in repo._bookmarks: |
2041991f1ce2
rebase: remove now-unnecessary arguments to _abort()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40856
diff
changeset
|
819 bookmarks.activate(repo, self.activebookmark) |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
820 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
821 finally: |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
822 clearstatus(repo) |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
823 clearcollapsemsg(repo) |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
824 if not suppwarns: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
825 repo.ui.warn(_(b'rebase aborted\n')) |
40856
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
826 return 0 |
c8eb8d1fc6cf
rebase: move abort() onto rebaseruntime
Martin von Zweigbergk <martinvonz@google.com>
parents:
40819
diff
changeset
|
827 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
828 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
829 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
830 b'rebase', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
831 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
832 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
833 b's', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
834 b'source', |
44555
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
835 [], |
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
836 _(b'rebase the specified changesets and their descendants'), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
837 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
838 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
839 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
840 b'b', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
841 b'base', |
44556
f63598aa1c4b
rebase: accept multiple --base arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44555
diff
changeset
|
842 [], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
843 _(b'rebase everything from branching point of specified changeset'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
844 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
845 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
846 (b'r', b'rev', [], _(b'rebase these revisions'), _(b'REV')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
847 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
848 b'd', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
849 b'dest', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
850 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
851 _(b'rebase onto the specified changeset'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
852 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
853 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
854 (b'', b'collapse', False, _(b'collapse the rebased changesets')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
855 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
856 b'm', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
857 b'message', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
859 _(b'use text as collapse commit message'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
860 _(b'TEXT'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
862 (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
|
863 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
864 b'l', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
865 b'logfile', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
866 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
867 _(b'read collapse commit message from file'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
868 _(b'FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
869 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
870 (b'k', b'keep', False, _(b'keep original changesets')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
871 (b'', b'keepbranches', False, _(b'keep original branch names')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
872 (b'D', b'detach', False, _(b'(DEPRECATED)')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
873 (b'i', b'interactive', False, _(b'(DEPRECATED)')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
874 (b't', b'tool', b'', _(b'specify merge tool')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
875 (b'', b'stop', False, _(b'stop interrupted rebase')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
876 (b'c', b'continue', False, _(b'continue an interrupted rebase')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
877 (b'a', b'abort', False, _(b'abort an interrupted rebase')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
878 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
879 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 b'auto-orphans', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
881 b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
882 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
883 b'automatically rebase orphan revisions ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
884 b'in the specified revset (EXPERIMENTAL)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
885 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
886 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
887 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
888 + cmdutil.dryrunopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
889 + cmdutil.formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
890 + cmdutil.confirmopts, |
44556
f63598aa1c4b
rebase: accept multiple --base arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44555
diff
changeset
|
891 _(b'[[-s REV]... | [-b REV]... | [-r REV]...] [-d REV] [OPTION]...'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
892 helpcategory=command.CATEGORY_CHANGE_MANAGEMENT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
893 ) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
894 def rebase(ui, repo, **opts): |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
895 """move changeset (and descendants) to a different branch |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
896 |
7999
b25110140573
rebase: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7955
diff
changeset
|
897 Rebase uses repeated merging to graft changesets from one part of |
10646 | 898 history (the source) onto another (the destination). This can be |
11188
b5c0f6a11430
rebase: stress that only local changesets should be rebased
Martin Geisler <mg@lazybytes.net>
parents:
10762
diff
changeset
|
899 useful for linearizing *local* changes relative to a master |
10646 | 900 development tree. |
901 | |
27454
3e3be524a712
rebase: simplify documentation about public commits
timeless <timeless@mozdev.org>
parents:
27344
diff
changeset
|
902 Published commits cannot be rebased (see :hg:`help phases`). |
3e3be524a712
rebase: simplify documentation about public commits
timeless <timeless@mozdev.org>
parents:
27344
diff
changeset
|
903 To copy commits, see :hg:`help graft`. |
18516
9fbeb61b8ad2
rebase: mention phases in the help
Kevin Bullock <kbullock@ringworld.org>
parents:
18514
diff
changeset
|
904 |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
905 If you don't specify a destination changeset (``-d/--dest``), rebase |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
906 will use the same logic as :hg:`merge` to pick a destination. if |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
907 the current branch contains exactly one other head, the other head |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
908 is merged with by default. Otherwise, an explicit revision with |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
909 which to merge with must be provided. (destination changeset is not |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
910 modified by rebasing, but new changesets are added as its |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
911 descendants.) |
10646 | 912 |
27956
f3eb98b8fe12
doc: prevent non-literal text block from being treated as literal one
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27932
diff
changeset
|
913 Here are the ways to select changesets: |
27455
a9a047878e14
rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org>
parents:
27454
diff
changeset
|
914 |
a9a047878e14
rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org>
parents:
27454
diff
changeset
|
915 1. Explicitly select them using ``--rev``. |
10646 | 916 |
27455
a9a047878e14
rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org>
parents:
27454
diff
changeset
|
917 2. Use ``--source`` to select a root changeset and include all of its |
27959
4322849a5357
doc: use correct indentation for enumeration
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27956
diff
changeset
|
918 descendants. |
27455
a9a047878e14
rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org>
parents:
27454
diff
changeset
|
919 |
a9a047878e14
rebase: simplify documentation about selecting commits to rebase
timeless <timeless@mozdev.org>
parents:
27454
diff
changeset
|
920 3. Use ``--base`` to select a changeset; rebase will find ancestors |
27959
4322849a5357
doc: use correct indentation for enumeration
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27956
diff
changeset
|
921 and their descendants which are not also ancestors of the destination. |
18518
0324a1d88a53
rebase: mention --rev in the help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18516
diff
changeset
|
922 |
41796
25fc5b96d1c3
rebase: add missing dashes in help text
Manuel Jacob <me@manueljacob.de>
parents:
41206
diff
changeset
|
923 4. If you do not specify any of ``--rev``, ``--source``, or ``--base``, |
27959
4322849a5357
doc: use correct indentation for enumeration
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27956
diff
changeset
|
924 rebase will use ``--base .`` as above. |
27932
6bc2299cc12f
rebase: restore help for rebase w/o args (issue5059)
timeless <timeless@mozdev.org>
parents:
27866
diff
changeset
|
925 |
35287
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
926 If ``--source`` or ``--rev`` is used, special names ``SRC`` and ``ALLSRC`` |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
927 can be used in ``--dest``. Destination would be calculated per source |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
928 revision with ``SRC`` substituted by that single source revision and |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
929 ``ALLSRC`` substituted by all source revisions. |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
930 |
27456
2337958596e3
rebase: simplify documentation about --keep
timeless <timeless@mozdev.org>
parents:
27455
diff
changeset
|
931 Rebase will destroy original changesets unless you use ``--keep``. |
2337958596e3
rebase: simplify documentation about --keep
timeless <timeless@mozdev.org>
parents:
27455
diff
changeset
|
932 It will also move your bookmarks (even if you do). |
2337958596e3
rebase: simplify documentation about --keep
timeless <timeless@mozdev.org>
parents:
27455
diff
changeset
|
933 |
2337958596e3
rebase: simplify documentation about --keep
timeless <timeless@mozdev.org>
parents:
27455
diff
changeset
|
934 Some changesets may be dropped if they do not contribute changes |
2337958596e3
rebase: simplify documentation about --keep
timeless <timeless@mozdev.org>
parents:
27455
diff
changeset
|
935 (e.g. merges from the destination branch). |
10646 | 936 |
27457
97cc045f1cfe
rebase: simplify documentation about heads
timeless <timeless@mozdev.org>
parents:
27456
diff
changeset
|
937 Unlike ``merge``, rebase will do nothing if you are at the branch tip of |
97cc045f1cfe
rebase: simplify documentation about heads
timeless <timeless@mozdev.org>
parents:
27456
diff
changeset
|
938 a named branch with two heads. You will need to explicitly specify source |
97cc045f1cfe
rebase: simplify documentation about heads
timeless <timeless@mozdev.org>
parents:
27456
diff
changeset
|
939 and/or destination. |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
940 |
28001
ade12bf2bf0e
rebase: mention help merge-tools in help
timeless <timeless@mozdev.org>
parents:
27977
diff
changeset
|
941 If you need to use a tool to automate merge/conflict decisions, you |
ade12bf2bf0e
rebase: mention help merge-tools in help
timeless <timeless@mozdev.org>
parents:
27977
diff
changeset
|
942 can specify one with ``--tool``, see :hg:`help merge-tools`. |
28002
e862b1fd33a8
rebase: document that tool does not apply to deleted files
timeless <timeless@mozdev.org>
parents:
28001
diff
changeset
|
943 As a caveat: the tool will not be used to mediate when a file was |
e862b1fd33a8
rebase: document that tool does not apply to deleted files
timeless <timeless@mozdev.org>
parents:
28001
diff
changeset
|
944 deleted, there is no hook presently available for this. |
28001
ade12bf2bf0e
rebase: mention help merge-tools in help
timeless <timeless@mozdev.org>
parents:
27977
diff
changeset
|
945 |
27458
d39e743e3578
rebase: mention conflict in documentation instead of merge
timeless <timeless@mozdev.org>
parents:
27457
diff
changeset
|
946 If a rebase is interrupted to manually resolve a conflict, it can be |
39095
571361e47137
rebase: include --stop option in documentation
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39094
diff
changeset
|
947 continued with --continue/-c, aborted with --abort/-a, or stopped with |
571361e47137
rebase: include --stop option in documentation
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39094
diff
changeset
|
948 --stop. |
11205 | 949 |
22790 | 950 .. container:: verbose |
951 | |
952 Examples: | |
953 | |
954 - move "local changes" (current commit back to branching point) | |
955 to the current branch tip after a pull:: | |
956 | |
957 hg rebase | |
958 | |
959 - move a single changeset to the stable branch:: | |
960 | |
961 hg rebase -r 5f493448 -d stable | |
962 | |
963 - splice a commit and all its descendants onto another part of history:: | |
964 | |
965 hg rebase --source c0c3 --dest 4cf9 | |
966 | |
967 - rebase everything on a branch marked by a bookmark onto the | |
968 default branch:: | |
969 | |
970 hg rebase --base myfeature --dest default | |
971 | |
972 - collapse a sequence of changes into a single commit:: | |
973 | |
974 hg rebase --collapse -r 1520:1525 -d . | |
975 | |
976 - move a named branch while preserving its name:: | |
977 | |
978 hg rebase -r "branch(featureX)" -d 1.3 --keepbranches | |
979 | |
35287
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
980 - stabilize orphaned changesets so history looks linear:: |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
981 |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
982 hg rebase -r 'orphan()-obsolete()'\ |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
983 -d 'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::) +\ |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
984 max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))' |
3398603c5621
rebase: enable multidest by default
Jun Wu <quark@fb.com>
parents:
35125
diff
changeset
|
985 |
31558
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
986 Configuration Options: |
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
987 |
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
988 You can make rebase require a destination if you set the following config |
32084
091d6b9157da
help: apply bulk fixes for indentation and literal blocking issues
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32083
diff
changeset
|
989 option:: |
31558
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
990 |
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
991 [commands] |
32083
1c911adebf48
rebase: fix incorrect configuration example
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
31733
diff
changeset
|
992 rebase.requiredest = True |
31558
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
993 |
33569
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
994 By default, rebase will close the transaction after each commit. For |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
995 performance purposes, you can configure rebase to use a single transaction |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
996 across the entire rebase. WARNING: This setting introduces a significant |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
997 risk of losing the work you've done in a rebase if the rebase aborts |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
998 unexpectedly:: |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
999 |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
1000 [rebase] |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
1001 singletransaction = True |
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
1002 |
35388
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1003 By default, rebase writes to the working copy, but you can configure it to |
42447
cda591d2bfe1
rebase: tweak description of inmemory working even w/ dirty working dir
Kyle Lippincott <spectral@google.com>
parents:
42299
diff
changeset
|
1004 run in-memory for better performance. When the rebase is not moving the |
cda591d2bfe1
rebase: tweak description of inmemory working even w/ dirty working dir
Kyle Lippincott <spectral@google.com>
parents:
42299
diff
changeset
|
1005 parent(s) of the working copy (AKA the "currently checked out changesets"), |
cda591d2bfe1
rebase: tweak description of inmemory working even w/ dirty working dir
Kyle Lippincott <spectral@google.com>
parents:
42299
diff
changeset
|
1006 this may also allow it to run even if the working copy is dirty:: |
35388
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1007 |
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1008 [rebase] |
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1009 experimental.inmemory = True |
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1010 |
31558
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
1011 Return Values: |
13dc00c233b7
rebase: add flag to require destination
Ryan McElroy <rmcelroy@fb.com>
parents:
31514
diff
changeset
|
1012 |
19971
2a9bb64faa0b
rebase: add description about exit code when there are unresolved conflicts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19969
diff
changeset
|
1013 Returns 0 on success, 1 if nothing to rebase or there are |
2a9bb64faa0b
rebase: add description about exit code when there are unresolved conflicts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19969
diff
changeset
|
1014 unresolved conflicts. |
22790 | 1015 |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1016 """ |
38501
53800d6eed26
rebase: convert opts dict to bytes at once
Yuya Nishihara <yuya@tcha.org>
parents:
38500
diff
changeset
|
1017 opts = pycompat.byteskwargs(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1018 inmemory = ui.configbool(b'rebase', b'experimental.inmemory') |
43899
fff21278554b
rebase: use cmdutil.check_at_most_one_arg() for action
Martin von Zweigbergk <martinvonz@google.com>
parents:
43874
diff
changeset
|
1019 action = cmdutil.check_at_most_one_arg(opts, b'abort', b'stop', b'continue') |
43927
905b21783968
rebase: use cmdutil.check_incompatible_arguments() for action+confirm/dryrun
Martin von Zweigbergk <martinvonz@google.com>
parents:
43926
diff
changeset
|
1020 if action: |
905b21783968
rebase: use cmdutil.check_incompatible_arguments() for action+confirm/dryrun
Martin von Zweigbergk <martinvonz@google.com>
parents:
43926
diff
changeset
|
1021 cmdutil.check_incompatible_arguments( |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44168
diff
changeset
|
1022 opts, action, [b'confirm', b'dry_run'] |
43927
905b21783968
rebase: use cmdutil.check_incompatible_arguments() for action+confirm/dryrun
Martin von Zweigbergk <martinvonz@google.com>
parents:
43926
diff
changeset
|
1023 ) |
43931
8c87cc169946
rebase: use cmdutil.check_at_most_one_arg() for action+revision
Martin von Zweigbergk <martinvonz@google.com>
parents:
43930
diff
changeset
|
1024 cmdutil.check_incompatible_arguments( |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44168
diff
changeset
|
1025 opts, action, [b'rev', b'source', b'base', b'dest'] |
43931
8c87cc169946
rebase: use cmdutil.check_at_most_one_arg() for action+revision
Martin von Zweigbergk <martinvonz@google.com>
parents:
43930
diff
changeset
|
1026 ) |
43926
daed70e95d60
rebase: use cmdutil.check_at_most_one_arg() for --confirm/--dry-run
Martin von Zweigbergk <martinvonz@google.com>
parents:
43899
diff
changeset
|
1027 cmdutil.check_at_most_one_arg(opts, b'confirm', b'dry_run') |
43929
08b8bf4a8516
rebase: use cmdutil.check_at_most_one_arg() for -b/-s/-r
Martin von Zweigbergk <martinvonz@google.com>
parents:
43928
diff
changeset
|
1028 cmdutil.check_at_most_one_arg(opts, b'rev', b'source', b'base') |
38372
f4f1fb1cbfb4
rebase: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38239
diff
changeset
|
1029 |
39101
18cbe2d872d3
rebase: turn off inmemory flag on --stop
Yuya Nishihara <yuya@tcha.org>
parents:
39100
diff
changeset
|
1030 if action or repo.currenttransaction() is not None: |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1031 # in-memory rebase is not compatible with resuming rebases. |
35701
c5d220a621e7
rebase: don't run IMM if running rebase in a transaction
Phil Cohen <phillco@fb.com>
parents:
35487
diff
changeset
|
1032 # (Or if it is run within a transaction, since the restart logic can |
c5d220a621e7
rebase: don't run IMM if running rebase in a transaction
Phil Cohen <phillco@fb.com>
parents:
35487
diff
changeset
|
1033 # fail the entire transaction.) |
35388
dd11df900f7f
rebase: replace --inmemory flag with rebase.experimental.inmemory config
Phil Cohen <phillco@fb.com>
parents:
35384
diff
changeset
|
1034 inmemory = False |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1035 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1036 if opts.get(b'auto_orphans'): |
43930
412f199b4092
rebase: use cmdutil.check_incompatible_arguments() for --auto-orphans
Martin von Zweigbergk <martinvonz@google.com>
parents:
43929
diff
changeset
|
1037 disallowed_opts = set(opts) - {b'auto_orphans'} |
412f199b4092
rebase: use cmdutil.check_incompatible_arguments() for --auto-orphans
Martin von Zweigbergk <martinvonz@google.com>
parents:
43929
diff
changeset
|
1038 cmdutil.check_incompatible_arguments( |
44194
d4c1501225c4
cmdutil: change check_incompatible_arguments() *arg to single iterable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44168
diff
changeset
|
1039 opts, b'auto_orphans', disallowed_opts |
43930
412f199b4092
rebase: use cmdutil.check_incompatible_arguments() for --auto-orphans
Martin von Zweigbergk <martinvonz@google.com>
parents:
43929
diff
changeset
|
1040 ) |
412f199b4092
rebase: use cmdutil.check_incompatible_arguments() for --auto-orphans
Martin von Zweigbergk <martinvonz@google.com>
parents:
43929
diff
changeset
|
1041 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1042 userrevs = list(repo.revs(opts.get(b'auto_orphans'))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1043 opts[b'rev'] = [revsetlang.formatspec(b'%ld and orphan()', userrevs)] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1044 opts[b'dest'] = b'_destautoorphanrebase(SRC)' |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37378
diff
changeset
|
1045 |
43928
0b769e1cbe89
rebase: inline single-use `dryrun` and `confirm` variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
43927
diff
changeset
|
1046 if opts.get(b'dry_run') or opts.get(b'confirm'): |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1047 return _dryrunrebase(ui, repo, action, opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1048 elif action == b'stop': |
39093
cc37009e95ca
rebase: add --stop option to stop rebase at any point (issue5206)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38816
diff
changeset
|
1049 rbsrt = rebaseruntime(repo, ui) |
cc37009e95ca
rebase: add --stop option to stop rebase at any point (issue5206)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38816
diff
changeset
|
1050 with repo.wlock(), repo.lock(): |
39116
ffb34ee6de9e
rebase: cover restorestatus() by lock to prevent it from being updated
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39101
diff
changeset
|
1051 rbsrt.restorestatus() |
ffb34ee6de9e
rebase: cover restorestatus() by lock to prevent it from being updated
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39101
diff
changeset
|
1052 if rbsrt.collapsef: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1053 raise error.Abort(_(b"cannot stop in --collapse session")) |
39116
ffb34ee6de9e
rebase: cover restorestatus() by lock to prevent it from being updated
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39101
diff
changeset
|
1054 allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) |
ffb34ee6de9e
rebase: cover restorestatus() by lock to prevent it from being updated
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
39101
diff
changeset
|
1055 if not (rbsrt.keepf or allowunstable): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1056 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1057 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1058 b"cannot remove original changesets with" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1059 b" unrebased descendants" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1060 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1061 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1062 b'either enable obsmarkers to allow unstable ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1063 b'revisions or use --keep to keep original ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1064 b'changesets' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1065 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1066 ) |
44053
894c91c2e363
rebase: delete seemingly unnecessary needupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44051
diff
changeset
|
1067 # update to the current working revision |
894c91c2e363
rebase: delete seemingly unnecessary needupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44051
diff
changeset
|
1068 # to clear interrupted merge |
894c91c2e363
rebase: delete seemingly unnecessary needupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44051
diff
changeset
|
1069 hg.updaterepo(repo, rbsrt.originalwd, overwrite=True) |
39093
cc37009e95ca
rebase: add --stop option to stop rebase at any point (issue5206)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38816
diff
changeset
|
1070 rbsrt._finishrebase() |
cc37009e95ca
rebase: add --stop option to stop rebase at any point (issue5206)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38816
diff
changeset
|
1071 return 0 |
38372
f4f1fb1cbfb4
rebase: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38239
diff
changeset
|
1072 elif inmemory: |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1073 try: |
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1074 # in-memory merge doesn't support conflicts, so if we hit any, abort |
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1075 # and re-run as an on-disk merge. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1076 overrides = {(b'rebase', b'singletransaction'): True} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1077 with ui.configoverride(overrides, b'rebase'): |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1078 return _dorebase(ui, repo, action, opts, inmemory=inmemory) |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1079 except error.InMemoryMergeConflictsError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1080 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1081 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1082 b'hit merge conflicts; re-running rebase without in-memory' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1083 b' merge\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1084 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1085 ) |
40790
f07d4f94f098
rebase: preserve working copy when redoing in-mem rebase on disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
40366
diff
changeset
|
1086 # TODO: Make in-memory merge not use the on-disk merge state, so |
f07d4f94f098
rebase: preserve working copy when redoing in-mem rebase on disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
40366
diff
changeset
|
1087 # we don't have to clean it here |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44666
diff
changeset
|
1088 mergestatemod.mergestate.clean(repo) |
40790
f07d4f94f098
rebase: preserve working copy when redoing in-mem rebase on disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
40366
diff
changeset
|
1089 clearstatus(repo) |
f07d4f94f098
rebase: preserve working copy when redoing in-mem rebase on disk
Martin von Zweigbergk <martinvonz@google.com>
parents:
40366
diff
changeset
|
1090 clearcollapsemsg(repo) |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1091 return _dorebase(ui, repo, action, opts, inmemory=False) |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1092 else: |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1093 return _dorebase(ui, repo, action, opts) |
35320
d901a88891fe
rebase: rerun a rebase on-disk if IMM merge conflicts arise
Phil Cohen <phillco@fb.com>
parents:
35319
diff
changeset
|
1094 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1095 |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1096 def _dryrunrebase(ui, repo, action, opts): |
38501
53800d6eed26
rebase: convert opts dict to bytes at once
Yuya Nishihara <yuya@tcha.org>
parents:
38500
diff
changeset
|
1097 rbsrt = rebaseruntime(repo, ui, inmemory=True, opts=opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1098 confirm = opts.get(b'confirm') |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1099 if confirm: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1100 ui.status(_(b'starting in-memory rebase\n')) |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1101 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1102 ui.status( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1103 _(b'starting dry-run rebase; repository will not be changed\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1104 ) |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1105 with repo.wlock(), repo.lock(): |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1106 needsabort = True |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1107 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1108 overrides = {(b'rebase', b'singletransaction'): True} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1109 with ui.configoverride(overrides, b'rebase'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1110 _origrebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1111 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1112 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1113 action, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1114 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1115 rbsrt, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1116 inmemory=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1117 leaveunfinished=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1118 ) |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1119 except error.InMemoryMergeConflictsError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1120 ui.status(_(b'hit a merge conflict\n')) |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1121 return 1 |
42108
1b5cec8b6a1e
rebase: fix bug that prevented dry-run rebases from printing failures
Augie Fackler <augie@google.com>
parents:
42057
diff
changeset
|
1122 except error.Abort: |
1b5cec8b6a1e
rebase: fix bug that prevented dry-run rebases from printing failures
Augie Fackler <augie@google.com>
parents:
42057
diff
changeset
|
1123 needsabort = False |
1b5cec8b6a1e
rebase: fix bug that prevented dry-run rebases from printing failures
Augie Fackler <augie@google.com>
parents:
42057
diff
changeset
|
1124 raise |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1125 else: |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1126 if confirm: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1127 ui.status(_(b'rebase completed successfully\n')) |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1128 if not ui.promptchoice(_(b'apply changes (yn)?$$ &Yes $$ &No')): |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1129 # finish unfinished rebase |
38816
2b728789edfd
rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38799
diff
changeset
|
1130 rbsrt._finishrebase() |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1131 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1132 rbsrt._prepareabortorcontinue( |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1133 isabort=True, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1134 backup=False, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1135 suppwarns=True, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1136 confirm=confirm, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1137 ) |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1138 needsabort = False |
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1139 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1140 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1141 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1142 b'dry-run rebase completed successfully; run without' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1143 b' -n/--dry-run to perform this rebase\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1144 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1145 ) |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1146 return 0 |
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1147 finally: |
38667
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1148 if needsabort: |
572dff5c946e
rebase: add --confirm option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38666
diff
changeset
|
1149 # no need to store backup in case of dryrun |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1150 rbsrt._prepareabortorcontinue( |
44923
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1151 isabort=True, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1152 backup=False, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1153 suppwarns=True, |
1f114c797961
rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)
Matt Harbison <matt_harbison@yahoo.com>
parents:
44666
diff
changeset
|
1154 dryrun=opts.get(b'dry_run'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1155 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1156 |
38496
c92fdc27cbdd
rebase: extract dryrun as a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38495
diff
changeset
|
1157 |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1158 def _dorebase(ui, repo, action, opts, inmemory=False): |
38501
53800d6eed26
rebase: convert opts dict to bytes at once
Yuya Nishihara <yuya@tcha.org>
parents:
38500
diff
changeset
|
1159 rbsrt = rebaseruntime(repo, ui, inmemory, opts) |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1160 return _origrebase(ui, repo, action, opts, rbsrt, inmemory=inmemory) |
38497
9c3b48fb7ac5
rebase: split _origrebase() for conveniece in dryrun
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38496
diff
changeset
|
1161 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1162 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1163 def _origrebase( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1164 ui, repo, action, opts, rbsrt, inmemory=False, leaveunfinished=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1165 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1166 assert action != b'stop' |
32917
070920db8b87
rebase: use context manager for locking in rebase()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32900
diff
changeset
|
1167 with repo.wlock(), repo.lock(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1168 if opts.get(b'interactive'): |
26496
b885ab9ca182
rebase: enable histedit for useful help with it
timeless@mozdev.org
parents:
26495
diff
changeset
|
1169 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1170 if extensions.find(b'histedit'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1171 enablehistedit = b'' |
26496
b885ab9ca182
rebase: enable histedit for useful help with it
timeless@mozdev.org
parents:
26495
diff
changeset
|
1172 except KeyError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1173 enablehistedit = b" --config extensions.histedit=" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1174 help = b"hg%s help -e histedit" % enablehistedit |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1175 msg = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1176 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1177 b"interactive history editing is supported by the " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1178 b"'histedit' extension (see \"%s\")" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1179 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1180 % help |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1181 ) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26496
diff
changeset
|
1182 raise error.Abort(msg) |
22382
d5b04ee8ecf7
rebase: add a deprecated -i/--interactive flag
David Soria Parra <davidsp@fb.com>
parents:
22251
diff
changeset
|
1183 |
29400
c79da70a4659
rebase: move collapse-related local variables to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29399
diff
changeset
|
1184 if rbsrt.collapsemsg and not rbsrt.collapsef: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1185 raise error.Abort(_(b'message can only be specified with collapse')) |
13661
ee349e228835
rebase: add -m/--message to rebase --collapse (issue2389)
Radomir Dopieralski <sheep@stxnext.pl>
parents:
13609
diff
changeset
|
1186 |
39100
e9e742bd0501
rebase: use action variable to select things to do
Yuya Nishihara <yuya@tcha.org>
parents:
39099
diff
changeset
|
1187 if action: |
29400
c79da70a4659
rebase: move collapse-related local variables to the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29399
diff
changeset
|
1188 if rbsrt.collapsef: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26496
diff
changeset
|
1189 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1190 _(b'cannot use collapse with continue or abort') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1191 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1192 if action == b'abort' and opts.get(b'tool', False): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1193 ui.warn(_(b'tool option will be ignored\n')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1194 if action == b'continue': |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44666
diff
changeset
|
1195 ms = mergestatemod.mergestate.read(repo) |
30495
d528ddc11b33
rebase: refer to checkunresolved by its new name
Augie Fackler <augie@google.com>
parents:
30490
diff
changeset
|
1196 mergeutil.checkunresolved(ms) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1197 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1198 retcode = rbsrt._prepareabortorcontinue( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1199 isabort=(action == b'abort') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1200 ) |
29472
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
1201 if retcode is not None: |
f585ce6878e3
rebase: move abort/continue prep to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29404
diff
changeset
|
1202 return retcode |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1203 else: |
43932
9fb9f3a5cad7
rebase: inline single-use variables passed to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43931
diff
changeset
|
1204 # search default destination in this space |
9fb9f3a5cad7
rebase: inline single-use variables passed to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43931
diff
changeset
|
1205 # used in the 'hg pull --rebase' case, see issue 5214. |
9fb9f3a5cad7
rebase: inline single-use variables passed to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43931
diff
changeset
|
1206 destspace = opts.get(b'_destspace') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1207 destmap = _definedestmap( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1208 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1209 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1210 inmemory, |
43932
9fb9f3a5cad7
rebase: inline single-use variables passed to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43931
diff
changeset
|
1211 opts.get(b'dest', None), |
44555
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
1212 opts.get(b'source', []), |
44556
f63598aa1c4b
rebase: accept multiple --base arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44555
diff
changeset
|
1213 opts.get(b'base', []), |
43932
9fb9f3a5cad7
rebase: inline single-use variables passed to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43931
diff
changeset
|
1214 opts.get(b'rev', []), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1215 destspace=destspace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1216 ) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1217 retcode = rbsrt._preparenewrebase(destmap) |
29473
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
1218 if retcode is not None: |
e25da98052a4
rebase: move new rebase preparation to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29472
diff
changeset
|
1219 return retcode |
36775
6dab3bdb1f00
rebase: only store collapse message once
Martin von Zweigbergk <martinvonz@google.com>
parents:
36774
diff
changeset
|
1220 storecollapsemsg(repo, rbsrt.collapsemsg) |
21027
25ee5dbebc6b
rebase: tell when reopening a closed branch head
Mads Kiilerich <madski@unity3d.com>
parents:
20790
diff
changeset
|
1221 |
33569
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
1222 tr = None |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1223 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1224 singletr = ui.configbool(b'rebase', b'singletransaction') |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1225 if singletr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1226 tr = repo.transaction(b'rebase') |
35480
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1227 |
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1228 # If `rebase.singletransaction` is enabled, wrap the entire operation in |
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1229 # one transaction here. Otherwise, transactions are obtained when |
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1230 # committing each node, which is slower but allows partial success. |
33569
d341677d667d
rebase: add config to move rebase into a single transaction
Durham Goode <durham@fb.com>
parents:
33333
diff
changeset
|
1231 with util.acceptintervention(tr): |
35480
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1232 # Same logic for the dirstate guard, except we don't create one when |
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1233 # rebasing in-memory (it's not needed). |
36773
1004fd71810f
rebase: reduce scope of "dsguard" variables a bit
Martin von Zweigbergk <martinvonz@google.com>
parents:
36772
diff
changeset
|
1234 dsguard = None |
35480
01b084914a60
rebase: don't take out a dirstate guard for in-memory rebase
Phil Cohen <phillco@fb.com>
parents:
35434
diff
changeset
|
1235 if singletr and not inmemory: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1236 dsguard = dirstateguard.dirstateguard(repo, b'rebase') |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1237 with util.acceptintervention(dsguard): |
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1238 rbsrt._performrebase(tr) |
38372
f4f1fb1cbfb4
rebase: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38239
diff
changeset
|
1239 if not leaveunfinished: |
38816
2b728789edfd
rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38799
diff
changeset
|
1240 rbsrt._finishrebase() |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1241 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1242 |
44553
dc25de8117e4
rebase: remove unused defaults argument values from _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44452
diff
changeset
|
1243 def _definedestmap(ui, repo, inmemory, destf, srcf, basef, revf, destspace): |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1244 """use revisions argument to define destmap {srcrev: destrev}""" |
31431
406705701c2d
rebase: explicitly tests for None
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31395
diff
changeset
|
1245 if revf is None: |
406705701c2d
rebase: explicitly tests for None
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31395
diff
changeset
|
1246 revf = [] |
31395
361bccce566a
rebase: don't use mutable default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31380
diff
changeset
|
1247 |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28686
diff
changeset
|
1248 # destspace is here to work around issues with `hg pull --rebase` see |
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28686
diff
changeset
|
1249 # issue5214 for details |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1250 |
43591
b56c6647f65e
rebase: check for unfinished ops even when inmemory (issue6214)
Kyle Lippincott <spectral@google.com>
parents:
43567
diff
changeset
|
1251 cmdutil.checkunfinished(repo) |
37025
0782ac132a41
rebase: pass "inmemory" directly to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37021
diff
changeset
|
1252 if not inmemory: |
35291
aa660c1203a9
rebase: do not bail on uncomitted changes if rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35290
diff
changeset
|
1253 cmdutil.bailifchanged(repo) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1254 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1255 if ui.configbool(b'commands', b'rebase.requiredest') and not destf: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1256 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1257 _(b'you must specify a destination'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1258 hint=_(b'use: hg rebase -d REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1259 ) |
31731
b5afec71c1f9
rebase: allow destination-free continue and abort (issue5513)
Ryan McElroy <rmcelroy@fb.com>
parents:
31621
diff
changeset
|
1260 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1261 dest = None |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1262 |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1263 if revf: |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1264 rebaseset = scmutil.revrange(repo, revf) |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1265 if not rebaseset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1266 ui.status(_(b'empty "rev" revision set - nothing to rebase\n')) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1267 return None |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1268 elif srcf: |
44555
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
1269 src = scmutil.revrange(repo, srcf) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1270 if not src: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1271 ui.status(_(b'empty "source" revision set - nothing to rebase\n')) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1272 return None |
44555
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
1273 # `+ (%ld)` to work around `wdir()::` being empty |
05654ea5137c
rebase: accept multiple --source arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44554
diff
changeset
|
1274 rebaseset = repo.revs(b'(%ld):: + (%ld)', src, src) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1275 else: |
44556
f63598aa1c4b
rebase: accept multiple --base arguments (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44555
diff
changeset
|
1276 base = scmutil.revrange(repo, basef or [b'.']) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1277 if not base: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1278 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1279 _(b'empty "base" revision set - ' b"can't compute rebase set\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1280 ) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1281 return None |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1282 if destf: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1283 # --base does not support multiple destinations |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1284 dest = scmutil.revsingle(repo, destf) |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1285 else: |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28686
diff
changeset
|
1286 dest = repo[_destrebase(repo, base, destspace=destspace)] |
36475
7b84b737352d
py3: replace str() calls with their preferred bytes equivalent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36405
diff
changeset
|
1287 destf = bytes(dest) |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
1288 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1289 roots = [] # selected children of branching points |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1290 bpbase = {} # {branchingpoint: [origbase]} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1291 for b in base: # group bases by branching points |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1292 bp = repo.revs(b'ancestor(%d, %d)', b, dest.rev()).first() |
30580
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1293 bpbase[bp] = bpbase.get(bp, []) + [b] |
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1294 if None in bpbase: |
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1295 # emulate the old behavior, showing "nothing to rebase" (a better |
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1296 # behavior may be abort with "cannot find branching point" error) |
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1297 bpbase.clear() |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
1298 for bp, bs in pycompat.iteritems(bpbase): # calculate roots |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1299 roots += list(repo.revs(b'children(%d) & ancestors(%ld)', bp, bs)) |
30580
51e7c83e05ee
rebase: calculate ancestors for --base separately (issue5420)
Jun Wu <quark@fb.com>
parents:
30495
diff
changeset
|
1300 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1301 rebaseset = repo.revs(b'%ld::', roots) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1302 |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1303 if not rebaseset: |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1304 # transform to list because smartsets are not comparable to |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1305 # lists. This should be improved to honor laziness of |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1306 # smartset. |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1307 if list(base) == [dest.rev()]: |
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1308 if basef: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1309 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1310 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1311 b'nothing to rebase - %s is both "base"' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1312 b' and destination\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1313 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1314 % dest |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1315 ) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1316 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1317 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1318 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1319 b'nothing to rebase - working directory ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1320 b'parent is also destination\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1321 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1322 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1323 elif not repo.revs(b'%ld - ::%d', base, dest.rev()): |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1324 if basef: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1325 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1326 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1327 b'nothing to rebase - "base" %s is ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1328 b'already an ancestor of destination ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1329 b'%s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1330 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1331 % (b'+'.join(bytes(repo[r]) for r in base), dest) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1332 ) |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1333 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1334 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1335 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1336 b'nothing to rebase - working ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1337 b'directory parent is already an ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1338 b'ancestor of destination %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1339 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1340 % dest |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1341 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1342 else: # can it happen? |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1343 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1344 _(b'nothing to rebase from %s to %s\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1345 % (b'+'.join(bytes(repo[r]) for r in base), dest) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1346 ) |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1347 return None |
36975
795eb53f1d3e
rebase: allow in-memory merge of the working copy parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
36960
diff
changeset
|
1348 |
44239
830eae18b2f3
rebase: abort if the user tries to rebase the working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44214
diff
changeset
|
1349 if nodemod.wdirrev in rebaseset: |
830eae18b2f3
rebase: abort if the user tries to rebase the working copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
44214
diff
changeset
|
1350 raise error.Abort(_(b'cannot rebase the working copy')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1351 rebasingwcp = repo[b'.'].rev() in rebaseset |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1352 ui.log( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1353 b"rebase", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1354 b"rebasing working copy parent: %r\n", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1355 rebasingwcp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1356 rebase_rebasing_wcp=rebasingwcp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1357 ) |
37025
0782ac132a41
rebase: pass "inmemory" directly to _definedestmap()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37021
diff
changeset
|
1358 if inmemory and rebasingwcp: |
35332
03bec089e105
rebase: disable `inmemory` if the rebaseset contains the working copy
Phil Cohen <phillco@fb.com>
parents:
35320
diff
changeset
|
1359 # Check these since we did not before. |
03bec089e105
rebase: disable `inmemory` if the rebaseset contains the working copy
Phil Cohen <phillco@fb.com>
parents:
35320
diff
changeset
|
1360 cmdutil.checkunfinished(repo) |
03bec089e105
rebase: disable `inmemory` if the rebaseset contains the working copy
Phil Cohen <phillco@fb.com>
parents:
35320
diff
changeset
|
1361 cmdutil.bailifchanged(repo) |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
1362 |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
1363 if not destf: |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28686
diff
changeset
|
1364 dest = repo[_destrebase(repo, rebaseset, destspace=destspace)] |
36475
7b84b737352d
py3: replace str() calls with their preferred bytes equivalent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36405
diff
changeset
|
1365 destf = bytes(dest) |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
1366 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1367 allsrc = revsetlang.formatspec(b'%ld', rebaseset) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1368 alias = {b'ALLSRC': allsrc} |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1369 |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1370 if dest is None: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1371 try: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1372 # fast path: try to resolve dest without SRC alias |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1373 dest = scmutil.revsingle(repo, destf, localalias=alias) |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1374 except error.RepoLookupError: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1375 # multi-dest path: resolve dest for each SRC separately |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1376 destmap = {} |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1377 for r in rebaseset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1378 alias[b'SRC'] = revsetlang.formatspec(b'%d', r) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1379 # use repo.anyrevs instead of scmutil.revsingle because we |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1380 # don't want to abort if destset is empty. |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1381 destset = repo.anyrevs([destf], user=True, localalias=alias) |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1382 size = len(destset) |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1383 if size == 1: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1384 destmap[r] = destset.first() |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1385 elif size == 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1386 ui.note(_(b'skipping %s - empty destination\n') % repo[r]) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1387 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1388 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1389 _(b'rebase destination for %s is not unique') % repo[r] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1390 ) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1391 |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1392 if dest is not None: |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1393 # single-dest case: assign dest to each rev in rebaseset |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1394 destrev = dest.rev() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1395 destmap = {r: destrev for r in rebaseset} # {srcrev: destrev} |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1396 |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1397 if not destmap: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1398 ui.status(_(b'nothing to rebase - empty destination\n')) |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1399 return None |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1400 |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1401 return destmap |
28136
5853878bbc2a
rebase: extract rebaseset and destination computation in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28122
diff
changeset
|
1402 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1403 |
32248
b47e6b0ba6ca
rebase: rename "target" to "dest" in variable names
Martin von Zweigbergk <martinvonz@google.com>
parents:
32175
diff
changeset
|
1404 def externalparent(repo, state, destancestors): |
19955
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1405 """Return the revision that should be used as the second parent |
32248
b47e6b0ba6ca
rebase: rename "target" to "dest" in variable names
Martin von Zweigbergk <martinvonz@google.com>
parents:
32175
diff
changeset
|
1406 when the revisions in state is collapsed on top of destancestors. |
19955
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1407 Abort if there is more than one parent. |
10351
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1408 """ |
19955
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1409 parents = set() |
10351
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1410 source = min(state) |
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1411 for rev in state: |
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1412 if rev == source: |
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1413 continue |
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1414 for p in repo[rev].parents(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1415 if p.rev() not in state and p.rev() not in destancestors: |
19955
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1416 parents.add(p.rev()) |
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1417 if not parents: |
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1418 return nullrev |
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1419 if len(parents) == 1: |
2160c2e0d7d1
rebase: refactor and rename checkexternal - it is a getter more than a setter
Mads Kiilerich <madski@unity3d.com>
parents:
19951
diff
changeset
|
1420 return parents.pop() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1421 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1422 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1423 b'unable to collapse on top of %d, there is more ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1424 b'than one external parent: %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1425 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1426 % (max(destancestors), b', '.join(b"%d" % p for p in sorted(parents))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1427 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1428 |
10351
38fe86fb16e3
rebase: refactoring
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
10263
diff
changeset
|
1429 |
44349
cd43cae79f25
rebase: remove some now-unused parent arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44348
diff
changeset
|
1430 def commitmemorynode(repo, wctx, editor, extra, user, date, commitmsg): |
37042
8ff5772711fa
rebase: pass in "user" instead of "ctx" to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37041
diff
changeset
|
1431 '''Commit the memory changes with parents p1 and p2. |
35319
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35318
diff
changeset
|
1432 Return node of committed revision.''' |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1433 # Replicates the empty check in ``repo.commit``. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1434 if wctx.isempty() and not repo.ui.configbool(b'ui', b'allowemptycommit'): |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1435 return None |
35319
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35318
diff
changeset
|
1436 |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1437 # By convention, ``extra['branch']`` (set by extrafn) clobbers |
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1438 # ``branch`` (used when passing ``--keepbranches``). |
44050
2ecbc4ec87d8
overlayworkingctx: default branch to base context's branch
Martin von Zweigbergk <martinvonz@google.com>
parents:
43978
diff
changeset
|
1439 branch = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1440 if b'branch' in extra: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1441 branch = extra[b'branch'] |
35319
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35318
diff
changeset
|
1442 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1443 memctx = wctx.tomemctx( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1444 commitmsg, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1445 date=date, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1446 extra=extra, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1447 user=user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1448 branch=branch, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1449 editor=editor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1450 ) |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1451 commitres = repo.commitctx(memctx) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1452 wctx.clean() # Might be reused |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1453 return commitres |
35319
228916ca12b5
rebase: add concludememorynode(), and call it when rebasing in-memory
Phil Cohen <phillco@fb.com>
parents:
35318
diff
changeset
|
1454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1455 |
44349
cd43cae79f25
rebase: remove some now-unused parent arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44348
diff
changeset
|
1456 def commitnode(repo, editor, extra, user, date, commitmsg): |
37042
8ff5772711fa
rebase: pass in "user" instead of "ctx" to conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37041
diff
changeset
|
1457 '''Commit the wd changes with parents p1 and p2. |
23459
2e047b1558a5
rebase: clarify naming of variables holding node hashes - don't call them rev
Mads Kiilerich <madski@unity3d.com>
parents:
23457
diff
changeset
|
1458 Return node of committed revision.''' |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1459 dsguard = util.nullcontextmanager() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1460 if not repo.ui.configbool(b'rebase', b'singletransaction'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1461 dsguard = dirstateguard.dirstateguard(repo, b'rebase') |
33619
609606d21765
rebase: use one dirstateguard for when using rebase.singletransaction
Durham Goode <durham@fb.com>
parents:
33590
diff
changeset
|
1462 with dsguard: |
37040
b8d305bd12ca
rebase: move config override out of conclude[memory]node()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37039
diff
changeset
|
1463 # Commit might fail if unresolved files exist |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1464 newnode = repo.commit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1465 text=commitmsg, user=user, date=date, extra=extra, editor=editor |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1466 ) |
22038
021becbf024a
rebase: do not retract phase boundary by hand
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22004
diff
changeset
|
1467 |
33120
b63351f6a246
rebase: backed out changeset 2519994d25ca
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32084
diff
changeset
|
1468 repo.dirstate.setbranch(repo[newnode].branch()) |
b63351f6a246
rebase: backed out changeset 2519994d25ca
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32084
diff
changeset
|
1469 return newnode |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1470 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1471 |
44347
9c9cfecd4600
rebase: don't use rebased node as dirstate p2 (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44346
diff
changeset
|
1472 def rebasenode(repo, rev, p1, p2, base, collapse, dest, wctx): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1473 """Rebase a single revision rev on top of p1 using base as merge ancestor""" |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1474 # Merge phase |
32248
b47e6b0ba6ca
rebase: rename "target" to "dest" in variable names
Martin von Zweigbergk <martinvonz@google.com>
parents:
32175
diff
changeset
|
1475 # Update to destination and merge it with local |
44094
521b4e3a42d7
rebase: extract a variable for a repeated `repo[p1]`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44092
diff
changeset
|
1476 p1ctx = repo[p1] |
35317
5c25fe7fb1e6
rebase: do not update if IMM; instead, set the overlaywctx's parents
Phil Cohen <phillco@fb.com>
parents:
35316
diff
changeset
|
1477 if wctx.isinmemory(): |
44094
521b4e3a42d7
rebase: extract a variable for a repeated `repo[p1]`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44092
diff
changeset
|
1478 wctx.setbase(p1ctx) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1479 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1480 if repo[b'.'].rev() != p1: |
44094
521b4e3a42d7
rebase: extract a variable for a repeated `repo[p1]`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44092
diff
changeset
|
1481 repo.ui.debug(b" update to %d:%s\n" % (p1, p1ctx)) |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44239
diff
changeset
|
1482 mergemod.clean_update(p1ctx) |
35317
5c25fe7fb1e6
rebase: do not update if IMM; instead, set the overlaywctx's parents
Phil Cohen <phillco@fb.com>
parents:
35316
diff
changeset
|
1483 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1484 repo.ui.debug(b" already in destination\n") |
35410 | 1485 # This is, alas, necessary to invalidate workingctx's manifest cache, |
1486 # as well as other data we litter on it in other places. | |
1487 wctx = repo[None] | |
35317
5c25fe7fb1e6
rebase: do not update if IMM; instead, set the overlaywctx's parents
Phil Cohen <phillco@fb.com>
parents:
35316
diff
changeset
|
1488 repo.dirstate.write(repo.currenttransaction()) |
44090
2f0a44c69e07
copies: replace duplicatecopies() by function that takes contexts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44053
diff
changeset
|
1489 ctx = repo[rev] |
2f0a44c69e07
copies: replace duplicatecopies() by function that takes contexts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44053
diff
changeset
|
1490 repo.ui.debug(b" merge against %d:%s\n" % (rev, ctx)) |
19969
ad9db007656f
rebase: fix selection of base used when rebasing merge (issue4041)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
19956
diff
changeset
|
1491 if base is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1492 repo.ui.debug(b" detach base %d:%s\n" % (base, repo[base])) |
44095
e733c59f3c09
rebase: fix bug where `--collapse` would apply diff on missing file
Martin von Zweigbergk <martinvonz@google.com>
parents:
44094
diff
changeset
|
1493 |
e733c59f3c09
rebase: fix bug where `--collapse` would apply diff on missing file
Martin von Zweigbergk <martinvonz@google.com>
parents:
44094
diff
changeset
|
1494 # See explanation in merge.graft() |
e733c59f3c09
rebase: fix bug where `--collapse` would apply diff on missing file
Martin von Zweigbergk <martinvonz@google.com>
parents:
44094
diff
changeset
|
1495 mergeancestor = repo.changelog.isancestor(p1ctx.node(), ctx.node()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1496 stats = mergemod.update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1497 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1498 rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1499 branchmerge=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1500 force=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1501 ancestor=base, |
44095
e733c59f3c09
rebase: fix bug where `--collapse` would apply diff on missing file
Martin von Zweigbergk <martinvonz@google.com>
parents:
44094
diff
changeset
|
1502 mergeancestor=mergeancestor, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1503 labels=[b'dest', b'source'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1504 wc=wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1505 ) |
44347
9c9cfecd4600
rebase: don't use rebased node as dirstate p2 (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
44346
diff
changeset
|
1506 wctx.setparents(p1ctx.node(), repo[p2].node()) |
22905
63e889cc610d
rebase: move duplicatecopies next to merge
Matt Mackall <mpm@selenic.com>
parents:
22901
diff
changeset
|
1507 if collapse: |
44092
833210fbd900
graftcopies: remove `skip` and `repo` arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44090
diff
changeset
|
1508 copies.graftcopies(wctx, ctx, repo[dest]) |
22905
63e889cc610d
rebase: move duplicatecopies next to merge
Matt Mackall <mpm@selenic.com>
parents:
22901
diff
changeset
|
1509 else: |
63e889cc610d
rebase: move duplicatecopies next to merge
Matt Mackall <mpm@selenic.com>
parents:
22901
diff
changeset
|
1510 # If we're not using --collapse, we need to |
63e889cc610d
rebase: move duplicatecopies next to merge
Matt Mackall <mpm@selenic.com>
parents:
22901
diff
changeset
|
1511 # duplicate copies between the revision we're |
44092
833210fbd900
graftcopies: remove `skip` and `repo` arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44090
diff
changeset
|
1512 # rebasing and its first parent. |
833210fbd900
graftcopies: remove `skip` and `repo` arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44090
diff
changeset
|
1513 copies.graftcopies(wctx, ctx, ctx.p1()) |
22905
63e889cc610d
rebase: move duplicatecopies next to merge
Matt Mackall <mpm@selenic.com>
parents:
22901
diff
changeset
|
1514 return stats |
6923
ebf1462f2145
strip trailing whitespace, replace tabs by spaces
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6906
diff
changeset
|
1515 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1516 |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
1517 def adjustdest(repo, rev, destmap, state, skipped): |
41533
0f64091cc851
global: make some docstrings raw strings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41365
diff
changeset
|
1518 r"""adjust rebase destination given the current rebase state |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1519 |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1520 rev is what is being rebased. Return a list of two revs, which are the |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1521 adjusted destinations for rev's p1 and p2, respectively. If a parent is |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1522 nullrev, return dest without adjustment for it. |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1523 |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1524 For example, when doing rebasing B+E to F, C to G, rebase will first move B |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1525 to B1, and E's destination will be adjusted from F to B1. |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1526 |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1527 B1 <- written during rebasing B |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1528 | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1529 F <- original destination of B, E |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1530 | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1531 | E <- rev, which is being rebased |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1532 | | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1533 | D <- prev, one parent of rev being checked |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1534 | | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1535 | x <- skipped, ex. no successor or successor in (::dest) |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1536 | | |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1537 | C <- rebased as C', different destination |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1538 | | |
34005
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1539 | B <- rebased as B1 C' |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1540 |/ | |
5e83a8fe6bc4
rebase: initial support for multiple destinations
Jun Wu <quark@fb.com>
parents:
34004
diff
changeset
|
1541 A G <- destination of C, different |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1542 |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1543 Another example about merge changeset, rebase -r C+G+H -d K, rebase will |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1544 first move C to C1, G to G1, and when it's checking H, the adjusted |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1545 destinations will be [C1, G1]. |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1546 |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1547 H C1 G1 |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1548 /| | / |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1549 F G |/ |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1550 K | | -> K |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1551 | C D | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1552 | |/ | |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1553 | B | ... |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1554 |/ |/ |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1555 A A |
34006 | 1556 |
1557 Besides, adjust dest according to existing rebase information. For example, | |
1558 | |
1559 B C D B needs to be rebased on top of C, C needs to be rebased on top | |
1560 \|/ of D. We will rebase C first. | |
1561 A | |
1562 | |
1563 C' After rebasing C, when considering B's destination, use C' | |
1564 | instead of the original C. | |
1565 B D | |
1566 \ / | |
1567 A | |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1568 """ |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1569 # pick already rebased revs with same dest from state as interesting source |
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1570 dest = destmap[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1571 source = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1572 s |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1573 for s, d in state.items() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1574 if d > 0 and destmap[s] == dest and s not in skipped |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1575 ] |
33849
3ae2eaecb49e
rebase: optimize "source" calculation in adjustdest
Jun Wu <quark@fb.com>
parents:
33848
diff
changeset
|
1576 |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1577 result = [] |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1578 for prev in repo.changelog.parentrevs(rev): |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1579 adjusted = dest |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1580 if prev != nullrev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1581 candidate = repo.revs(b'max(%ld and (::%d))', source, prev).first() |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1582 if candidate is not None: |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1583 adjusted = state[candidate] |
34006 | 1584 if adjusted == dest and dest in state: |
1585 adjusted = state[dest] | |
1586 if adjusted == revtodo: | |
1587 # sortsource should produce an order that makes this impossible | |
1588 raise error.ProgrammingError( | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1589 b'rev %d should be rebased already at this time' % dest |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1590 ) |
33590
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1591 result.append(adjusted) |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1592 return result |
52f82e7d6a7e
rebase: move bookmark to destination for commits becoming empty (issue5627)
Jun Wu <quark@fb.com>
parents:
33569
diff
changeset
|
1593 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1594 |
33846
3b04a6ff625c
rebase: remove rebaseset from _checkobsrebase
Jun Wu <quark@fb.com>
parents:
33845
diff
changeset
|
1595 def _checkobsrebase(repo, ui, rebaseobsrevs, rebaseobsskipped): |
28685
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1596 """ |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1597 Abort if rebase will create divergence or rebase is noop because of markers |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1598 |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1599 `rebaseobsrevs`: set of obsolete revision in source |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1600 `rebaseobsskipped`: set of revisions from source skipped because they have |
35995
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
1601 successors in destination or no non-obsolete successor. |
28685
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1602 """ |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1603 # Obsolete node with successors not in dest leads to divergence |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1604 divergenceok = ui.configbool(b'experimental', b'evolution.allowdivergence') |
28685
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1605 divergencebasecandidates = rebaseobsrevs - rebaseobsskipped |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1606 |
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1607 if divergencebasecandidates and not divergenceok: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1608 divhashes = (bytes(repo[r]) for r in divergencebasecandidates) |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
1609 msg = _(b"this rebase will cause divergences from: %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1610 h = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1611 b"to force the rebase please set " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1612 b"experimental.evolution.allowdivergence=True" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1613 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1614 raise error.Abort(msg % (b",".join(divhashes),), hint=h) |
28685
6c4d23fe611c
rebase: refactor of error handling code path for rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
28429
diff
changeset
|
1615 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1616 |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
1617 def successorrevs(unfi, rev): |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1618 """yield revision numbers for successors of rev""" |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
1619 assert unfi.filtername is None |
43566
054846d213ba
index: use `index.get_rev` in `rebase.successorrevs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
1620 get_rev = unfi.changelog.index.get_rev |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1621 for s in obsutil.allsuccessors(unfi.obsstore, [unfi[rev].node()]): |
43566
054846d213ba
index: use `index.get_rev` in `rebase.successorrevs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
1622 r = get_rev(s) |
054846d213ba
index: use `index.get_rev` in `rebase.successorrevs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
1623 if r is not None: |
054846d213ba
index: use `index.get_rev` in `rebase.successorrevs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43506
diff
changeset
|
1624 yield r |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1625 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1626 |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
1627 def defineparents(repo, rev, destmap, state, skipped, obsskipped): |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1628 """Return new parents and optionally a merge base for rev being rebased |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1629 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1630 The destination specified by "dest" cannot always be used directly because |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1631 previously rebase result could affect destination. For example, |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1632 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1633 D E rebase -r C+D+E -d B |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1634 |/ C will be rebased to C' |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1635 B C D's new destination will be C' instead of B |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1636 |/ E's new destination will be C' instead of B |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1637 A |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1638 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1639 The new parents of a merge is slightly more complicated. See the comment |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1640 block below. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1641 """ |
34092
8a8e7a94ba07
rebase: do not crash rebasing merge with a parent having hidden successor
Jun Wu <quark@fb.com>
parents:
34009
diff
changeset
|
1642 # use unfiltered changelog since successorrevs may return filtered nodes |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
1643 assert repo.filtername is None |
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
1644 cl = repo.changelog |
38666
a06b2b032557
revlog: introduce a isancestorrev() and use it in rebase
Martin von Zweigbergk <martinvonz@google.com>
parents:
38546
diff
changeset
|
1645 isancestor = cl.isancestorrev |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1646 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1647 dest = destmap[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1648 oldps = repo.changelog.parentrevs(rev) # old parents |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1649 newps = [nullrev, nullrev] # new parents |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
1650 dests = adjustdest(repo, rev, destmap, state, skipped) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1651 bases = list(oldps) # merge base candidates, initially just old parents |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1652 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1653 if all(r == nullrev for r in oldps[1:]): |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1654 # For non-merge changeset, just move p to adjusted dest as requested. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1655 newps[0] = dests[0] |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1656 else: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1657 # For merge changeset, if we move p to dests[i] unconditionally, both |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1658 # parents may change and the end result looks like "the merge loses a |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1659 # parent", which is a surprise. This is a limit because "--dest" only |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1660 # accepts one dest per src. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1661 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1662 # Therefore, only move p with reasonable conditions (in this order): |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1663 # 1. use dest, if dest is a descendent of (p or one of p's successors) |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1664 # 2. use p's rebased result, if p is rebased (state[p] > 0) |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1665 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1666 # Comparing with adjustdest, the logic here does some additional work: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1667 # 1. decide which parents will not be moved towards dest |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1668 # 2. if the above decision is "no", should a parent still be moved |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1669 # because it was rebased? |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1670 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1671 # For example: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1672 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1673 # C # "rebase -r C -d D" is an error since none of the parents |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1674 # /| # can be moved. "rebase -r B+C -d D" will move C's parent |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1675 # A B D # B (using rule "2."), since B will be rebased. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1676 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1677 # The loop tries to be not rely on the fact that a Mercurial node has |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1678 # at most 2 parents. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1679 for i, p in enumerate(oldps): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1680 np = p # new parent |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1681 if any(isancestor(x, dests[i]) for x in successorrevs(repo, p)): |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1682 np = dests[i] |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1683 elif p in state and state[p] > 0: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1684 np = state[p] |
23484
cf3495dfd7ed
rebase: move base calculation from rebasenode() to defineparents()
Mads Kiilerich <madski@unity3d.com>
parents:
23461
diff
changeset
|
1685 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1686 # If one parent becomes an ancestor of the other, drop the ancestor |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1687 for j, x in enumerate(newps[:i]): |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1688 if x == nullrev: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1689 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1690 if isancestor(np, x): # CASE-1 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1691 np = nullrev |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1692 elif isancestor(x, np): # CASE-2 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1693 newps[j] = np |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1694 np = nullrev |
33863
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1695 # New parents forming an ancestor relationship does not |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1696 # mean the old parents have a similar relationship. Do not |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1697 # set bases[x] to nullrev. |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1698 bases[j], bases[i] = bases[i], bases[j] |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1699 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1700 newps[i] = np |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1701 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1702 # "rebasenode" updates to new p1, and the old p1 will be used as merge |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1703 # base. If only p2 changes, merging using unchanged p1 as merge base is |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1704 # suboptimal. Therefore swap parents to make the merge sane. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1705 if newps[1] != nullrev and oldps[0] == newps[0]: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1706 assert len(newps) == 2 and len(oldps) == 2 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1707 newps.reverse() |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1708 bases.reverse() |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1709 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1710 # No parent change might be an error because we fail to make rev a |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1711 # descendent of requested dest. This can happen, for example: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1712 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1713 # C # rebase -r C -d D |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1714 # /| # None of A and B will be changed to D and rebase fails. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1715 # A B D |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1716 if set(newps) == set(oldps) and dest not in newps: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1717 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1718 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1719 b'cannot rebase %d:%s without ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1720 b'moving at least one of its parents' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1721 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1722 % (rev, repo[rev]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1723 ) |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1724 |
34006 | 1725 # Source should not be ancestor of dest. The check here guarantees it's |
1726 # impossible. With multi-dest, the initial check does not cover complex | |
1727 # cases since we don't have abstractions to dry-run rebase cheaply. | |
1728 if any(p != nullrev and isancestor(rev, p) for p in newps): | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1729 raise error.Abort(_(b'source is ancestor of destination')) |
34006 | 1730 |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1731 # Check if the merge will contain unwanted changes. That may happen if |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1732 # there are multiple special (non-changelog ancestor) merge bases, which |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1733 # cannot be handled well by the 3-way merge algorithm. For example: |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1734 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1735 # F |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1736 # /| |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1737 # D E # "rebase -r D+E+F -d Z", when rebasing F, if "D" was chosen |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1738 # | | # as merge base, the difference between D and F will include |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1739 # B C # C, so the rebased F will contain C surprisingly. If "E" was |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1740 # |/ # chosen, the rebased F will contain B. |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1741 # A Z |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1742 # |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1743 # But our merge base candidates (D and E in above case) could still be |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1744 # better than the default (ancestor(F, Z) == null). Therefore still |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1745 # pick one (so choose p1 above). |
44341
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1746 if sum(1 for b in set(bases) if b != nullrev and b not in newps) > 1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1747 unwanted = [None, None] # unwanted[i]: unwanted revs if choose bases[i] |
33863
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1748 for i, base in enumerate(bases): |
44341
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1749 if base == nullrev or base in newps: |
33863
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1750 continue |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1751 # Revisions in the side (not chosen as merge base) branch that |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1752 # might contain "surprising" contents |
44167
4263aaab651d
rebase: clarify a little by calculating a set in Python instead of in revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
44095
diff
changeset
|
1753 other_bases = set(bases) - {base} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1754 siderevs = list( |
44167
4263aaab651d
rebase: clarify a little by calculating a set in Python instead of in revset
Martin von Zweigbergk <martinvonz@google.com>
parents:
44095
diff
changeset
|
1755 repo.revs(b'(%ld %% (%d+%d))', other_bases, base, dest) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1756 ) |
23484
cf3495dfd7ed
rebase: move base calculation from rebasenode() to defineparents()
Mads Kiilerich <madski@unity3d.com>
parents:
23461
diff
changeset
|
1757 |
33863
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1758 # If those revisions are covered by rebaseset, the result is good. |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1759 # A merge in rebaseset would be considered to cover its ancestors. |
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1760 if siderevs: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1761 rebaseset = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1762 r for r, d in state.items() if d > 0 and r not in obsskipped |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1763 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1764 merges = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1765 r for r in rebaseset if cl.parentrevs(r)[1] != nullrev |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1766 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1767 unwanted[i] = list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1768 repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1769 b'%ld - (::%ld) - %ld', siderevs, merges, rebaseset |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1770 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1771 ) |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1772 |
44341
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1773 if any(revs is not None for revs in unwanted): |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1774 # Choose a merge base that has a minimal number of unwanted revs. |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1775 l, i = min( |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1776 (len(revs), i) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1777 for i, revs in enumerate(unwanted) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1778 if revs is not None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1779 ) |
33863
3160876c6e4e
rebase: choose merge base without unwanted revisions
Jun Wu <quark@fb.com>
parents:
33849
diff
changeset
|
1780 |
44341
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1781 # The merge will include unwanted revisions. Abort now. Revisit this if |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1782 # we have a more advanced merge algorithm that handles multiple bases. |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1783 if l > 0: |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1784 unwanteddesc = _(b' or ').join( |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1785 ( |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1786 b', '.join(b'%d:%s' % (r, repo[r]) for r in revs) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1787 for revs in unwanted |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1788 if revs is not None |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1789 ) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1790 ) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1791 raise error.Abort( |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1792 _(b'rebasing %d:%s will include unwanted changes from %s') |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1793 % (rev, repo[rev], unwanteddesc) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1794 ) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1795 |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1796 # newps[0] should match merge base if possible. Currently, if newps[i] |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1797 # is nullrev, the only case is newps[i] and newps[j] (j < i), one is |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1798 # the other's ancestor. In that case, it's fine to not swap newps here. |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1799 # (see CASE-1 and CASE-2 above) |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1800 if i != 0: |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1801 if newps[i] != nullrev: |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1802 newps[0], newps[i] = newps[i], newps[0] |
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1803 bases[0], bases[i] = bases[i], bases[0] |
44214
3d2de64c49d2
rebase: define base in only place in defineparents()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44194
diff
changeset
|
1804 |
3d2de64c49d2
rebase: define base in only place in defineparents()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44194
diff
changeset
|
1805 # "rebasenode" updates to new p1, use the corresponding merge base. |
44341
77bb38be00ea
rebase: always be graft-like, not merge-like, also for merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1806 base = bases[0] |
44168
1cb7ae9b0071
rebase: move some variables after an error cases where they're not needed
Martin von Zweigbergk <martinvonz@google.com>
parents:
44167
diff
changeset
|
1807 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1808 repo.ui.debug(b" future parents are %d and %d\n" % tuple(newps)) |
33786
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1809 |
0975506120fb
rebase: rewrite core algorithm (issue5578) (issue5630)
Jun Wu <quark@fb.com>
parents:
33736
diff
changeset
|
1810 return newps[0], newps[1], base |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1811 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1812 |
7955
c3d4ff03ec72
rebase: keep original mq patch format (Issue1574)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
7954
diff
changeset
|
1813 def isagitpatch(repo, patchname): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1814 """Return true if the given patch is in git format""" |
7955
c3d4ff03ec72
rebase: keep original mq patch format (Issue1574)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
7954
diff
changeset
|
1815 mqpatch = os.path.join(repo.mq.path, patchname) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1816 for line in patch.linereader(open(mqpatch, b'rb')): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1817 if line.startswith(b'diff --git'): |
7955
c3d4ff03ec72
rebase: keep original mq patch format (Issue1574)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
7954
diff
changeset
|
1818 return True |
c3d4ff03ec72
rebase: keep original mq patch format (Issue1574)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
7954
diff
changeset
|
1819 return False |
c3d4ff03ec72
rebase: keep original mq patch format (Issue1574)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
7954
diff
changeset
|
1820 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1821 |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1822 def updatemq(repo, state, skipped, **opts): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1823 """Update rebased mq patches - finalize and then import them""" |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1824 mqrebase = {} |
11537
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1825 mq = repo.mq |
14572
8ff2957c1d82
mq: rename full_series to fullseries
Adrian Buehlmann <adrian@cadifra.com>
parents:
14509
diff
changeset
|
1826 original_series = mq.fullseries[:] |
16531
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1827 skippedpatches = set() |
14497
ea585f2b1adc
rebase: restore mq guards after rebasing (issue2107)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
13894
diff
changeset
|
1828 |
11537
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1829 for p in mq.applied: |
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1830 rev = repo[p.node].rev() |
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1831 if rev in state: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1832 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1833 b'revision %d is an mq patch (%s), finalize it.\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1834 % (rev, p.name) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1835 ) |
11537
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1836 mqrebase[rev] = (p.name, isagitpatch(repo, p.name)) |
16531
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1837 else: |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1838 # Applied but not rebased, not sure this should happen |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1839 skippedpatches.add(p.name) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1840 |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1841 if mqrebase: |
11537
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1842 mq.finish(repo, mqrebase.keys()) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1843 |
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1844 # We must start import from the newest revision |
8210
344751cd8cb8
replace various uses of list.reverse()
Matt Mackall <mpm@selenic.com>
parents:
8209
diff
changeset
|
1845 for rev in sorted(mqrebase, reverse=True): |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1846 if rev not in skipped: |
11537
0a044e5ff489
rebase: small cosmetic cleanups
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11531
diff
changeset
|
1847 name, isgit = mqrebase[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1848 repo.ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1849 _(b'updating mq patch %s to %d:%s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1850 % (name, state[rev], repo[state[rev]]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1851 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1852 mq.qimport( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1853 repo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1854 (), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1855 patchname=name, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1856 git=isgit, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1857 rev=[b"%d" % state[rev]], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1858 ) |
16531
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1859 else: |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1860 # Rebased and skipped |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1861 skippedpatches.add(mqrebase[rev][0]) |
14497
ea585f2b1adc
rebase: restore mq guards after rebasing (issue2107)
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
13894
diff
changeset
|
1862 |
16531
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1863 # Patches were either applied and rebased and imported in |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1864 # order, applied and removed or unapplied. Discard the removed |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1865 # ones while preserving the original series order and guards. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1866 newseries = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1867 s |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1868 for s in original_series |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1869 if mq.guard_re.split(s, 1)[0] not in skippedpatches |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1870 ] |
16531
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1871 mq.fullseries[:] = newseries |
b9f51f49bf2a
rebase: preserve mq series order, guarded patches (issue2849)
Patrick Mezard <patrick@mezard.eu>
parents:
16280
diff
changeset
|
1872 mq.seriesdirty = True |
14580
92101ea35015
mq: rename save_dirty to savedirty
Adrian Buehlmann <adrian@cadifra.com>
parents:
14572
diff
changeset
|
1873 mq.savedirty() |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1874 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1875 |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1876 def storecollapsemsg(repo, collapsemsg): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1877 """Store the collapse message to allow recovery""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1878 collapsemsg = collapsemsg or b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1879 f = repo.vfs(b"last-message.txt", b"w") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1880 f.write(b"%s\n" % collapsemsg) |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1881 f.close() |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1882 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1883 |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1884 def clearcollapsemsg(repo): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1885 """Remove collapse message file""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1886 repo.vfs.unlinkpath(b"last-message.txt", ignoremissing=True) |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1887 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1888 |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
1889 def restorecollapsemsg(repo, isabort): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1890 """Restore previously stored collapse message""" |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1891 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1892 f = repo.vfs(b"last-message.txt") |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1893 collapsemsg = f.readline().strip() |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1894 f.close() |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1895 except IOError as err: |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1896 if err.errno != errno.ENOENT: |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1897 raise |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
1898 if isabort: |
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
1899 # Oh well, just abort like normal |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1900 collapsemsg = b'' |
31225
749b057b01f3
rebase: allow aborting if last-message.txt is missing
Durham Goode <durham@fb.com>
parents:
31224
diff
changeset
|
1901 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1902 raise error.Abort(_(b'missing .hg/last-message.txt for rebase')) |
28185
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1903 return collapsemsg |
c7e8948627f3
rebase: adds storing collapse message (issue4792)
liscju <piotr.listkiewicz@gmail.com>
parents:
28136
diff
changeset
|
1904 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1905 |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1906 def clearstatus(repo): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
1907 """Remove the status files""" |
33056
2312e70cf78b
rebase: clean up rebasestate from active transaction
Jun Wu <quark@fb.com>
parents:
32918
diff
changeset
|
1908 # Make sure the active transaction won't write the state file |
2312e70cf78b
rebase: clean up rebasestate from active transaction
Jun Wu <quark@fb.com>
parents:
32918
diff
changeset
|
1909 tr = repo.currenttransaction() |
2312e70cf78b
rebase: clean up rebasestate from active transaction
Jun Wu <quark@fb.com>
parents:
32918
diff
changeset
|
1910 if tr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1911 tr.removefilegenerator(b'rebasestate') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1912 repo.vfs.unlinkpath(b"rebasestate", ignoremissing=True) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1913 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1914 |
34006 | 1915 def sortsource(destmap): |
1916 """yield source revisions in an order that we only rebase things once | |
1917 | |
1918 If source and destination overlaps, we should filter out revisions | |
1919 depending on other revisions which hasn't been rebased yet. | |
1920 | |
1921 Yield a sorted list of revisions each time. | |
1922 | |
1923 For example, when rebasing A to B, B to C. This function yields [B], then | |
1924 [A], indicating B needs to be rebased first. | |
1925 | |
1926 Raise if there is a cycle so the rebase is impossible. | |
1927 """ | |
1928 srcset = set(destmap) | |
1929 while srcset: | |
1930 srclist = sorted(srcset) | |
1931 result = [] | |
1932 for r in srclist: | |
1933 if destmap[r] not in srcset: | |
1934 result.append(r) | |
1935 if not result: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1936 raise error.Abort(_(b'source and destination form a cycle')) |
34006 | 1937 srcset -= set(result) |
1938 yield result | |
1939 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1940 |
34008
9422107a6b64
rebase: move working parent and bookmark for obsoleted revs (BC)
Jun Wu <quark@fb.com>
parents:
34007
diff
changeset
|
1941 def buildstate(repo, destmap, collapse): |
15267
3bfdfefea2fc
rebase: use revset as soon as possible in internal logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15219
diff
changeset
|
1942 '''Define which revisions are going to be rebased and where |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1943 |
15267
3bfdfefea2fc
rebase: use revset as soon as possible in internal logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15219
diff
changeset
|
1944 repo: repo |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1945 destmap: {srcrev: destrev} |
17005
50f434510da6
rebase: do not add second parent to rebased changeset (drop detach option) (BC)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
16867
diff
changeset
|
1946 ''' |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1947 rebaseset = destmap.keys() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1948 originalwd = repo[b'.'].rev() |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1949 |
10672
c2e1e637d4da
rebase: always check if rebasing onto an applied mq patch.
Greg Ward <greg-hg@gerg.ca>
parents:
10659
diff
changeset
|
1950 # This check isn't strictly necessary, since mq detects commits over an |
c2e1e637d4da
rebase: always check if rebasing onto an applied mq patch.
Greg Ward <greg-hg@gerg.ca>
parents:
10659
diff
changeset
|
1951 # applied patch. But it prevents messing up the working directory when |
c2e1e637d4da
rebase: always check if rebasing onto an applied mq patch.
Greg Ward <greg-hg@gerg.ca>
parents:
10659
diff
changeset
|
1952 # a partially completed rebase is blocked by mq. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1953 if b'qtip' in repo.tags(): |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44438
diff
changeset
|
1954 mqapplied = {repo[s.node].rev() for s in repo.mq.applied} |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1955 if set(destmap.values()) & mqapplied: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1956 raise error.Abort(_(b'cannot rebase onto an applied mq patch')) |
10672
c2e1e637d4da
rebase: always check if rebasing onto an applied mq patch.
Greg Ward <greg-hg@gerg.ca>
parents:
10659
diff
changeset
|
1957 |
34006 | 1958 # Get "cycle" error early by exhausting the generator. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1959 sortedsrc = list(sortsource(destmap)) # a list of sorted revs |
34006 | 1960 if not sortedsrc: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1961 raise error.Abort(_(b'no matching revisions')) |
34006 | 1962 |
1963 # Only check the first batch of revisions to rebase not depending on other | |
1964 # rebaseset. This means "source is ancestor of destination" for the second | |
1965 # (and following) batches of revisions are not checked here. We rely on | |
1966 # "defineparents" to do that check. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1967 roots = list(repo.set(b'roots(%ld)', sortedsrc[0])) |
15267
3bfdfefea2fc
rebase: use revset as soon as possible in internal logic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
15219
diff
changeset
|
1968 if not roots: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1969 raise error.Abort(_(b'no matching revisions')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1970 |
36271
53be14874ee8
rebase: sort roots by revision
Augie Fackler <augie@google.com>
parents:
36185
diff
changeset
|
1971 def revof(r): |
53be14874ee8
rebase: sort roots by revision
Augie Fackler <augie@google.com>
parents:
36185
diff
changeset
|
1972 return r.rev() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1973 |
36271
53be14874ee8
rebase: sort roots by revision
Augie Fackler <augie@google.com>
parents:
36185
diff
changeset
|
1974 roots = sorted(roots, key=revof) |
32175
456b4a32d75f
rebase: don't update state dict same way for each root
Martin von Zweigbergk <martinvonz@google.com>
parents:
32084
diff
changeset
|
1975 state = dict.fromkeys(rebaseset, revtodo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
1976 emptyrebase = len(sortedsrc) == 1 |
18424
100fdc84670f
rebase: support multiple roots for rebaseset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18386
diff
changeset
|
1977 for root in roots: |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
1978 dest = repo[destmap[root.rev()]] |
18424
100fdc84670f
rebase: support multiple roots for rebaseset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18386
diff
changeset
|
1979 commonbase = root.ancestor(dest) |
100fdc84670f
rebase: support multiple roots for rebaseset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18386
diff
changeset
|
1980 if commonbase == root: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1981 raise error.Abort(_(b'source is ancestor of destination')) |
18424
100fdc84670f
rebase: support multiple roots for rebaseset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18386
diff
changeset
|
1982 if commonbase == dest: |
31380
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1983 wctx = repo[None] |
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1984 if dest == wctx.p1(): |
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1985 # when rebasing to '.', it will use the current wd branch name |
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1986 samebranch = root.branch() == wctx.branch() |
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1987 else: |
65d93d712777
rebase: allow rebasing children of wd to wd if a new branch has been set (BC)
Mads Kiilerich <mads@kiilerich.com>
parents:
31311
diff
changeset
|
1988 samebranch = root.branch() == dest.branch() |
32900
07d5a503124c
rebase: rewrite "x in y.children()" as "y in x.parents()"
Martin von Zweigbergk <martinvonz@google.com>
parents:
32594
diff
changeset
|
1989 if not collapse and samebranch and dest in root.parents(): |
32272
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1990 # mark the revision as done by setting its new revision |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1991 # equal to its old (current) revisions |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1992 state[root.rev()] = root.rev() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1993 repo.ui.debug(b'source is a child of destination\n') |
32272
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1994 continue |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
1995 |
32272
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1996 emptyrebase = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1997 repo.ui.debug(b'rebase onto %s starting from %s\n' % (dest, root)) |
32272
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1998 if emptyrebase: |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
1999 return None |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
2000 for rev in sorted(state): |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
2001 parents = [p for p in repo.changelog.parentrevs(rev) if p != nullrev] |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
2002 # if all parents of this revision are done, then so is this revision |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
2003 if parents and all((state.get(p) == p for p in parents)): |
78496ac30025
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
Martin von Zweigbergk <martinvonz@google.com>
parents:
32249
diff
changeset
|
2004 state[rev] = rev |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
2005 return originalwd, destmap, state |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2006 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2007 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2008 def clearrebased( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2009 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2010 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2011 destmap, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2012 state, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2013 skipped, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2014 collapsedas=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2015 keepf=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2016 fm=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2017 backup=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2018 ): |
17613
aafc521668d8
rebase: properly handle --collapse when creating obsolescence marker
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17612
diff
changeset
|
2019 """dispose of rebased revision at the end of the rebase |
aafc521668d8
rebase: properly handle --collapse when creating obsolescence marker
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17612
diff
changeset
|
2020 |
aafc521668d8
rebase: properly handle --collapse when creating obsolescence marker
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17612
diff
changeset
|
2021 If `collapsedas` is not None, the rebase was a collapse whose result if the |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2022 `collapsedas` node. |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2023 |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2024 If `keepf` is not True, the rebase has --keep set and no nodes should be |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2025 removed (but bookmarks still need to be moved). |
38799
2002c193f2bc
rebase: support "history-editing-backup" config option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38681
diff
changeset
|
2026 |
2002c193f2bc
rebase: support "history-editing-backup" config option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38681
diff
changeset
|
2027 If `backup` is False, no backup will be stored when stripping rebased |
2002c193f2bc
rebase: support "history-editing-backup" config option
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
38681
diff
changeset
|
2028 revisions. |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2029 """ |
33332
3b7cb3d17137
rebase: use scmutil.cleanupnodes (issue5606) (BC)
Jun Wu <quark@fb.com>
parents:
33157
diff
changeset
|
2030 tonode = repo.changelog.node |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2031 replacements = {} |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2032 moves = {} |
39915
7198cdbbbde1
rebase: don't try to prune obsolete changeset already in the destination
Boris Feld <boris.feld@octobus.net>
parents:
39328
diff
changeset
|
2033 stripcleanup = not obsolete.isenabled(repo, obsolete.createmarkersopt) |
39919
0428feb1f0d7
rebase: explicitly track collapses as fold
Boris Feld <boris.feld@octobus.net>
parents:
39918
diff
changeset
|
2034 |
0428feb1f0d7
rebase: explicitly track collapses as fold
Boris Feld <boris.feld@octobus.net>
parents:
39918
diff
changeset
|
2035 collapsednodes = [] |
33333 | 2036 for rev, newrev in sorted(state.items()): |
2037 if newrev >= 0 and newrev != rev: | |
34354
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2038 oldnode = tonode(rev) |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2039 newnode = collapsedas or tonode(newrev) |
2f427b57bf90
rebase: move bookmarks with --keep (issue5682)
Jun Wu <quark@fb.com>
parents:
33622
diff
changeset
|
2040 moves[oldnode] = newnode |
42975
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2041 succs = None |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2042 if rev in skipped: |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2043 if stripcleanup or not repo[rev].obsolete(): |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2044 succs = () |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2045 elif collapsedas: |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2046 collapsednodes.append(oldnode) |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2047 else: |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2048 succs = (newnode,) |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2049 if succs is not None: |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2050 replacements[(oldnode,)] = succs |
39919
0428feb1f0d7
rebase: explicitly track collapses as fold
Boris Feld <boris.feld@octobus.net>
parents:
39918
diff
changeset
|
2051 if collapsednodes: |
0428feb1f0d7
rebase: explicitly track collapses as fold
Boris Feld <boris.feld@octobus.net>
parents:
39918
diff
changeset
|
2052 replacements[tuple(collapsednodes)] = (collapsedas,) |
34883
c858afe9c59b
rebase: add support to output nodechanges
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34872
diff
changeset
|
2053 if fm: |
35125
f56a30b844aa
rebase: use fm.formatlist() and fm.formatdict() to support user template
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35058
diff
changeset
|
2054 hf = fm.hexfunc |
f56a30b844aa
rebase: use fm.formatlist() and fm.formatdict() to support user template
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35058
diff
changeset
|
2055 fl = fm.formatlist |
f56a30b844aa
rebase: use fm.formatlist() and fm.formatdict() to support user template
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35058
diff
changeset
|
2056 fd = fm.formatdict |
39917
a8ccd9523d40
rebase: expand a long "one-liner"
Boris Feld <boris.feld@octobus.net>
parents:
39915
diff
changeset
|
2057 changes = {} |
43105
649d3ac37a12
py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2058 for oldns, newn in pycompat.iteritems(replacements): |
39918
a8318c9cb2ad
rebase: use tuple as `replacement` keys
Boris Feld <boris.feld@octobus.net>
parents:
39917
diff
changeset
|
2059 for oldn in oldns: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2060 changes[hf(oldn)] = fl([hf(n) for n in newn], name=b'node') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2061 nodechanges = fd(changes, key=b"oldnode", value=b"newnodes") |
34883
c858afe9c59b
rebase: add support to output nodechanges
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34872
diff
changeset
|
2062 fm.data(nodechanges=nodechanges) |
42975
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2063 if keepf: |
43c84b816445
rebase: track new nodes when --keep is set
Paul Gossman <pgossman@janestreet.com>
parents:
42613
diff
changeset
|
2064 replacements = {} |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2065 scmutil.cleanupnodes(repo, replacements, b'rebase', moves, backup=backup) |
17611
910123eac887
rebase: extract final changesets cleanup logic in a dedicated function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
17325
diff
changeset
|
2066 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2067 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
2068 def pullrebase(orig, ui, repo, *args, **opts): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43591
diff
changeset
|
2069 """Call rebase after pull if the latter has been invoked with --rebase""" |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2070 if opts.get('rebase'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2071 if ui.configbool(b'commands', b'rebase.requiredest'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2072 msg = _(b'rebase destination required by configuration') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2073 hint = _(b'use hg pull followed by hg rebase -d DEST') |
31733
ae6bab095c66
rebase: abort hg pull --rebase if rebase.requiredest is set (issue5514)
Ryan McElroy <rmcelroy@fb.com>
parents:
31731
diff
changeset
|
2074 raise error.Abort(msg, hint=hint) |
ae6bab095c66
rebase: abort hg pull --rebase if rebase.requiredest is set (issue5514)
Ryan McElroy <rmcelroy@fb.com>
parents:
31731
diff
changeset
|
2075 |
32918
04c9dd951a41
rebase: use context manager for locking in pullrebase()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32917
diff
changeset
|
2076 with repo.wlock(), repo.lock(): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2077 if opts.get('update'): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2078 del opts['update'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2079 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2080 b'--update and --rebase are not compatible, ignoring ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2081 b'the update flag\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2082 ) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2083 |
42532
12243f15d53e
statecheck: added support for STATES
Taapas Agrawal <taapas2897@gmail.com>
parents:
42530
diff
changeset
|
2084 cmdutil.checkunfinished(repo, skipmerge=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2085 cmdutil.bailifchanged( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2086 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2087 hint=_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2088 b'cannot pull with rebase: ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2089 b'please commit or shelve your changes first' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2090 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2091 ) |
30725
c2bd2f77965b
rebase: fail-fast the pull if working dir is not clean (BC)
Valters Vingolds <valters@vingolds.ch>
parents:
30709
diff
changeset
|
2092 |
26029
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2093 revsprepull = len(repo) |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2094 origpostincoming = commands.postincoming |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2095 |
26029
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2096 def _dummy(*args, **kwargs): |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2097 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2098 |
26029
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2099 commands.postincoming = _dummy |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2100 try: |
26960
6979fe2a6d75
rebase: add returning value from pullrebase function
liscju <piotr.listkiewicz@gmail.com>
parents:
26811
diff
changeset
|
2101 ret = orig(ui, repo, *args, **opts) |
26029
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2102 finally: |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2103 commands.postincoming = origpostincoming |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2104 revspostpull = len(repo) |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2105 if revspostpull > revsprepull: |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2106 # --rev option from pull conflict with rebase own --rev |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2107 # dropping it |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2108 if 'rev' in opts: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2109 del opts['rev'] |
26029
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2110 # positional argument from pull conflicts with rebase's own |
563ea14c62d4
rebase: lock the repo during the full rebase operation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25660
diff
changeset
|
2111 # --source. |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2112 if 'source' in opts: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2113 del opts['source'] |
29044
261c25372959
rebase: restrict rebase destination to the pulled set (issue5214)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29043
diff
changeset
|
2114 # revsprepull is the len of the repo, not revnum of tip. |
261c25372959
rebase: restrict rebase destination to the pulled set (issue5214)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29043
diff
changeset
|
2115 destspace = list(repo.changelog.revs(start=revsprepull)) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2116 opts['_destspace'] = destspace |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
2117 try: |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
2118 rebase(ui, repo, **opts) |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
2119 except error.NoMergeDestAbort: |
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
2120 # we can maybe update instead |
28118
0e3835c7e1cf
rebase: perform update through the 'update' command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28117
diff
changeset
|
2121 rev, _a, _b = destutil.destupdate(repo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2122 if rev == repo[b'.'].rev(): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2123 ui.status(_(b'nothing to rebase\n')) |
28189
fac3a24be50e
rebase: choose default destination the same way as 'hg merge' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28188
diff
changeset
|
2124 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2125 ui.status(_(b'nothing to rebase - updating instead\n')) |
28118
0e3835c7e1cf
rebase: perform update through the 'update' command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28117
diff
changeset
|
2126 # not passing argument to get the bare update behavior |
0e3835c7e1cf
rebase: perform update through the 'update' command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28117
diff
changeset
|
2127 # with warning and trumpets |
0e3835c7e1cf
rebase: perform update through the 'update' command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28117
diff
changeset
|
2128 commands.update(ui, repo) |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2129 else: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2130 if opts.get('tool'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2131 raise error.Abort(_(b'--tool can only be used with --rebase')) |
26960
6979fe2a6d75
rebase: add returning value from pullrebase function
liscju <piotr.listkiewicz@gmail.com>
parents:
26811
diff
changeset
|
2132 ret = orig(ui, repo, *args, **opts) |
6979fe2a6d75
rebase: add returning value from pullrebase function
liscju <piotr.listkiewicz@gmail.com>
parents:
26811
diff
changeset
|
2133 |
6979fe2a6d75
rebase: add returning value from pullrebase function
liscju <piotr.listkiewicz@gmail.com>
parents:
26811
diff
changeset
|
2134 return ret |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2135 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2136 |
27790
2d294dada4f8
rebase: small refactoring to allow better extensibility from extensions
Laurent Charignon <lcharignon@fb.com>
parents:
27746
diff
changeset
|
2137 def _filterobsoleterevs(repo, revs): |
2d294dada4f8
rebase: small refactoring to allow better extensibility from extensions
Laurent Charignon <lcharignon@fb.com>
parents:
27746
diff
changeset
|
2138 """returns a set of the obsolete revisions in revs""" |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44438
diff
changeset
|
2139 return {r for r in revs if repo[r].obsolete()} |
27790
2d294dada4f8
rebase: small refactoring to allow better extensibility from extensions
Laurent Charignon <lcharignon@fb.com>
parents:
27746
diff
changeset
|
2140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2141 |
34004
af609bb3487f
rebase: change internal format to support destination map
Jun Wu <quark@fb.com>
parents:
34003
diff
changeset
|
2142 def _computeobsoletenotrebased(repo, rebaseobsrevs, destmap): |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2143 """Return (obsoletenotrebased, obsoletewithoutsuccessorindestination). |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2144 |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2145 `obsoletenotrebased` is a mapping mapping obsolete => successor for all |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2146 obsolete nodes to be rebased given in `rebaseobsrevs`. |
27012
5eac7ab59b95
rebase: don't rebase obsolete commits with no successor
Laurent Charignon <lcharignon@fb.com>
parents:
27010
diff
changeset
|
2147 |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2148 `obsoletewithoutsuccessorindestination` is a set with obsolete revisions |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2149 without a successor in destination. |
35995
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2150 |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2151 `obsoleteextinctsuccessors` is a set of obsolete revisions with only |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2152 obsolete successors. |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2153 """ |
26349
92409f8dff5d
rebase: don't rebase obsolete commit whose successor is already rebased
Laurent Charignon <lcharignon@fb.com>
parents:
26301
diff
changeset
|
2154 obsoletenotrebased = {} |
42057
566daffc607d
cleanup: use set literals where possible
Martin von Zweigbergk <martinvonz@google.com>
parents:
41817
diff
changeset
|
2155 obsoletewithoutsuccessorindestination = set() |
566daffc607d
cleanup: use set literals where possible
Martin von Zweigbergk <martinvonz@google.com>
parents:
41817
diff
changeset
|
2156 obsoleteextinctsuccessors = set() |
26349
92409f8dff5d
rebase: don't rebase obsolete commit whose successor is already rebased
Laurent Charignon <lcharignon@fb.com>
parents:
26301
diff
changeset
|
2157 |
34095
7471193be725
rebase: remove unnecessary '.unfiltered()' calls
Jun Wu <quark@fb.com>
parents:
34094
diff
changeset
|
2158 assert repo.filtername is None |
26674
fd4a38bd7e49
rebase: use a direct reference to repo.changelog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26671
diff
changeset
|
2159 cl = repo.changelog |
43567
0fea03924990
index: use `index.get_rev` in `rebase._computeobsoletenotrebased`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43566
diff
changeset
|
2160 get_rev = cl.index.get_rev |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2161 extinctrevs = set(repo.revs(b'extinct()')) |
34003
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2162 for srcrev in rebaseobsrevs: |
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2163 srcnode = cl.node(srcrev) |
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2164 # XXX: more advanced APIs are required to handle split correctly |
35997
24f05489377b
rebase: make "successors" a set in _computeobsoletenotrebased()
Denis Laxalde <denis@laxalde.org>
parents:
35995
diff
changeset
|
2165 successors = set(obsutil.allsuccessors(repo.obsstore, [srcnode])) |
35994
ae0d25071fca
rebase: eliminate node from successors early in _computeobsoletenotrebased()
Denis Laxalde <denis@laxalde.org>
parents:
35917
diff
changeset
|
2166 # obsutil.allsuccessors includes node itself |
ae0d25071fca
rebase: eliminate node from successors early in _computeobsoletenotrebased()
Denis Laxalde <denis@laxalde.org>
parents:
35917
diff
changeset
|
2167 successors.remove(srcnode) |
43567
0fea03924990
index: use `index.get_rev` in `rebase._computeobsoletenotrebased`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43566
diff
changeset
|
2168 succrevs = {get_rev(s) for s in successors} |
0fea03924990
index: use `index.get_rev` in `rebase._computeobsoletenotrebased`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43566
diff
changeset
|
2169 succrevs.discard(None) |
38673
20a30bb8f276
rebase: use revnums (not nodes) for set of extinct revisions
Martin von Zweigbergk <martinvonz@google.com>
parents:
38672
diff
changeset
|
2170 if succrevs.issubset(extinctrevs): |
35995
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2171 # all successors are extinct |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2172 obsoleteextinctsuccessors.add(srcrev) |
35994
ae0d25071fca
rebase: eliminate node from successors early in _computeobsoletenotrebased()
Denis Laxalde <denis@laxalde.org>
parents:
35917
diff
changeset
|
2173 if not successors: |
ae0d25071fca
rebase: eliminate node from successors early in _computeobsoletenotrebased()
Denis Laxalde <denis@laxalde.org>
parents:
35917
diff
changeset
|
2174 # no successor |
34003
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2175 obsoletenotrebased[srcrev] = None |
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2176 else: |
38672
0f8599afb92f
rebase: avoid converting from nodes to revnums twice
Martin von Zweigbergk <martinvonz@google.com>
parents:
38671
diff
changeset
|
2177 dstrev = destmap[srcrev] |
0f8599afb92f
rebase: avoid converting from nodes to revnums twice
Martin von Zweigbergk <martinvonz@google.com>
parents:
38671
diff
changeset
|
2178 for succrev in succrevs: |
0f8599afb92f
rebase: avoid converting from nodes to revnums twice
Martin von Zweigbergk <martinvonz@google.com>
parents:
38671
diff
changeset
|
2179 if cl.isancestorrev(succrev, dstrev): |
0f8599afb92f
rebase: avoid converting from nodes to revnums twice
Martin von Zweigbergk <martinvonz@google.com>
parents:
38671
diff
changeset
|
2180 obsoletenotrebased[srcrev] = succrev |
34003
ba9d5d48bf95
rebase: rewrite _computeobsoletenotrebased
Jun Wu <quark@fb.com>
parents:
33864
diff
changeset
|
2181 break |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2182 else: |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2183 # If 'srcrev' has a successor in rebase set but none in |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2184 # destination (which would be catched above), we shall skip it |
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2185 # and its descendants to avoid divergence. |
39328
94a4980695f8
rebase: skip extinct revisions even if it has no successor in rebase set
Martin von Zweigbergk <martinvonz@google.com>
parents:
39135
diff
changeset
|
2186 if srcrev in extinctrevs or any(s in destmap for s in succrevs): |
35058
a68c3420be41
rebase: exclude descendants of obsoletes w/o a successor in dest (issue5300)
Denis Laxalde <denis@laxalde.org>
parents:
35002
diff
changeset
|
2187 obsoletewithoutsuccessorindestination.add(srcrev) |
27012
5eac7ab59b95
rebase: don't rebase obsolete commits with no successor
Laurent Charignon <lcharignon@fb.com>
parents:
27010
diff
changeset
|
2188 |
35995
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2189 return ( |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2190 obsoletenotrebased, |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2191 obsoletewithoutsuccessorindestination, |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2192 obsoleteextinctsuccessors, |
b7e2cf114e85
rebase: do not consider extincts for divergence detection (issue5782)
Denis Laxalde <denis@laxalde.org>
parents:
35994
diff
changeset
|
2193 ) |
26349
92409f8dff5d
rebase: don't rebase obsolete commit whose successor is already rebased
Laurent Charignon <lcharignon@fb.com>
parents:
26301
diff
changeset
|
2194 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2195 |
42583
b9bc47211cf5
abort: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2196 def abortrebase(ui, repo): |
b9bc47211cf5
abort: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2197 with repo.wlock(), repo.lock(): |
b9bc47211cf5
abort: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2198 rbsrt = rebaseruntime(repo, ui) |
b9bc47211cf5
abort: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2199 rbsrt._prepareabortorcontinue(isabort=True) |
b9bc47211cf5
abort: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42533
diff
changeset
|
2200 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2201 |
42613
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2202 def continuerebase(ui, repo): |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2203 with repo.wlock(), repo.lock(): |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2204 rbsrt = rebaseruntime(repo, ui) |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44666
diff
changeset
|
2205 ms = mergestatemod.mergestate.read(repo) |
42613
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2206 mergeutil.checkunresolved(ms) |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2207 retcode = rbsrt._prepareabortorcontinue(isabort=False) |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2208 if retcode is not None: |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2209 return retcode |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2210 rbsrt._performrebase(None) |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2211 rbsrt._finishrebase() |
35ebdbb38efb
continue: added support for rebase
Taapas Agrawal <taapas2897@gmail.com>
parents:
42583
diff
changeset
|
2212 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2213 |
19214
0250047a365e
summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents:
19059
diff
changeset
|
2214 def summaryhook(ui, repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2215 if not repo.vfs.exists(b'rebasestate'): |
19214
0250047a365e
summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents:
19059
diff
changeset
|
2216 return |
19849
e7fa36d2ad3a
rebase: catch RepoLookupError at restoring rebase state for summary
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19848
diff
changeset
|
2217 try: |
29403
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
2218 rbsrt = rebaseruntime(repo, ui, {}) |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
2219 rbsrt.restorestatus() |
b95fd7c15b7c
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi <ikostia@fb.com>
parents:
29402
diff
changeset
|
2220 state = rbsrt.state |
19849
e7fa36d2ad3a
rebase: catch RepoLookupError at restoring rebase state for summary
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19848
diff
changeset
|
2221 except error.RepoLookupError: |
e7fa36d2ad3a
rebase: catch RepoLookupError at restoring rebase state for summary
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19848
diff
changeset
|
2222 # i18n: column positioning for "hg summary" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2223 msg = _(b'rebase: (use "hg rebase --abort" to clear broken state)\n') |
19849
e7fa36d2ad3a
rebase: catch RepoLookupError at restoring rebase state for summary
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19848
diff
changeset
|
2224 ui.write(msg) |
e7fa36d2ad3a
rebase: catch RepoLookupError at restoring rebase state for summary
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19848
diff
changeset
|
2225 return |
43104
74802979dd9d
py3: define and use pycompat.itervalues()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
2226 numrebased = len([i for i in pycompat.itervalues(state) if i >= 0]) |
19214
0250047a365e
summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents:
19059
diff
changeset
|
2227 # i18n: column positioning for "hg summary" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2228 ui.write( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2229 _(b'rebase: %s, %s (rebase --continue)\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2230 % ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2231 ui.label(_(b'%d rebased'), b'rebase.rebased') % numrebased, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2232 ui.label(_(b'%d remaining'), b'rebase.remaining') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2233 % (len(state) - numrebased), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2234 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2235 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2236 |
19214
0250047a365e
summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents:
19059
diff
changeset
|
2237 |
6906
808f03f61ebe
Add rebase extension
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
diff
changeset
|
2238 def uisetup(ui): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2239 # Replace pull with a decorator to provide --rebase option |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2240 entry = extensions.wrapcommand(commands.table, b'pull', pullrebase) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2241 entry[1].append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2242 (b'', b'rebase', None, _(b"rebase working directory to branch head")) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2243 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2244 entry[1].append((b't', b'tool', b'', _(b"specify merge tool for rebase"))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2245 cmdutil.summaryhooks.add(b'rebase', summaryhook) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2246 statemod.addunfinished( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2247 b'rebase', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2248 fname=b'rebasestate', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2249 stopflag=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2250 continueflag=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2251 abortfunc=abortrebase, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2252 continuefunc=continuerebase, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42975
diff
changeset
|
2253 ) |