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