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