Mercurial > evolve
annotate hgext3rd/evolve/evolvecmd.py @ 5558:5f2c85ea8b33
evolve: set other side of public content div using mutability
In upcoming behavior we will no longer be confident that
evovlestate['other-divergent'] will always contain the
mutable side of public content divergence since we won't
swap the "divergent" and "other" cset (the swapping is used
right now when "divergent" side need to relocate, because
we keep the one which need relocation to `other` side)
author | Sushil khanchi <sushilkhanchi97@gmail.com> |
---|---|
date | Mon, 31 Aug 2020 15:35:31 +0530 |
parents | ca45afafd94f |
children | eb09d05f69f3 |
rev | line source |
---|---|
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1 # Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com> |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 # Logilab SA <contact@logilab.fr> |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 # Patrick Mezard <patrick@mezard.eu> |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 # |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
9 """logic related to hg evolve command""" |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
11 import collections |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
12 import re |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
13 |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
14 from mercurial import ( |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
15 bookmarks as bookmarksmod, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
16 cmdutil, |
3579
3a4552b30ba8
compat: use mergetoolopts from commands.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3577
diff
changeset
|
17 commands, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
18 context, |
5181
c979d64a2589
compat: drop 4.5 compatibility layer for log utility
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5179
diff
changeset
|
19 encoding, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
20 error, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
21 hg, |
5181
c979d64a2589
compat: drop 4.5 compatibility layer for log utility
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5179
diff
changeset
|
22 logcmdutil, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
23 merge, |
4311
8aa28e68ac44
evolve: detect unresolved conflict during evolve --continue (issue5966)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4297
diff
changeset
|
24 mergeutil, |
3977
a0a4f4de9ea3
evolvecmd: import mercurial.node module as nodemod
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3927
diff
changeset
|
25 node as nodemod, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
26 obsolete, |
3697
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3694
diff
changeset
|
27 obsutil, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
28 phases, |
4752
8a73a8df63b6
py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents:
4747
diff
changeset
|
29 pycompat, |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
30 repair, |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
31 scmutil, |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
32 simplemerge, |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
33 util, |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
34 ) |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
35 |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
36 from mercurial.i18n import _ |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
37 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
38 from . import ( |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
39 cmdrewrite, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
40 compat, |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
41 exthelper, |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
42 rewriteutil, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
43 state, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
44 utility, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
45 ) |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
46 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
47 TROUBLES = compat.TROUBLES |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
48 shorttemplate = utility.shorttemplate |
4153
e1f6f9da82c1
utility: add a template alias that will be used in evolve msgs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4122
diff
changeset
|
49 stacktemplate = utility.stacktemplate |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
50 _bookmarksupdater = rewriteutil.bookmarksupdater |
4801
16c1398b0063
python3: prefix all regex to work with python 2 and 3
Raphaël Gomès <rgomes@octobus.net>
parents:
4798
diff
changeset
|
51 sha1re = re.compile(br'\b[0-9a-f]{6,40}\b') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
52 |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
53 eh = exthelper.exthelper() |
3579
3a4552b30ba8
compat: use mergetoolopts from commands.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3577
diff
changeset
|
54 mergetoolopts = commands.mergetoolopts |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
55 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
56 abortmessage = _(b"see `hg help evolve.interrupted`\n") |
3796
ededd22e7c7b
evolve: show `hg help evolve.interrupted-evolve` in error when conflicts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3795
diff
changeset
|
57 |
3478
4a1ccae58323
evolvecmd: pass evolvestate object to _solve* functions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3477
diff
changeset
|
58 def _solveone(ui, repo, ctx, evolvestate, dryrun, confirm, |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
59 progresscb, category, stacktmplt=False): |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
60 """Resolve the troubles affecting one revision |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
62 returns a tuple (bool, newnode) where, |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
63 bool: a boolean value indicating whether the instability was solved |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
64 newnode: if bool is True, then the newnode of the resultant commit |
5022
95af630d913a
evolvecmd: fix a typo node->None
Martin von Zweigbergk <martinvonz@google.com>
parents:
5021
diff
changeset
|
65 formed. newnode can be None, when resolution led to no new |
4297
699e25687cc5
issue-6028: resolves 6028 - return (False, ".") instead of (False, '')
James Reynolds <james.glenn.reynolds@gmail.com>
parents:
4269
diff
changeset
|
66 commit. If bool is False, this is ".". |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
67 """ |
4610
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
68 tr = repo.currenttransaction() |
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
69 assert tr is not None |
4155
cc3a0b13ae57
evolve: use stack alias s# in `hg evolve` msgs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4154
diff
changeset
|
70 displayer = None |
5397
03ce095dc10d
evolve: refactor some code changes
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5344
diff
changeset
|
71 template = shorttemplate |
4155
cc3a0b13ae57
evolve: use stack alias s# in `hg evolve` msgs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4154
diff
changeset
|
72 if stacktmplt: |
5397
03ce095dc10d
evolve: refactor some code changes
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5344
diff
changeset
|
73 template = stacktemplate |
03ce095dc10d
evolve: refactor some code changes
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5344
diff
changeset
|
74 displayer = logcmdutil.changesetdisplayer(ui, repo, |
03ce095dc10d
evolve: refactor some code changes
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5344
diff
changeset
|
75 {b'template': template}) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
76 if b'orphan' == category: |
4610
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
77 result = _solveunstable(ui, repo, ctx, evolvestate, displayer, |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
78 dryrun, confirm, progresscb) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
79 elif b'phasedivergent' == category: |
4610
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
80 result = _solvephasedivergence(ui, repo, ctx, evolvestate, |
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
81 displayer, dryrun, confirm, |
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
82 progresscb) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
83 elif b'contentdivergent' == category: |
4610
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
84 result = _solvedivergent(ui, repo, ctx, evolvestate, displayer, |
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
85 dryrun, confirm, progresscb) |
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
86 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
87 assert False, b"unknown trouble category: %s" % (category) |
4610
c54d4c2c2846
evolve: drop nested locks and transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4608
diff
changeset
|
88 return result |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
89 |
4154
dd81d7f43857
evolve: extract displayer to _solveone()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4153
diff
changeset
|
90 def _solveunstable(ui, repo, orig, evolvestate, displayer, dryrun=False, |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
91 confirm=False, progresscb=None): |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
92 """ Tries to stabilize the changeset orig which is orphan. |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
93 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
94 returns a tuple (bool, newnode) where, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
95 bool: a boolean value indicating whether the instability was solved |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
96 newnode: if bool is True, then the newnode of the resultant commit |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
97 formed. newnode can be node, when resolution led to no new |
4297
699e25687cc5
issue-6028: resolves 6028 - return (False, ".") instead of (False, '')
James Reynolds <james.glenn.reynolds@gmail.com>
parents:
4269
diff
changeset
|
98 commit. If bool is False, this is ".". |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
99 """ |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
100 pctx = orig.p1() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
101 keepbranch = orig.p1().branch() != orig.branch() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
102 if len(orig.parents()) == 2: |
3545
6aff754c2457
evolve: make sure we consider all cases in if-else
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3543
diff
changeset
|
103 p1obs = orig.p1().obsolete() |
6aff754c2457
evolve: make sure we consider all cases in if-else
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3543
diff
changeset
|
104 p2obs = orig.p2().obsolete() |
6aff754c2457
evolve: make sure we consider all cases in if-else
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3543
diff
changeset
|
105 if not p1obs and p2obs: |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
106 pctx = orig.p2() # second parent is obsolete ? |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
107 keepbranch = orig.p2().branch() != orig.branch() |
3545
6aff754c2457
evolve: make sure we consider all cases in if-else
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3543
diff
changeset
|
108 elif not p2obs and p1obs: |
6aff754c2457
evolve: make sure we consider all cases in if-else
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3543
diff
changeset
|
109 pass |
5476
d542e9720b1e
orphan: fix buggy case of try resolving orphan merge two times
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5474
diff
changeset
|
110 elif p1obs and p2obs: |
3573
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
111 # store that we are resolving an orphan merge with both parents |
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
112 # obsolete and proceed with first parent |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
113 evolvestate[b'orphanmerge'] = True |
3573
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
114 # we should process the second parent first, so that in case of |
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
115 # no-conflicts the first parent is processed later and preserved as |
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
116 # first parent |
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
117 pctx = orig.p2() |
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
118 keepbranch = orig.p2().branch() != orig.branch() |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
119 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
120 if not pctx.obsolete(): |
5477
d60490a28318
evolve: improve warning msg when skipping orphan resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5476
diff
changeset
|
121 ui.warn(_(b"skipping %s, consider including orphan ancestors\n") % orig) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
122 return (False, b".") |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
123 obs = pctx |
5050
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
124 try: |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
125 newer = utility._singlesuccessor(repo, obs) |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
126 # search of a parent which isn't the orig |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
127 while repo[newer].node() == orig.node(): |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
128 obs = obs.parents()[0] |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
129 newer = utility._singlesuccessor(repo, obs) |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
130 except utility.MultipleSuccessorsError as exc: |
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
131 if exc.divergenceflag: |
5049
1b393870c6b9
evolve: preliminary indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5033
diff
changeset
|
132 msg = _(b"skipping %s: divergent rewriting. can't choose " |
1b393870c6b9
evolve: preliminary indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5033
diff
changeset
|
133 b"destination\n") % obs |
1b393870c6b9
evolve: preliminary indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5033
diff
changeset
|
134 ui.write_err(msg) |
1b393870c6b9
evolve: preliminary indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5033
diff
changeset
|
135 return (False, b".") |
5050
f29bd1c7e457
evolve: use utility._singlesuccessor() in _solveunstable()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5049
diff
changeset
|
136 if exc.splitflag: |
5075
fbe614cae40c
evolve: add a new method picksplitsuccessor() in utility.py
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5064
diff
changeset
|
137 splitsucc = utility.picksplitsuccessor(ui, repo, obs, orig) |
fbe614cae40c
evolve: add a new method picksplitsuccessor() in utility.py
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5064
diff
changeset
|
138 if not splitsucc[0]: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
139 msg = _(b"could not solve instability, " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
140 b"ambiguous destination: " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
141 b"parent split across two branches\n") |
3541
bc47c09c9782
evolve: prompt user to select destination for stabilization in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3529
diff
changeset
|
142 ui.write_err(msg) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
143 return (False, b".") |
5075
fbe614cae40c
evolve: add a new method picksplitsuccessor() in utility.py
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5064
diff
changeset
|
144 newer = splitsucc[1] |
fbe614cae40c
evolve: add a new method picksplitsuccessor() in utility.py
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5064
diff
changeset
|
145 target = repo[newer] |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
146 if not ui.quiet or confirm: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
147 repo.ui.write(_(b'move:'), label=b'evolve.operation') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
148 displayer.show(orig) |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
149 # lastsolved: keep track of successor of last troubled cset we evolved |
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
150 # to confirm that if atop msg should be suppressed to remove redundancy |
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
151 lastsolved = evolvestate.get(b'lastsolved') |
4122
4eb3877540f1
evovle: remove redundancy in evolve output
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4090
diff
changeset
|
152 if lastsolved is None or target != repo[lastsolved]: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
153 repo.ui.write(_(b'atop:')) |
4122
4eb3877540f1
evovle: remove redundancy in evolve output
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4090
diff
changeset
|
154 displayer.show(target) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
155 if confirm and ui.prompt(b'perform evolve? [Ny]', b'n') != b'y': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
156 raise error.Abort(_(b'evolve aborted by user')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
157 todo = b'hg rebase -r %s -d %s\n' % (orig, target) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
158 if dryrun: |
4599
93ffedae6ec6
evolve: _solveunstable() update progress only once
Martin von Zweigbergk <martinvonz@google.com>
parents:
4598
diff
changeset
|
159 if progresscb: |
93ffedae6ec6
evolve: _solveunstable() update progress only once
Martin von Zweigbergk <martinvonz@google.com>
parents:
4598
diff
changeset
|
160 progresscb() |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
161 repo.ui.write(todo) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
162 return (False, b".") |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
163 else: |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
164 repo.ui.note(todo) |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
165 if progresscb: |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
166 progresscb() |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
167 with state.saver(evolvestate, {b'current': orig.node()}): |
5020
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
168 newid = _relocate(repo, orig, target, evolvestate, pctx, |
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
169 keepbranch, b'orphan') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
170 return (True, newid) |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
171 |
4154
dd81d7f43857
evolve: extract displayer to _solveone()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4153
diff
changeset
|
172 def _solvephasedivergence(ui, repo, bumped, evolvestate, displayer, |
dd81d7f43857
evolve: extract displayer to _solveone()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4153
diff
changeset
|
173 dryrun=False, confirm=False, progresscb=None): |
3609
1c8dec54450a
evolve: replace bumped in function name to phasedivergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3608
diff
changeset
|
174 """Stabilize a phase divergent changeset |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
175 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
176 returns a tuple (bool, newnode) where, |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
177 bool: a boolean value indicating whether the instability was solved |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
178 newnode: if bool is True, then the newnode of the resultant commit |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
179 formed. newnode can be node, when resolution led to no new |
4297
699e25687cc5
issue-6028: resolves 6028 - return (False, ".") instead of (False, '')
James Reynolds <james.glenn.reynolds@gmail.com>
parents:
4269
diff
changeset
|
180 commit. If bool is False, this is ".". |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
181 """ |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
182 repo = repo.unfiltered() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
183 bumped = repo[bumped.rev()] |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
184 # For now we deny bumped merge |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
185 if len(bumped.parents()) > 1: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
186 msg = _(b'skipping %s : we do not handle merge yet\n') % bumped |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
187 ui.write_err(msg) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
188 return (False, b".") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
189 prec = next(repo.set(b'last(allpredecessors(%d) and public())', bumped.rev())) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
190 # For now we deny target merge |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
191 if len(prec.parents()) > 1: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
192 msg = _(b'skipping: %s: public version is a merge, ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
193 b'this is not handled yet\n') % prec |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
194 ui.write_err(msg) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
195 return (False, b".") |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
196 |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
197 if not ui.quiet or confirm: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
198 repo.ui.write(_(b'recreate:'), label=b'evolve.operation') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
199 displayer.show(bumped) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
200 repo.ui.write(_(b'atop:')) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
201 displayer.show(prec) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
202 if confirm and ui.prompt(_(b'perform evolve? [Ny]'), b'n') != b'y': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
203 raise error.Abort(_(b'evolve aborted by user')) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
204 if dryrun: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
205 todo = b'hg rebase --rev %s --dest %s;\n' % (bumped, prec.p1()) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
206 repo.ui.write(todo) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
207 repo.ui.write((b'hg update %s;\n' % prec)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
208 repo.ui.write((b'hg revert --all --rev %s;\n' % bumped)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
209 repo.ui.write((b'hg commit --msg "%s update to %s"\n' % |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
210 (TROUBLES['PHASEDIVERGENT'], bumped))) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
211 return (False, b".") |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
212 if progresscb: |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
213 progresscb() |
3622
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
214 |
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
215 # Checking for whether the phase-divergent changeset has common parents as |
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
216 # it's precursors. Phase-divergent changeset and precursor having different |
4054
46cd437fd3d2
pick: fix last references of grab in code
Boris Feld <boris.feld@octobus.net>
parents:
3981
diff
changeset
|
217 # parents is a result of when the changeset is rebased, picked, histedit or |
3622
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
218 # evolved or any other operation which can change parent. In such cases, |
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
219 # when parents are not same, we first rebase the divergent changeset onto |
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
220 # parent or precursor and then perform later steps |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
221 if not list(repo.set(b'parents(%d) and parents(%d)', bumped.rev(), prec.rev())): |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
222 # Need to rebase the changeset at the right place |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
223 repo.ui.status( |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
224 _(b'rebasing to destination parent: %s\n') % prec.p1()) |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
225 with state.saver(evolvestate, {b'current': bumped.hex(), |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
226 b'precursor': prec.hex()}): |
5020
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
227 newnode = _relocate(repo, bumped, prec.p1(), evolvestate, |
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
228 category=b'phasedivergent') |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
229 if newnode is not None: |
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
230 new = repo[newnode] |
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
231 obsolete.createmarkers(repo, [(bumped, (new,))], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
232 operation=b'evolve') |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
233 bumped = new |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
234 evolvestate[b'temprevs'].append(newnode) |
3622
534af64b0107
evolvecmd: add a detailed comment and some newlines
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3616
diff
changeset
|
235 |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
236 return _resolvephasedivergent(ui, repo, prec, bumped) |
3632
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
237 |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
238 def _resolvephasedivergent(ui, repo, prec, bumped): |
4465
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
239 """final step of a phase divergence resolution |
3632
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
240 |
4465
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
241 This will create a new changesets (or nothing when applicable), the two |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
242 changesets needs to be on the same parents. |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
243 """ |
3632
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
244 tr = repo.currenttransaction() |
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
245 assert tr is not None |
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
246 |
4465
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
247 cl = repo.changelog |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
248 prec_parent = cl.parentrevs(prec.rev()) |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
249 bump_parent = cl.parentrevs(bumped.rev()) |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
250 assert prec_parent == bump_parent, (prec_parent, bump_parent) |
6feeaf00db44
doc: clarify _resolvephasedivergent role and constraint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4464
diff
changeset
|
251 |
3632
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
252 bmupdate = _bookmarksupdater(repo, bumped.node(), tr) |
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
253 newid = None |
3754
73ee40cbfb53
evolve: return the new replacement node to be stored in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3753
diff
changeset
|
254 replacementnode = None |
3632
8d38b88233cb
evolve: move logic to resolve phase-divergence in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3631
diff
changeset
|
255 |
4558
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
256 # Create the new commit context. This is done by applying the changes from |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
257 # the precursor to the bumped node onto the precursor. This is effectively |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
258 # like reverting to the bumped node. |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
259 wctx = context.overlayworkingctx(repo) |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
260 wctx.setbase(prec) |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
261 merge.update(repo, bumped.node(), ancestor=prec, mergeancestor=True, |
5539
452651e69848
evolvecmd: don't set `branchmerge=True` while resolving phase divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5512
diff
changeset
|
262 branchmerge=False, force=False, wc=wctx) |
4558
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
263 if not wctx.isempty(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
264 text = b'%s update to %s:\n\n' % (TROUBLES['PHASEDIVERGENT'], prec) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
265 text += bumped.description() |
4558
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
266 memctx = wctx.tomemctx(text, |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
267 parents=(prec.node(), nodemod.nullid), |
5095
2fcaee044a8c
evolve: provide branch argument to overlayworkingctx.tomemctx()
Anton Shestakov <av6@dwimlabs.net>
parents:
5094
diff
changeset
|
268 branch=bumped.branch(), |
4558
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
269 date=bumped.date(), |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
270 extra=bumped.extra(), |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
271 user=bumped.user()) |
63148e999562
evolve: use merge.update() for resolving phase divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
4554
diff
changeset
|
272 newid = repo.commitctx(memctx) |
3754
73ee40cbfb53
evolve: return the new replacement node to be stored in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3753
diff
changeset
|
273 replacementnode = newid |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
274 if newid is None: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
275 repo.ui.status(_(b'no changes to commit\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
276 obsolete.createmarkers(repo, [(bumped, ())], operation=b'evolve') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
277 newid = prec.node() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
278 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
279 repo.ui.status(_(b'committed as %s\n') % nodemod.short(newid)) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
280 phases.retractboundary(repo, tr, bumped.phase(), [newid]) |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
281 obsolete.createmarkers(repo, [(bumped, (repo[newid],))], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
282 flag=obsolete.bumpedfix, operation=b'evolve') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
283 bmupdate(newid) |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
284 # reroute the working copy parent to the new changeset |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
285 with repo.dirstate.parentchange(), compat.parentchange(repo): |
3977
a0a4f4de9ea3
evolvecmd: import mercurial.node module as nodemod
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3927
diff
changeset
|
286 repo.dirstate.setparents(newid, nodemod.nullid) |
3754
73ee40cbfb53
evolve: return the new replacement node to be stored in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3753
diff
changeset
|
287 return (True, replacementnode) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
288 |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
289 def _prepcontentdivresolution(ui, repo, divergent, other, evolvestate): |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
290 """ if relocation required, decide which divergent cset will be relocated |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
291 to the other side""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
292 evolvestate[b'divergent'] = divergent.node() |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
293 evolvestate[b'orig-divergent'] = divergent.node() |
3809
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
294 # sometimes we will relocate a node in case of different parents and we can |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
295 # encounter conflicts after relocation is done while solving |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
296 # content-divergence and if the user calls `hg evolve --stop`, we need to |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
297 # strip that relocated commit. However if `--all` is passed, we need to |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
298 # reset this value for each content-divergence resolution which we are doing |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
299 # below. |
5014
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
300 evolvestate[b'relocated-other'] = None |
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
301 evolvestate[b'relocating-other'] = False |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
302 evolvestate[b'relocated-div'] = None |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
303 evolvestate[b'relocating-div'] = False |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
304 evolvestate[b'relocation-req'] = False |
3825
b5dfa78073b9
evolve: store the old other divergent node after relocation in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3824
diff
changeset
|
305 # in case or relocation we get a new other node, we need to store the old |
b5dfa78073b9
evolve: store the old other divergent node after relocation in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3824
diff
changeset
|
306 # other for purposes like `--abort` or `--stop` |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
307 evolvestate[b'old-other'] = None |
5029
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
308 evolvestate[b'old-divergent'] = None |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
309 |
5554
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
310 # we don't handle merge content-divergent changesets yet |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
311 if len(other.parents()) > 1: |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
312 msg = _(b"skipping %s: %s changeset can't be " |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
313 b"a merge (yet)\n") % (divergent, TROUBLES['CONTENTDIVERGENT']) |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
314 ui.write_err(msg) |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
315 hint = _(b"You have to fallback to solving this by hand...\n" |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
316 b"| This probably means redoing the merge and using \n" |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
317 b"| `hg prune` to kill older version.\n") |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
318 ui.write_err(hint) |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
319 return (False, b".") |
c61a31489da0
evolve: move a block of code up for early return
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5553
diff
changeset
|
320 |
4467
6fc5e162ea84
evolve: refactor the code which swap two nodes (in divergence resolution)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4466
diff
changeset
|
321 def swapnodes(div, other): |
6fc5e162ea84
evolve: refactor the code which swap two nodes (in divergence resolution)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4466
diff
changeset
|
322 div, other = other, div |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
323 evolvestate[b'divergent'] = div.node() |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
324 evolvestate[b'other-divergent'] = other.node() |
4467
6fc5e162ea84
evolve: refactor the code which swap two nodes (in divergence resolution)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4466
diff
changeset
|
325 return div, other |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
326 |
5555
742c8202d556
evolve: update some comments acc. to upcoming behavior
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5554
diff
changeset
|
327 # keep track if we are solving public content-divergence |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
328 haspublicdiv = False |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
329 if not (divergent.mutable() and other.mutable()): |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
330 haspublicdiv = True |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
331 # for simplicity, we keep public one to local side while merging |
5556
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
332 # When public branch is behind to the mutable branch, for now we |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
333 # relocate mutable cset to public one's side in every case. |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
334 # |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
335 # This behaviour might be sub optimal when ancestors of mutable |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
336 # cset has changes its relocated descendant rely on. |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
337 # |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
338 # Otherwise, we are going to rebase the "behind" branch up to the new |
1bb1d36e1bc2
evolve: move a comment where it's going to belong
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5555
diff
changeset
|
339 # brancmap level. |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
340 if divergent.mutable(): |
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
341 publicdiv = other |
4467
6fc5e162ea84
evolve: refactor the code which swap two nodes (in divergence resolution)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4466
diff
changeset
|
342 divergent, other = swapnodes(divergent, other) |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
343 else: |
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
344 publicdiv = divergent |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
345 evolvestate[b'public-divergent'] = publicdiv.node() |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
346 |
5031
ef1978a0fcc0
evolve: simplify some conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5030
diff
changeset
|
347 otherp1 = succsotherp1 = other.p1().rev() |
ef1978a0fcc0
evolve: simplify some conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5030
diff
changeset
|
348 divp1 = succsdivp1 = divergent.p1().rev() |
3848
90f1a64875ad
evolve: introduce a resolutionparent variable and store it in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3847
diff
changeset
|
349 |
3850
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
350 # finding single successors of otherp1 and divp1 |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
351 try: |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
352 succsotherp1 = utility._singlesuccessor(repo, other.p1()) |
3850
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
353 except utility.MultipleSuccessorsError: |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
354 pass |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
355 |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
356 try: |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
357 succsdivp1 = utility._singlesuccessor(repo, divergent.p1()) |
3850
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
358 except utility.MultipleSuccessorsError: |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
359 pass |
340cf6fbe9e9
evolve: create resolved cset on successors of current parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3848
diff
changeset
|
360 |
3848
90f1a64875ad
evolve: introduce a resolutionparent variable and store it in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3847
diff
changeset
|
361 # the changeset on which resolution changeset will be based on |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
362 resolutionparent = repo[succsdivp1].node() |
3848
90f1a64875ad
evolve: introduce a resolutionparent variable and store it in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3847
diff
changeset
|
363 |
4984
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
364 # the nullrev has to be handled specially because -1 is overloaded to both |
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
365 # mean nullrev (this meaning is used for the result of changectx.rev(), as |
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
366 # called above) and the tipmost revision (this meaning is used for the %d |
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
367 # format specifier, as used below) |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
368 if nodemod.nullrev in (succsotherp1, succsdivp1): |
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
369 # nullrev is the only possible ancestor if succsotherp1 or succsdivp1 is nullrev |
4984
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
370 gca = [nodemod.nullrev] |
b779b40f996e
evolve: fix content-divergence resolution when p1 is null (issue6201)
Manuel Jacob <me@manueljacob.de>
parents:
4857
diff
changeset
|
371 else: |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
372 gca = repo.revs(b"ancestor(%d, %d)" % (succsotherp1, succsdivp1)) |
4442
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
373 # divonly: non-obsolete csets which are topological ancestor of "divergent" |
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
374 # but not "other" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
375 divonly = repo.revs(b"only(%d, %d) - obsolete()" % (divergent.rev(), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
376 other.rev())) |
4442
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
377 # otheronly: non-obsolete csets which are topological ancestor of "other" |
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
378 # but not "div" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
379 otheronly = repo.revs(b"only(%d, %d) - obsolete()" % (other.rev(), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
380 divergent.rev())) |
4442
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
381 # make it exclusive set |
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
382 divonly = set(divonly) - {divergent.rev()} |
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
383 otheronly = set(otheronly) - {other.rev()} |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
384 # is relocation of one of the changeset required |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
385 relocatereq = False |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
386 |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
387 # testing how both the divergent changesets are arranged, there can be 4 |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
388 # possible cases here: |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
389 # |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
390 # 1) both have the same parents |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
391 # 2) both have different parents but greatest common anscestor of them is |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
392 # parent of one of them |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
393 # 3) both have different parents and gca is not parent of any of them |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
394 # 4) one of them is parent of other |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
395 # |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
396 # we are handling 1) very good now. |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
397 # for 2) we will relocate one which is behind to the parent of ahead one and |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
398 # then solve the content-divergence the way we solve 1) |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
399 # for 3) and 4), we still have to decide |
5032
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
400 if otherp1 == divp1: |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
401 # both are on the same parents |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
402 pass |
5474
86c6c7951f74
evolve: fix content-div resolution when in parent-child form
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5442
diff
changeset
|
403 elif divergent == other.p1(): |
86c6c7951f74
evolve: fix content-div resolution when in parent-child form
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5442
diff
changeset
|
404 # both are in parent-child relation |
86c6c7951f74
evolve: fix content-div resolution when in parent-child form
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5442
diff
changeset
|
405 pass |
5032
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
406 elif succsotherp1 in gca and succsdivp1 in gca: |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
407 # both are not on the same parent but have same parents's succs. |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
408 if otheronly and divonly: |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
409 # case: we have visible csets on both side diverging from |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
410 # tca of "divergent" and "other". We still need to decide what |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
411 # to do in this case |
4442
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
412 pass |
5032
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
413 if otheronly: |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
414 relocatereq = True |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
415 if not haspublicdiv: |
5032
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
416 # can't swap when public divergence, as public can't move |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
417 divergent, other = swapnodes(divergent, other) |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
418 resolutionparent = repo[succsotherp1].node() |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
419 elif divonly: |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
420 relocatereq = True |
4442
819bad275701
evolve: add logic to handle a particular case in divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4438
diff
changeset
|
421 else: |
5032
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
422 # no extra cset on either side; so not considering relocation |
31b0b29245bb
evolve: further simplify a conditional
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5031
diff
changeset
|
423 pass |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
424 elif succsotherp1 in gca and succsdivp1 not in gca: |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
425 relocatereq = True |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
426 pass |
5030
1403cc7c2cee
evolve: rename some variable ahead of time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5029
diff
changeset
|
427 elif succsdivp1 in gca and succsotherp1 not in gca: |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
428 relocatereq = True |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
429 |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
430 if not haspublicdiv: |
4467
6fc5e162ea84
evolve: refactor the code which swap two nodes (in divergence resolution)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4466
diff
changeset
|
431 divergent, other = swapnodes(divergent, other) |
4444
ea336a6592cc
evolve: test a common case of public divergence
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4443
diff
changeset
|
432 resolutionparent = divergent.p1().node() |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
433 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
434 msg = _(b"skipping %s: have a different parent than %s " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
435 b"(not handled yet)\n") % (divergent, other) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
436 hint = _(b"| %(d)s, %(o)s are not based on the same changeset.\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
437 b"| With the current state of its implementation, \n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
438 b"| evolve does not work in that case.\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
439 b"| rebase one of them next to the other and run \n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
440 b"| this command again.\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
441 b"| - either: hg rebase --dest 'p1(%(d)s)' -r %(o)s\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
442 b"| - or: hg rebase --dest 'p1(%(o)s)' -r %(d)s\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
443 ) % {b'd': divergent, b'o': other} |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
444 ui.write_err(msg) |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
445 ui.write_err(hint) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
446 return (False, b".") |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
447 |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
448 return (True, divergent, other, resolutionparent, relocatereq) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
449 |
5285
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
450 def _relocatedivergent(repo, orig, dest, evolvestate): |
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
451 """relocates a divergent commit and saves the evolve state""" |
5295
ebfd0d875600
evolve: handle relocation during divergence resolution producing no changes
Martin von Zweigbergk <martinvonz@google.com>
parents:
5293
diff
changeset
|
452 configoverride = repo.ui.configoverride( |
ebfd0d875600
evolve: handle relocation during divergence resolution producing no changes
Martin von Zweigbergk <martinvonz@google.com>
parents:
5293
diff
changeset
|
453 {(b'ui', b'allowemptycommit'): b'true'}, b'evolve' |
ebfd0d875600
evolve: handle relocation during divergence resolution producing no changes
Martin von Zweigbergk <martinvonz@google.com>
parents:
5293
diff
changeset
|
454 ) |
ebfd0d875600
evolve: handle relocation during divergence resolution producing no changes
Martin von Zweigbergk <martinvonz@google.com>
parents:
5293
diff
changeset
|
455 with state.saver(evolvestate, {b'current': orig.node()}), configoverride: |
5285
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
456 return _relocate(repo, orig, dest, evolvestate, keepbranch=True) |
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
457 |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
458 def _solvedivergent(ui, repo, divergent, evolvestate, displayer, dryrun=False, |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
459 confirm=False, progresscb=None): |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
460 """tries to solve content-divergence of a changeset |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
461 |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
462 returns a tuple (bool, newnode) where, |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
463 bool: a boolean value indicating whether the instability was solved |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
464 newnode: if bool is True, then the newnode of the resultant commit |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
465 formed. newnode can be node, when resolution led to no new |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
466 commit. If bool is False, this is ".". |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
467 """ |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
468 repo = repo.unfiltered() |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
469 base, others = divergentdata(divergent) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
470 |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
471 # we don't handle split in content-divergence yet |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
472 if len(others) > 1: |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
473 othersstr = b"[%s]" % (b','.join([bytes(i) for i in others])) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
474 msg = _(b"skipping %s: %s with a changeset that got split" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
475 b" into multiple ones:\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
476 b"|[%s]\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
477 b"| This is not handled by automatic evolution yet\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
478 b"| You have to fallback to manual handling with commands " |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
479 b"such as:\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
480 b"| - hg touch -D\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
481 b"| - hg prune\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
482 b"| \n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
483 b"| You should contact your local evolution Guru for help.\n" |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
484 ) % (divergent, TROUBLES['CONTENTDIVERGENT'], othersstr) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
485 ui.write_err(msg) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
486 return (False, b".") |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
487 other = others[0] |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
488 evolvestate[b'other-divergent'] = other.node() |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
489 evolvestate[b'base'] = base.node() |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
490 |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
491 # setup everything before merging two content-divergent csets |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
492 datatoproceed = _prepcontentdivresolution(ui, repo, divergent, other, |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
493 evolvestate) |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
494 if not datatoproceed[0]: |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
495 return (False, b".") |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
496 divergent, other, resolutionparent, relocatereq = datatoproceed[1:] |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
497 |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
498 if relocatereq: |
5322
7295f3fa8e83
evolve: remove duplicated code
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5297
diff
changeset
|
499 evolvestate[b'relocation-req'] = True |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
500 evolvestate[b'resolutionparent'] = resolutionparent |
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
501 |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
502 if not ui.quiet or confirm: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
503 ui.write(_(b'merge:'), label=b'evolve.operation') |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
504 displayer.show(divergent) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
505 ui.write(_(b'with: ')) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
506 displayer.show(other) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
507 ui.write(_(b'base: ')) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
508 displayer.show(base) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
509 if confirm and ui.prompt(_(b'perform evolve? [Ny]'), b'n') != b'y': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
510 raise error.Abort(_(b'evolve aborted by user')) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
511 if dryrun: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
512 ui.write((b'hg update -c %s &&\n' % divergent)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
513 ui.write((b'hg merge %s &&\n' % other)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
514 ui.write((b'hg commit -m "auto merge resolving conflict between ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
515 b'%s and %s"&&\n' % (divergent, other))) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
516 ui.write((b'hg up -C %s &&\n' % base)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
517 ui.write((b'hg revert --all --rev tip &&\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
518 ui.write((b'hg commit -m "`hg log -r %s --template={desc}`";\n' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
519 % divergent)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
520 return (False, b".") |
4991
2928f35023a1
evolve: make sure divergence resolution doesn't undo changes (issue6203)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4984
diff
changeset
|
521 # relocate divergent cset to its obsolete parent's successsor |
5550
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
522 if divergent.p1().node() != resolutionparent: |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
523 evolvestate[b'relocating-div'] = True |
4991
2928f35023a1
evolve: make sure divergence resolution doesn't undo changes (issue6203)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4984
diff
changeset
|
524 ui.status(_(b'rebasing "divergent" content-divergent changeset %s on' |
5550
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
525 b' %s\n' % (divergent, repo[resolutionparent]))) |
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
526 newdivergent = _relocatedivergent(repo, divergent, repo[resolutionparent], |
5285
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
527 evolvestate) |
5029
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
528 evolvestate[b'old-divergent'] = divergent.node() |
5517
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
529 evolvestate[b'relocating-div'] = False |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
530 evolvestate[b'relocated-div'] = newdivergent |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
531 evolvestate[b'temprevs'].append(newdivergent) |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
532 evolvestate[b'divergent'] = newdivergent |
4991
2928f35023a1
evolve: make sure divergence resolution doesn't undo changes (issue6203)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4984
diff
changeset
|
533 divergent = repo[newdivergent] |
4850
6d898fa6e5c3
evolve: check that relocating makes sense in _solvedivergent() (issue5958)
Anton Shestakov <av6@dwimlabs.net>
parents:
4825
diff
changeset
|
534 |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
535 # relocate the other divergent if required |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
536 if relocatereq: |
3809
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
537 # relocating will help us understand during the time of conflicts that |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
538 # whether conflicts occur at reloacting or they occured at merging |
f06ff8fee2f6
evolvestate: store info about relocation while resolving content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3808
diff
changeset
|
539 # content divergent changesets |
5014
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
540 evolvestate[b'relocating-other'] = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
541 ui.status(_(b'rebasing "other" content-divergent changeset %s on' |
5550
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
542 b' %s\n' % (other, repo[resolutionparent]))) |
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
543 newother = _relocatedivergent(repo, other, repo[resolutionparent], evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
544 evolvestate[b'old-other'] = other.node() |
5517
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
545 evolvestate[b'relocating-other'] = False |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
546 evolvestate[b'relocated-other'] = newother |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
547 evolvestate[b'temprevs'].append(newother) |
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
548 evolvestate[b'other-divergent'] = newother |
3805
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
549 other = repo[newother] |
2410e7063692
evolve: implement resolution of content-divergence when on differet parents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3802
diff
changeset
|
550 |
3808
e6c0f45d51ed
evolve: factor out logic to merge content divergent csets in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3807
diff
changeset
|
551 _mergecontentdivergents(repo, progresscb, divergent, other, base, |
e6c0f45d51ed
evolve: factor out logic to merge content divergent csets in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3807
diff
changeset
|
552 evolvestate) |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
553 res, newnode = _completecontentdivergent(ui, repo, progresscb, divergent, |
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
554 other, base, evolvestate) |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
555 haspublicdiv = not (divergent.mutable() and other.mutable()) |
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
556 if not haspublicdiv: |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
557 return (res, newnode) |
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
558 else: |
5033
7cc3d96eb589
evolve: extract pre merging content-div csets logic to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5032
diff
changeset
|
559 publicdiv = repo[evolvestate[b'public-divergent']] |
4529
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
560 # we have content-divergence with a public cset: |
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
561 # after performing content divergence resolution steps, possbile cases: |
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
562 # 1) merging results in a new node: |
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
563 # we need to perform phase divergence resolution |
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
564 # 2) merging leads to same content as public cset: |
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
565 # divergence has been resolved by creating markers |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
566 if not res: |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
567 # resolution was not successful, return |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
568 return (res, newnode) |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
569 if newnode == publicdiv.node(): |
4529
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
570 # case 2) |
4747
fa6aafa2857d
py3: replace str(ctx) by bytes(ctx)
Martin von Zweigbergk <martinvonz@google.com>
parents:
4738
diff
changeset
|
571 pubstr = bytes(publicdiv) |
fa6aafa2857d
py3: replace str(ctx) by bytes(ctx)
Martin von Zweigbergk <martinvonz@google.com>
parents:
4738
diff
changeset
|
572 othstr = bytes(other) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
573 msg = _(b'content divergence resolution between %s ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
574 b'(public) and %s has same content as %s, ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
575 b'discarding %s\n') |
4583
4fcf9a71befc
evolve: show a status message when merging leads to public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4580
diff
changeset
|
576 msg %= (pubstr, othstr, pubstr, othstr) |
4fcf9a71befc
evolve: show a status message when merging leads to public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4580
diff
changeset
|
577 repo.ui.status(msg) |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
578 return (res, newnode) |
4529
e0eaa33a1f8a
evolve: improve inline documentation for the public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4505
diff
changeset
|
579 # case 1) |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
580 prec = publicdiv |
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
581 bumped = repo[newnode] |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
582 return _resolvephasedivergent(ui, repo, prec=prec, bumped=bumped) |
3808
e6c0f45d51ed
evolve: factor out logic to merge content divergent csets in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3807
diff
changeset
|
583 |
5551
22c82f714fe1
evolve: rename param `divergent` to `local` in a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5550
diff
changeset
|
584 def _mergecontentdivergents(repo, progresscb, local, other, base, |
3808
e6c0f45d51ed
evolve: factor out logic to merge content divergent csets in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3807
diff
changeset
|
585 evolvestate): |
5552
4c328eb7196e
evolve: add some assertions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5551
diff
changeset
|
586 assert local != other |
5551
22c82f714fe1
evolve: rename param `divergent` to `local` in a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5550
diff
changeset
|
587 if local not in repo[None].parents(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
588 repo.ui.note(_(b"updating to \"local\" side of the conflict: %s\n") % |
5551
22c82f714fe1
evolve: rename param `divergent` to `local` in a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5550
diff
changeset
|
589 local.hex()[:12]) |
22c82f714fe1
evolve: rename param `divergent` to `local` in a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5550
diff
changeset
|
590 hg.updaterepo(repo, local.node(), False) |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
591 # merging the two content-divergent changesets |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
592 repo.ui.note(_(b"merging \"other\" %s changeset '%s'\n") % |
4633
61c2518cd6d2
evolve: move status msg to verbose mode in content-divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4624
diff
changeset
|
593 (TROUBLES['CONTENTDIVERGENT'], other.hex()[:12])) |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
594 if progresscb: |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
595 progresscb() |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
596 with state.saver(evolvestate): |
5551
22c82f714fe1
evolve: rename param `divergent` to `local` in a function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5550
diff
changeset
|
597 mergeancestor = repo.changelog.isancestor(local.node(), other.node()) |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
598 stats = merge.update(repo, |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
599 other.node(), |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
600 branchmerge=True, |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
601 force=False, |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
602 ancestor=base.node(), |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
603 mergeancestor=mergeancestor) |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
604 hg._showstats(repo, stats) |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
605 |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
606 # conflicts while merging content-divergent changesets |
5179
7c41a1ebcf7f
compat: directly use status attribute instead of the compat layer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5111
diff
changeset
|
607 if stats.unresolvedcount: |
4848
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
608 hint = _(b"see 'hg help evolve.interrupted'") |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
609 raise error.InterventionRequired(_(b"unresolved merge conflicts"), |
535ab2609e45
cmdstate: introduce a "saver" contextmanager and use it in place of save()
Kyle Lippincott <spectral@google.com>
parents:
4827
diff
changeset
|
610 hint=hint) |
3735
bdf7fb6af7b8
evolve: take out logic to complete phase-divergence in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3734
diff
changeset
|
611 |
3737
5b0bd82ea914
evolve: add logic to continue interrupted content-divergence resolution
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3736
diff
changeset
|
612 def _completecontentdivergent(ui, repo, progresscb, divergent, other, |
3789
13eef43a961f
evolve: pass the base revision in _completecontentdivergent()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3788
diff
changeset
|
613 base, evolvestate): |
3735
bdf7fb6af7b8
evolve: take out logic to complete phase-divergence in separate fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3734
diff
changeset
|
614 """completes the content-divergence resolution""" |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
615 # no conflicts were there in merging content divergent changesets, let's |
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
616 # resume resolution |
3462
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
617 if progresscb: |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
618 progresscb() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
619 tr = repo.currenttransaction() |
e147c18ed064
evolvecmd: move more functions from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3461
diff
changeset
|
620 assert tr is not None |
3831
987e335dbe11
evolve: store the obsmarkers to be deleted in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3830
diff
changeset
|
621 # whether to store the obsmarker in the evolvestate |
987e335dbe11
evolve: store the obsmarkers to be deleted in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3830
diff
changeset
|
622 storemarker = False |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
623 resparent = evolvestate[b'resolutionparent'] |
4383
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
624 |
3343eac099ec
evolve: add logic to resolve content-divergence with a public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4382
diff
changeset
|
625 # whether we are solving public divergence |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
626 haspublicdiv = False |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
627 if evolvestate.get(b'public-divergent'): |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
628 haspublicdiv = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
629 publicnode = evolvestate[b'public-divergent'] |
4415
29733c2b0fd3
evolve: rename npublicdiv to publicnode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4414
diff
changeset
|
630 publicdiv = repo[publicnode] |
5558
5f2c85ea8b33
evolve: set other side of public content div using mutability
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5557
diff
changeset
|
631 otherdiv = other if other.mutable() else divergent |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
632 |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
633 with repo.dirstate.parentchange(), compat.parentchange(repo): |
5512
2df762b9c0c5
dirstate: replace _uncommitdirstate() by core's movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5431
diff
changeset
|
634 cmdrewrite.movedirstate(repo, repo[publicnode]) |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
635 # check if node to be committed has changes same as public one |
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
636 s = publicdiv.status() |
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
637 if not (s.added or s.removed or s.deleted or s.modified): |
4438
a6bdb02a1902
evolve: warn user if cset desc is being lost
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4431
diff
changeset
|
638 # warn user if metadata is being lost |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
639 warnmetadataloss(repo, publicdiv, otherdiv) |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
640 # no changes, create markers to resolve divergence |
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
641 obsolete.createmarkers(repo, [(otherdiv, (publicdiv,))], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
642 operation=b'evolve') |
4416
b2a8e67b0933
evolve: handle a case in pubic-div when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4415
diff
changeset
|
643 return (True, publicnode) |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
644 |
5111 | 645 with repo.dirstate.parentchange(), compat.parentchange(repo): |
5512
2df762b9c0c5
dirstate: replace _uncommitdirstate() by core's movedirstate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5431
diff
changeset
|
646 cmdrewrite.movedirstate(repo, repo[resparent]) |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
647 |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
648 # merge the branches |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
649 mergebranches(repo, divergent, other, base) |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
650 # merge the commit messages |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
651 desc = mergecommitmessages(ui, base.description(), |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
652 divergent.description(), |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
653 other.description()) |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
654 user = utility.mergeusers(ui, base, divergent, other) |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
655 |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
656 mergehook(repo, base, divergent, other) |
3879
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
657 |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
658 date = divergent.date() |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
659 if other.date() != divergent.date(): |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
660 basedate = base.date() |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
661 if other.date() == basedate: |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
662 date = divergent.date() |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
663 elif divergent.date() == basedate: |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
664 date = other.date() |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
665 else: |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
666 date = max(divergent.date(), other.date()) |
4998
88b816a9d990
evolve: preserve date when resolving content-divergence (issue6202)
Manuel Jacob <me@manueljacob.de>
parents:
4992
diff
changeset
|
667 |
5293
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
668 # We really want a new commit in order to avoid obsmarker cycles (otherwise |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
669 # divergence resolutions done in separate repos may create markers in the |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
670 # opposite directions). For that reason, we set ui.allowemptycommit and |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
671 # also add also add some salt to the commit extras to make sure we don't |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
672 # reuse an existing nodeid. |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
673 with repo.ui.configoverride( |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
674 {(b'ui', b'allowemptycommit'): b'true'}, b'evolve' |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
675 ): |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
676 extra = { |
5297
a73cdef2e33f
evolve: rename `evolve_source_*` to `divergence_source_*`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5295
diff
changeset
|
677 b'divergence_source_local': divergent.hex(), |
a73cdef2e33f
evolve: rename `evolve_source_*` to `divergence_source_*`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5295
diff
changeset
|
678 b'divergence_source_other': other.hex() |
5293
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
679 } |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
680 newnode = repo.commit(text=desc, user=user, date=date, extra=extra) |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
681 new = repo[newnode] |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
682 hg.updaterepo(repo, new.rev(), False) |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
683 if haspublicdiv and publicdiv == divergent: |
5293
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
684 bypassphase(repo, (divergent, new), operation=b'evolve') |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
685 else: |
5293
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
686 obsolete.createmarkers(repo, [(divergent, (new,))], |
13376ca93fa3
evolve: always create commit when resolving divergence
Martin von Zweigbergk <martinvonz@google.com>
parents:
5285
diff
changeset
|
687 operation=b'evolve') |
3742
d577cef1f044
evolvecmd: add comments and new lines in content-divergence handling logic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3741
diff
changeset
|
688 |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
689 # creating markers and moving phases post-resolution |
5553
355a7c91ce9a
evolve: rename haspubdiv to haspublicdiv for more clarity
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5552
diff
changeset
|
690 if haspublicdiv and publicdiv == other: |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
691 bypassphase(repo, (other, new), operation=b'evolve') |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
692 else: |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
693 obsolete.createmarkers(repo, [(other, (new,))], operation=b'evolve') |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
694 if storemarker: |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
695 # storing the marker in the evolvestate |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
696 # we just store the precursors and successor pair for now, we might |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
697 # want to store more data and serialize obsmarker in a better way in |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
698 # future |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
699 evolvestate[b'obsmarkers'].append((other.node(), new.node())) |
3846
f9dad99a90d5
evolve: create a new commit instead of amending one of the divergents
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3845
diff
changeset
|
700 |
5005
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
701 phases.retractboundary(repo, tr, other.phase(), [new.node()]) |
e66ba12e5db3
evolve: remove obsolete backup of allowemptycommit config
Martin von Zweigbergk <martinvonz@google.com>
parents:
5004
diff
changeset
|
702 return (True, newnode) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
703 |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
704 def warnmetadataloss(repo, local, other): |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
705 """warn the user for the metadata being lost while resolving |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
706 public content-divergence""" |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
707 |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
708 # needtowarn: aspects where we need to warn user |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
709 needtowarn = [b'branch', b'topic', b'close'] |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
710 aspects = set() |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
711 localextra = local.extra() |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
712 otherextra = other.extra() |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
713 |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
714 for asp in needtowarn: |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
715 otherasp = otherextra.get(asp) |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
716 localasp = localextra.get(asp) |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
717 if otherasp and otherasp != localasp: |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
718 aspects.add(asp) |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
719 |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
720 if other.description() != local.description(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
721 aspects.add(b'description') |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
722 |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
723 if aspects: |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
724 # warn user |
4747
fa6aafa2857d
py3: replace str(ctx) by bytes(ctx)
Martin von Zweigbergk <martinvonz@google.com>
parents:
4738
diff
changeset
|
725 locstr = bytes(local) |
fa6aafa2857d
py3: replace str(ctx) by bytes(ctx)
Martin von Zweigbergk <martinvonz@google.com>
parents:
4738
diff
changeset
|
726 othstr = bytes(other) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
727 if b'close' in aspects: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
728 filteredasp = aspects - {b'close'} |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
729 if filteredasp: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
730 msg = _(b'other divergent changeset %s is a closed branch head ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
731 b'and differs from local %s by "%s" only,' % |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
732 (othstr, locstr, b', '.join(sorted(filteredasp)))) |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
733 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
734 msg = _(b'other divergent changeset %s is a closed branch head ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
735 b'and has same content as local %s,' % (othstr, locstr)) |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
736 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
737 msg = _(b'other divergent changeset %s has same content as local %s' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
738 b' and differs by "%s" only,' % |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
739 (othstr, locstr, b', '.join(sorted(aspects)))) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
740 msg += _(b' discarding %s\n' % othstr) |
4584
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
741 repo.ui.warn(msg) |
fd8dada76730
evolve: warn user for the metadata being lost in public divergence resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4583
diff
changeset
|
742 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
743 def bypassphase(repo, relation, flag=0, metadata=None, operation=b'evolve'): |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
744 """function to create a single obsmarker relation even for public csets |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
745 where relation should be a single pair (prec, succ)""" |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
746 |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
747 # prepare metadata |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
748 if metadata is None: |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
749 metadata = {} |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
750 if b'user' not in metadata: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
751 luser = repo.ui.config(b'devel', b'user.obsmarker') or repo.ui.username() |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
752 metadata[b'user'] = encoding.fromlocal(luser) |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
753 # Operation metadata handling |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
754 useoperation = repo.ui.configbool(b'experimental', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
755 b'evolution.track-operation') |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
756 if useoperation and operation: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
757 metadata[b'operation'] = operation |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
758 |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
759 # Effect flag metadata handling |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
760 saveeffectflag = repo.ui.configbool(b'experimental', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
761 b'evolution.effect-flags') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
762 with repo.transaction(b'add-obsolescence-marker') as tr: |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
763 prec, succ = relation |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
764 nprec = prec.node() |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
765 npare = None |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
766 nsucs = [succ.node()] |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
767 if not nsucs: |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
768 npare = tuple(p.node() for p in prec.parents()) |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
769 if nprec in nsucs: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
770 raise error.Abort(_(b"changeset %s cannot obsolete itself") % prec) |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
771 |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
772 if saveeffectflag: |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
773 # The effect flag is saved in a versioned field name for |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
774 # future evolution |
4431
f109917f5c28
evolvecmd: compatibility with older geteffectflag() that took a tuple
Anton Shestakov <av6@dwimlabs.net>
parents:
4428
diff
changeset
|
775 try: |
f109917f5c28
evolvecmd: compatibility with older geteffectflag() that took a tuple
Anton Shestakov <av6@dwimlabs.net>
parents:
4428
diff
changeset
|
776 effectflag = obsutil.geteffectflag(prec, (succ,)) |
f109917f5c28
evolvecmd: compatibility with older geteffectflag() that took a tuple
Anton Shestakov <av6@dwimlabs.net>
parents:
4428
diff
changeset
|
777 except TypeError: |
5193
a4d081923c81
compat: update hg-X.Y compat comments and test them
Anton Shestakov <av6@dwimlabs.net>
parents:
5187
diff
changeset
|
778 # hg <= 4.7 (bae6f1418a95) |
4431
f109917f5c28
evolvecmd: compatibility with older geteffectflag() that took a tuple
Anton Shestakov <av6@dwimlabs.net>
parents:
4428
diff
changeset
|
779 effectflag = obsutil.geteffectflag((prec, (succ,))) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
780 metadata[obsutil.EFFECTFLAGFIELD] = b"%d" % effectflag |
4382
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
781 |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
782 # create markers |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
783 repo.obsstore.create(tr, nprec, nsucs, flag, parents=npare, |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
784 metadata=metadata, ui=repo.ui) |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
785 repo.filteredrevcache.clear() |
e6ba7e324015
evolve: introduce function to create a obsmarker relation even for public cset
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4378
diff
changeset
|
786 |
3879
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
787 def mergehook(repo, base, divergent, other): |
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
788 """function which extensions can wrap and merge data introduced by them |
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
789 while resolving content-divergence""" |
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
790 pass |
1fa3bf6e9e93
evolvecmd: introduce fn to be wrapped by extensions resolving content-div
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3878
diff
changeset
|
791 |
3829
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
792 def mergebranches(repo, divergent, other, base): |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
793 """merges the branch information for content-divergent changesets and sets |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
794 the dirstate branch accordingly |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
795 If unable to merge, prompts user to select a branch |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
796 |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
797 If the branch name is different from the branch of divergent changeset, it |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
798 sets the current branch using repo.dirstate.setbranch() |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
799 """ |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
800 divbranch = divergent.branch() |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
801 basebranch = base.branch() |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
802 othbranch = other.branch() |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
803 # content divergent changes were on different branches, ask user to |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
804 # select one |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
805 if divbranch != othbranch: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
806 |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
807 if basebranch == othbranch and basebranch != divbranch: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
808 # we will be amending the divergent changeset so branch will be |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
809 # preserved |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
810 pass |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
811 elif basebranch == divbranch and basebranch != othbranch: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
812 repo.dirstate.setbranch(othbranch) |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
813 else: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
814 # all the three branches are different |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
815 index = repo.ui.promptchoice(_(b"content divergent changesets on " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
816 b"different branches.\nchoose branch" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
817 b" for the resolution changeset. (a) " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
818 b"%s or (b) %s or (c) %s? $$ &a $$ &b" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
819 b" $$ &c") % |
3829
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
820 (basebranch, divbranch, othbranch), 0) |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
821 |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
822 if index == 0: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
823 repo.dirstate.setbranch(basebranch) |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
824 elif index == 1: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
825 pass |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
826 elif index == 2: |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
827 repo.dirstate.setbranch(othbranch) |
cb45a7173e5b
evolve: factor out logic to merge branches in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3827
diff
changeset
|
828 |
3878
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
829 def mergecommitmessages(ui, basedesc, divdesc, othdesc): |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
830 """merges the commit messages and return the new merged message and whether |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
831 there were conflicts or not while merging the messages""" |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
832 |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
833 merger = simplemerge.Merge3Text(basedesc, divdesc, othdesc) |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
834 mdesc = [] |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
835 kwargs = {} |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
836 kwargs['name_base'] = b'base' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
837 kwargs['base_marker'] = b'|||||||' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
838 for line in merger.merge_lines(name_a=b'divergent', name_b=b'other', |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
839 **kwargs): |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
840 mdesc.append(line) |
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
841 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
842 desc = b''.join(mdesc) |
3878
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
843 if merger.conflicts: |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
844 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
845 prefixes = (b"HG: Conflicts while merging changeset description of" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
846 b" content-divergent changesets.\nHG: Resolve conflicts" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
847 b" in commit messages to continue.\n\n") |
3878
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
848 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
849 resolveddesc = ui.edit(prefixes + desc, ui.username(), action=b'desc') |
3878
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
850 # make sure we remove the prefixes part from final commit message |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
851 if prefixes in resolveddesc: |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
852 # hack, we should find something better |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
853 resolveddesc = resolveddesc[len(prefixes):] |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
854 desc = resolveddesc |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
855 |
dc2b53b3573f
evolvecmd: move remaining logic to merge commit desc to existing utility fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3856
diff
changeset
|
856 return desc |
3801
ee78135b2f45
evolve: merge commit messages while resolving content-divergence (issue5877)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3800
diff
changeset
|
857 |
3469
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
858 def _orderrevs(repo, revs): |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
859 """Compute an ordering to solve instability for the given revs |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
860 |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
861 revs is a list of unstable revisions. |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
862 |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
863 Returns the same revisions ordered to solve their instability from the |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
864 bottom to the top of the stack that the stabilization process will produce |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
865 eventually. |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
866 |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
867 This ensures the minimal number of stabilizations, as we can stabilize each |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
868 revision on its final stabilized destination. |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
869 """ |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
870 # Step 1: Build the dependency graph |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
871 dependencies, rdependencies = utility.builddependencies(repo, revs) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
872 # Step 2: Build the ordering |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
873 # Remove the revisions with no dependency(A) and add them to the ordering. |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
874 # Removing these revisions leads to new revisions with no dependency (the |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
875 # one depending on A) that we can remove from the dependency graph and add |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
876 # to the ordering. We progress in a similar fashion until the ordering is |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
877 # built |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
878 solvablerevs = collections.deque([r for r in sorted(dependencies.keys()) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
879 if not dependencies[r]]) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
880 ordering = [] |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
881 while solvablerevs: |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
882 rev = solvablerevs.popleft() |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
883 for dependent in rdependencies[rev]: |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
884 dependencies[dependent].remove(rev) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
885 if not dependencies[dependent]: |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
886 solvablerevs.append(dependent) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
887 del dependencies[rev] |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
888 ordering.append(rev) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
889 |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
890 ordering.extend(sorted(dependencies)) |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
891 return ordering |
e97bfd529e72
evolve: move _orderrevs() function evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
892 |
5020
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
893 def _relocate(repo, orig, dest, evolvestate, pctx=None, keepbranch=False, |
8f6095e88d1c
evolvecmd: mark relocate() private
Martin von Zweigbergk <martinvonz@google.com>
parents:
5019
diff
changeset
|
894 category=None): |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
895 """rewrites the orig rev on dest rev |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
896 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
897 returns the node of new commit which is formed |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
898 """ |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
899 if orig.rev() == dest.rev(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
900 msg = _(b'tried to relocate a node on top of itself') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
901 hint = _(b"This shouldn't happen. If you still need to move changesets, " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
902 b"please do so manually with nothing to rebase - working " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
903 b"directory parent is also destination") |
4269
d2599da04bb5
evolve: update the abort to a ProgrammingError
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4265
diff
changeset
|
904 raise error.ProgrammingError(msg, hint=hint) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
905 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
906 if pctx is None: |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
907 if len(orig.parents()) == 2: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
908 msg = _(b"tried to relocate a merge commit without specifying which " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
909 b"parent should be moved") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
910 hint = _(b"Specify the parent by passing in pctx") |
4269
d2599da04bb5
evolve: update the abort to a ProgrammingError
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4265
diff
changeset
|
911 raise error.ProgrammingError(msg, hint) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
912 pctx = orig.p1() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
913 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
914 commitmsg = orig.description() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
915 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
916 cache = {} |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
917 sha1s = re.findall(sha1re, commitmsg) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
918 unfi = repo.unfiltered() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
919 for sha1 in sha1s: |
5187
4230f046ddb9
evolve: drop 4.5 compat for scmutil.resolvehexnodeidprefix()
Anton Shestakov <av6@dwimlabs.net>
parents:
5181
diff
changeset
|
920 fullnode = scmutil.resolvehexnodeidprefix(unfi, sha1) |
3665
0f0f31351d6d
compat: avoid using partial node ID in lookup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3653
diff
changeset
|
921 if fullnode is None: |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
922 continue |
3665
0f0f31351d6d
compat: avoid using partial node ID in lookup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3653
diff
changeset
|
923 ctx = unfi[fullnode] |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
924 if not ctx.obsolete(): |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
925 continue |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
926 |
5048
3947964a4ce7
evolve: provide cache argument to obsutil.successorssets() correctly
Anton Shestakov <av6@dwimlabs.net>
parents:
4998
diff
changeset
|
927 successors = obsutil.successorssets(repo, ctx.node(), cache=cache) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
928 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
929 # We can't make any assumptions about how to update the hash if the |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
930 # cset in question was split or diverged. |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
931 if len(successors) == 1 and len(successors[0]) == 1: |
3977
a0a4f4de9ea3
evolvecmd: import mercurial.node module as nodemod
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3927
diff
changeset
|
932 newsha1 = nodemod.hex(successors[0][0]) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
933 commitmsg = commitmsg.replace(sha1, newsha1[:len(sha1)]) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
934 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
935 repo.ui.note(_(b'The stale commit message reference to %s could ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
936 b'not be updated\n') % sha1) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
937 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
938 tr = repo.currenttransaction() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
939 assert tr is not None |
4590
784ad6f60571
evolve: don't use exception for local flow control
Martin von Zweigbergk <martinvonz@google.com>
parents:
4589
diff
changeset
|
940 r = _evolvemerge(repo, orig, dest, pctx, keepbranch) |
5179
7c41a1ebcf7f
compat: directly use status attribute instead of the compat layer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5111
diff
changeset
|
941 if r.unresolvedcount: # some conflict |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
942 with repo.dirstate.parentchange(), compat.parentchange(repo): |
3978
fb8e44c70798
evolve: set the second parent if we get conflicts while evolving
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3977
diff
changeset
|
943 repo.setparents(dest.node(), orig.node()) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
944 repo.dirstate.write(tr) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
945 hint = _(b"see 'hg help evolve.interrupted'") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
946 raise error.InterventionRequired(_(b"unresolved merge conflicts"), |
4676
b6c819facbe8
evolvecmd: the proper way to deal with conflicts is to resolve them
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
947 hint=hint) |
4590
784ad6f60571
evolve: don't use exception for local flow control
Martin von Zweigbergk <martinvonz@google.com>
parents:
4589
diff
changeset
|
948 nodenew = _relocatecommit(repo, orig, commitmsg) |
3639
95a767b2769e
evolve: add evolvestate as an argument to _finalizerelocate()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3638
diff
changeset
|
949 _finalizerelocate(repo, orig, dest, nodenew, tr, category, evolvestate) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
950 return nodenew |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
951 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
952 def _relocatecommit(repo, orig, commitmsg): |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
953 if commitmsg is None: |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
954 commitmsg = orig.description() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
955 extra = dict(orig.extra()) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
956 if b'branch' in extra: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
957 del extra[b'branch'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
958 extra[b'rebase_source'] = orig.hex() |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
959 |
5006
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
960 targetphase = max(orig.phase(), phases.draft) |
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
961 configoverride = repo.ui.configoverride({ |
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
962 (b'phases', b'new-commit'): targetphase |
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
963 }, source=b'evolve') |
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
964 with configoverride: |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
965 # Commit might fail if unresolved files exist |
5006
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
966 return repo.commit(text=commitmsg, user=orig.user(), |
93014d9726d5
evolve: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5005
diff
changeset
|
967 date=orig.date(), extra=extra) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
968 |
3639
95a767b2769e
evolve: add evolvestate as an argument to _finalizerelocate()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3638
diff
changeset
|
969 def _finalizerelocate(repo, orig, dest, nodenew, tr, category, evolvestate): |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
970 destbookmarks = repo.nodebookmarks(dest.node()) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
971 nodesrc = orig.node() |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
972 oldbookmarks = repo.nodebookmarks(nodesrc) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
973 bmchanges = [] |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
974 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
975 if nodenew is not None: |
5021
edcff79a3192
evolvecmd: avoid a ctx->node->ctx conversion
Martin von Zweigbergk <martinvonz@google.com>
parents:
5020
diff
changeset
|
976 obsolete.createmarkers(repo, [(orig, (repo[nodenew],))], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
977 operation=b'evolve') |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
978 for book in oldbookmarks: |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
979 bmchanges.append((book, nodenew)) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
980 evolvestate[b'bookmarkchanges'].append((book, nodesrc)) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
981 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
982 if category == b'orphan': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
983 repo.ui.status(_(b"evolution of %d:%s created no changes " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
984 b"to commit\n") % (orig.rev(), orig)) |
5021
edcff79a3192
evolvecmd: avoid a ctx->node->ctx conversion
Martin von Zweigbergk <martinvonz@google.com>
parents:
5020
diff
changeset
|
985 obsolete.createmarkers(repo, [(orig, ())], operation=b'evolve') |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
986 # Behave like rebase, move bookmarks to dest |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
987 for book in oldbookmarks: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
988 evolvestate[b'bookmarkchanges'].append((book, nodesrc)) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
989 bmchanges.append((book, dest.node())) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
990 for book in destbookmarks: # restore bookmark that rebase move |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
991 bmchanges.append((book, dest.node())) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
992 if bmchanges: |
3699
67d6cc7e0979
compat: drop compatibility layer for bookmark.applychanges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3698
diff
changeset
|
993 repo._bookmarks.applychanges(repo, tr, bmchanges) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
994 |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
995 def _evolvemerge(repo, orig, dest, pctx, keepbranch): |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
996 """Used by the evolve function to merge dest on top of pctx. |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
997 return the same tuple as merge.graft""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
998 if repo[b'.'].rev() != dest.rev(): |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
999 merge.update(repo, |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1000 dest, |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1001 branchmerge=False, |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1002 force=True) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1003 if repo._activebookmark: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1004 repo.ui.status(_(b"(leaving bookmark %s)\n") % repo._activebookmark) |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1005 bookmarksmod.deactivate(repo) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1006 if keepbranch: |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1007 repo.dirstate.setbranch(orig.branch()) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1008 if util.safehasattr(repo, 'currenttopic'): |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1009 # uurrgs |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1010 # there no other topic setter yet |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1011 if not orig.topic() and repo.vfs.exists(b'topic'): |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1012 repo.vfs.unlink(b'topic') |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1013 else: |
4812
67567d7f1174
python3: enforce byte prefix for vfs.open()
Raphaël Gomès <rgomes@octobus.net>
parents:
4807
diff
changeset
|
1014 with repo.vfs.open(b'topic', b'w') as f: |
3463
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1015 f.write(orig.topic()) |
f994c480cea9
evolvecmd: move more chunks of code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3462
diff
changeset
|
1016 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1017 return merge.graft(repo, orig, pctx, [b'destination', b'evolving'], True) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1018 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1019 instabilities_map = { |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1020 b'contentdivergent': b"content-divergent", |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1021 b'phasedivergent': b"phase-divergent" |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1022 } |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1023 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1024 def _selectrevs(repo, allopt, revopt, anyopt, targetcat): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1025 """select troubles in repo matching according to given options""" |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1026 revs = set() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1027 if allopt or revopt: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1028 revs = repo.revs(b"%s()" % targetcat) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1029 if revopt: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1030 revs = scmutil.revrange(repo, revopt) & revs |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1031 elif not anyopt: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1032 topic = getattr(repo, 'currenttopic', b'') |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1033 if topic: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1034 revs = repo.revs(b'topic(%s)', topic) & revs |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1035 elif targetcat == b'orphan': |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1036 revs = _aspiringdescendant(repo, |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1037 repo.revs(b'(.::) - obsolete()::')) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1038 revs = set(revs) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1039 if targetcat == b'contentdivergent': |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1040 # Pick one divergent per group of divergents |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1041 revs = _dedupedivergents(repo, revs) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1042 elif anyopt: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1043 revs = repo.revs(b'first(%s())' % (targetcat)) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1044 elif targetcat == b'orphan': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1045 revs = set(_aspiringchildren(repo, repo.revs(b'(.::) - obsolete()::'))) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1046 if 1 < len(revs): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1047 msg = b"multiple evolve candidates" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1048 hint = (_(b"select one of %s with --rev") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1049 % b', '.join([bytes(repo[r]) for r in sorted(revs)])) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1050 raise error.Abort(msg, hint=hint) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1051 elif instabilities_map.get(targetcat, targetcat) in repo[b'.'].instabilities(): |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1052 revs = set([repo[b'.'].rev()]) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1053 return revs |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1054 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1055 def _dedupedivergents(repo, revs): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1056 """Dedupe the divergents revs in revs to get one from each group with the |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1057 lowest revision numbers |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1058 """ |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1059 repo = repo.unfiltered() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1060 res = set() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1061 # To not reevaluate divergents of the same group once one is encountered |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1062 discarded = set() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1063 for rev in revs: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1064 if rev in discarded: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1065 continue |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1066 divergent = repo[rev] |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1067 base, others = divergentdata(divergent) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1068 othersrevs = [o.rev() for o in others] |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1069 res.add(min([divergent.rev()] + othersrevs)) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1070 discarded.update(othersrevs) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1071 return res |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1072 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1073 def divergentdata(ctx): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1074 """return base, other part of a conflict |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1075 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1076 This only return the first one. |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1077 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1078 XXX this woobly function won't survive XXX |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1079 """ |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1080 repo = ctx._repo.unfiltered() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1081 for base in repo.set(b'reverse(allpredecessors(%d))', ctx.rev()): |
3697
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3694
diff
changeset
|
1082 newer = obsutil.successorssets(ctx._repo, base.node()) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1083 # drop filter and solution including the original ctx |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1084 newer = [n for n in newer if n and ctx.node() not in n] |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1085 if newer: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1086 return base, tuple(ctx._repo[o] for o in newer[0]) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1087 raise error.Abort(_(b"base of divergent changeset %s not found") % ctx, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1088 hint=_(b'this case is not yet handled')) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1089 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1090 def _aspiringdescendant(repo, revs): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1091 """Return a list of changectx which can be stabilized on top of pctx or |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1092 one of its descendants recursively. Empty list if none can be found.""" |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1093 target = set(revs) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1094 result = set(target) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1095 paths = collections.defaultdict(set) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1096 for r in repo.revs(b'orphan() - %ld', revs): |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1097 for d in _possibledestination(repo, r): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1098 paths[d].add(r) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1099 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1100 result = set(target) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1101 tovisit = list(revs) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1102 while tovisit: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1103 base = tovisit.pop() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1104 for unstable in paths[base]: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1105 if unstable not in result: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1106 tovisit.append(unstable) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1107 result.add(unstable) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1108 return sorted(result - target) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1109 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1110 def _aspiringchildren(repo, revs): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1111 """Return a list of changectx which can be stabilized on top of pctx or |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1112 one of its descendants. Empty list if none can be found.""" |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1113 target = set(revs) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1114 result = [] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1115 for r in repo.revs(b'orphan() - %ld', revs): |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1116 dest = _possibledestination(repo, r) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1117 if target & dest: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1118 result.append(r) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1119 return result |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1120 |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1121 def _possibledestination(repo, rev): |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1122 """return all changesets that may be a new parent for REV""" |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1123 tonode = repo.changelog.node |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1124 parents = repo.changelog.parentrevs |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1125 torev = repo.changelog.rev |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1126 dest = set() |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1127 tovisit = list(parents(rev)) |
5264
6d0d9ba04a1d
evolve: provide cache to successorssets() in _possibledestination()
Anton Shestakov <av6@dwimlabs.net>
parents:
5212
diff
changeset
|
1128 cache = {} |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1129 while tovisit: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1130 r = tovisit.pop() |
4230
e796835fe6b3
evolvecmd: _possibledestination() skip visiting empty parent
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4209
diff
changeset
|
1131 if r == -1: |
e796835fe6b3
evolvecmd: _possibledestination() skip visiting empty parent
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4209
diff
changeset
|
1132 continue |
5264
6d0d9ba04a1d
evolve: provide cache to successorssets() in _possibledestination()
Anton Shestakov <av6@dwimlabs.net>
parents:
5212
diff
changeset
|
1133 succsets = obsutil.successorssets(repo, tonode(r), cache=cache) |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1134 if not succsets: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1135 tovisit.extend(parents(r)) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1136 else: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1137 # We should probably pick only one destination from split |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1138 # (case where '1 < len(ss)'), This could be the currently tipmost |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1139 # but logic is less clear when result of the split are now on |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1140 # multiple branches. |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1141 for ss in succsets: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1142 for n in ss: |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1143 dest.add(torev(n)) |
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1144 return dest |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1145 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1146 def _handlenotrouble(ui, repo, allopt, revopt, anyopt, targetcat): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1147 """Used by the evolve function to display an error message when |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1148 no troubles can be resolved""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1149 troublecategories = [b'phasedivergent', b'contentdivergent', b'orphan'] |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1150 unselectedcategories = [c for c in troublecategories if c != targetcat] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1151 msg = None |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1152 hint = None |
3649
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1153 retoverride = None |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1154 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1155 troubled = { |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1156 b"orphan": repo.revs(b"orphan()"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1157 b"contentdivergent": repo.revs(b"contentdivergent()"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1158 b"phasedivergent": repo.revs(b"phasedivergent()"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1159 b"all": repo.revs(b"unstable()"), |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1160 } |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1161 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1162 hintmap = { |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1163 b'phasedivergent': _(b"do you want to use --phase-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1164 b'phasedivergent+contentdivergent': _(b"do you want to use " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1165 b"--phase-divergent or" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1166 b" --content-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1167 b'phasedivergent+orphan': _(b"do you want to use --phase-divergent" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1168 b" or --orphan"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1169 b'contentdivergent': _(b"do you want to use --content-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1170 b'contentdivergent+orphan': _(b"do you want to use --content-divergent" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1171 b" or --orphan"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1172 b'orphan': _(b"do you want to use --orphan"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1173 b'any+phasedivergent': _(b"do you want to use --any (or --rev) and" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1174 b" --phase-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1175 b'any+phasedivergent+contentdivergent': _(b"do you want to use --any" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1176 b" (or --rev) and" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1177 b" --phase-divergent or" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1178 b" --content-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1179 b'any+phasedivergent+orphan': _(b"do you want to use --any (or --rev)" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1180 b" and --phase-divergent or --orphan"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1181 b'any+contentdivergent': _(b"do you want to use --any (or --rev) and" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1182 b" --content-divergent"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1183 b'any+contentdivergent+orphan': _(b"do you want to use --any (or --rev)" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1184 b" and --content-divergent or " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1185 b"--orphan"), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1186 b'any+orphan': _(b"do you want to use --any (or --rev)" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1187 b"and --orphan"), |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1188 } |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1189 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1190 if revopt: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1191 revs = scmutil.revrange(repo, revopt) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1192 if not revs: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1193 msg = _(b"set of specified revisions is empty") |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1194 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1195 msg = _(b"no %s changesets in specified revisions") % targetcat |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1196 othertroubles = [] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1197 for cat in unselectedcategories: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1198 if revs & troubled[cat]: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1199 othertroubles.append(cat) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1200 if othertroubles: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1201 hint = hintmap[b'+'.join(othertroubles)] |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1202 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1203 elif anyopt: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1204 msg = _(b"no %s changesets to evolve") % targetcat |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1205 othertroubles = [] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1206 for cat in unselectedcategories: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1207 if troubled[cat]: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1208 othertroubles.append(cat) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1209 if othertroubles: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1210 hint = hintmap[b'+'.join(othertroubles)] |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1211 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1212 else: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1213 # evolve without any option = relative to the current wdir |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1214 if targetcat == b'orphan': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1215 msg = _(b"nothing to evolve on current working copy parent") |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1216 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1217 msg = _(b"current working copy parent is not %s") % targetcat |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1218 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1219 p1 = repo[b'.'].rev() |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1220 othertroubles = [] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1221 for cat in unselectedcategories: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1222 if p1 in troubled[cat]: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1223 othertroubles.append(cat) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1224 if othertroubles: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1225 hint = hintmap[b'+'.join(othertroubles)] |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1226 else: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1227 length = len(troubled[targetcat]) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1228 if length: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1229 hint = _(b"%d other %s in the repository, do you want --any " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1230 b"or --rev") % (length, targetcat) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1231 else: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1232 othertroubles = [] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1233 for cat in unselectedcategories: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1234 if troubled[cat]: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1235 othertroubles.append(cat) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1236 if othertroubles: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1237 hint = hintmap[b'any+' + (b'+'.join(othertroubles))] |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1238 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1239 msg = _(b"no troubled changesets") |
3649
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1240 # Exit with a 0 (success) status in this case. |
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1241 retoverride = 0 |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1242 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1243 assert msg is not None |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1244 ui.write_err(b"%s\n" % msg) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1245 if hint: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1246 ui.write_err(b"(%s)\n" % hint) |
3649
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1247 ret = 2 |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1248 else: |
3649
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1249 ret = 1 |
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1250 |
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1251 if retoverride is not None: |
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1252 return retoverride |
4fcf815916f5
evolve: do not exit 1 when there are no troubled changesets (issue5823)
Kyle Lippincott <spectral@google.com>
parents:
3643
diff
changeset
|
1253 return ret |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1254 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1255 def _preparelistctxs(items, condition): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1256 return [item.hex() for item in items if condition(item)] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1257 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1258 def _formatctx(fm, ctx): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1259 fm.data(node=ctx.hex()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1260 fm.data(desc=ctx.description()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1261 fm.data(date=ctx.date()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1262 fm.data(user=ctx.user()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1263 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1264 def listtroubles(ui, repo, troublecategories, **opts): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1265 """Print all the troubles for the repo (or given revset)""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1266 troublecategories = troublecategories or [b'contentdivergent', b'orphan', b'phasedivergent'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1267 showunstable = b'orphan' in troublecategories |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1268 showbumped = b'phasedivergent' in troublecategories |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1269 showdivergent = b'contentdivergent' in troublecategories |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1270 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1271 revs = repo.revs(b'+'.join(b"%s()" % t for t in troublecategories)) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1272 if opts.get('rev'): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1273 revs = scmutil.revrange(repo, opts.get('rev')) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1274 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1275 fm = ui.formatter(b'evolvelist', pycompat.byteskwargs(opts)) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1276 for rev in revs: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1277 ctx = repo[rev] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1278 unpars = _preparelistctxs(ctx.parents(), lambda p: p.orphan()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1279 obspars = _preparelistctxs(ctx.parents(), lambda p: p.obsolete()) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1280 imprecs = _preparelistctxs(repo.set(b"allpredecessors(%n)", ctx.node()), |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1281 lambda p: not p.mutable()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1282 dsets = divergentsets(repo, ctx) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1283 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1284 fm.startitem() |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1285 # plain formatter section |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1286 hashlen, desclen = 12, 60 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1287 desc = ctx.description() |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1288 if desc: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1289 desc = desc.splitlines()[0] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1290 desc = (desc[:desclen] + b'...') if len(desc) > desclen else desc |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1291 fm.plain(b'%s: ' % ctx.hex()[:hashlen]) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1292 fm.plain(b'%s\n' % desc) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1293 fm.data(node=ctx.hex(), rev=ctx.rev(), desc=desc, phase=ctx.phasestr()) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1294 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1295 for unpar in unpars if showunstable else []: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1296 fm.plain(b' %s: %s (%s parent)\n' % (TROUBLES['ORPHAN'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1297 unpar[:hashlen], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1298 TROUBLES['ORPHAN'])) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1299 for obspar in obspars if showunstable else []: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1300 fm.plain(b' %s: %s (obsolete parent)\n' % (TROUBLES['ORPHAN'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1301 obspar[:hashlen])) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1302 for imprec in imprecs if showbumped else []: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1303 fm.plain(b' %s: %s (immutable precursor)\n' % |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1304 (TROUBLES['PHASEDIVERGENT'], imprec[:hashlen])) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1305 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1306 if dsets and showdivergent: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1307 for dset in dsets: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1308 fm.plain(b' %s: ' % TROUBLES['CONTENTDIVERGENT']) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1309 first = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1310 for n in dset[b'divergentnodes']: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1311 t = b"%s (%s)" if first else b" %s (%s)" |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1312 first = False |
3977
a0a4f4de9ea3
evolvecmd: import mercurial.node module as nodemod
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3927
diff
changeset
|
1313 fm.plain(t % (nodemod.hex(n)[:hashlen], repo[n].phasestr())) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1314 comprec = nodemod.hex(dset[b'commonprecursor'])[:hashlen] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1315 fm.plain(b" (precursor %s)\n" % comprec) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1316 fm.plain(b"\n") |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1317 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1318 # templater-friendly section |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1319 _formatctx(fm, ctx) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1320 troubles = [] |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1321 for unpar in unpars: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1322 troubles.append({b'troubletype': TROUBLES['ORPHAN'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1323 b'sourcenode': unpar, b'sourcetype': b'orphanparent'}) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1324 for obspar in obspars: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1325 troubles.append({b'troubletype': TROUBLES['ORPHAN'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1326 b'sourcenode': obspar, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1327 b'sourcetype': b'obsoleteparent'}) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1328 for imprec in imprecs: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1329 troubles.append({b'troubletype': TROUBLES['PHASEDIVERGENT'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1330 b'sourcenode': imprec, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1331 b'sourcetype': b'immutableprecursor'}) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1332 for dset in dsets: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1333 divnodes = [{b'node': nodemod.hex(n), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1334 b'phase': repo[n].phasestr(), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1335 } for n in dset[b'divergentnodes']] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1336 troubles.append({b'troubletype': TROUBLES['CONTENTDIVERGENT'], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1337 b'commonprecursor': nodemod.hex(dset[b'commonprecursor']), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1338 b'divergentnodes': divnodes}) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1339 fm.data(troubles=troubles) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1340 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1341 fm.end() |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1342 |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1343 def _checkevolveopts(repo, opts): |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1344 """ check the options passed to `hg evolve` and warn for deprecation warning |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1345 if any """ |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1346 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1347 if opts['continue']: |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1348 if opts['any']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1349 raise error.Abort(_(b'cannot specify both "--any" and "--continue"')) |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1350 if opts['all']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1351 raise error.Abort(_(b'cannot specify both "--all" and "--continue"')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1352 if opts['rev']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1353 raise error.Abort(_(b'cannot specify both "--rev" and "--continue"')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1354 if opts['stop']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1355 raise error.Abort(_(b'cannot specify both "--stop" and' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1356 b' "--continue"')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1357 if opts['abort']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1358 raise error.Abort(_(b'cannot specify both "--abort" and' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1359 b' "--continue"')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1360 |
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1361 if opts['stop']: |
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1362 if opts['any']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1363 raise error.Abort(_(b'cannot specify both "--any" and "--stop"')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1364 if opts['all']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1365 raise error.Abort(_(b'cannot specify both "--all" and "--stop"')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1366 if opts['rev']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1367 raise error.Abort(_(b'cannot specify both "--rev" and "--stop"')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1368 if opts['abort']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1369 raise error.Abort(_(b'cannot specify both "--abort" and "--stop"')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1370 |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1371 if opts['abort']: |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1372 if opts['any']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1373 raise error.Abort(_(b'cannot specify both "--any" and "--abort"')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1374 if opts['all']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1375 raise error.Abort(_(b'cannot specify both "--all" and "--abort"')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1376 if opts['rev']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1377 raise error.Abort(_(b'cannot specify both "--rev" and "--abort"')) |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1378 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1379 if opts['rev']: |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1380 if opts['any']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1381 raise error.Abort(_(b'cannot specify both "--rev" and "--any"')) |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1382 if opts['all']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1383 raise error.Abort(_(b'cannot specify both "--rev" and "--all"')) |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1384 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1385 # Backward compatibility |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1386 if opts['unstable']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1387 msg = (b"'evolve --unstable' is deprecated, " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1388 b"use 'evolve --orphan'") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1389 repo.ui.deprecwarn(msg, b'4.4') |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1390 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1391 opts['orphan'] = opts['divergent'] |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1392 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1393 if opts['divergent']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1394 msg = (b"'evolve --divergent' is deprecated, " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1395 b"use 'evolve --content-divergent'") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1396 repo.ui.deprecwarn(msg, b'4.4') |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1397 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1398 opts['content_divergent'] = opts['divergent'] |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1399 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1400 if opts['bumped']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1401 msg = (b"'evolve --bumped' is deprecated, " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1402 b"use 'evolve --phase-divergent'") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1403 repo.ui.deprecwarn(msg, b'4.4') |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1404 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1405 opts['phase_divergent'] = opts['bumped'] |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1406 |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1407 return opts |
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1408 |
4601
e5aa1e23d146
evolve: move progress-clearing out of _cleanup()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4600
diff
changeset
|
1409 def _cleanup(ui, repo, startnode, shouldupdate): |
3774
4736d0bb81bf
evolve: add an `--update` flag to `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3772
diff
changeset
|
1410 if not shouldupdate: |
4377
c2f9de28415a
evolve: document the "if not shouldupdate" block
Martin von Zweigbergk <martinvonz@google.com>
parents:
4376
diff
changeset
|
1411 # Move back to startnode, or to its successor if the start node is |
c2f9de28415a
evolve: document the "if not shouldupdate" block
Martin von Zweigbergk <martinvonz@google.com>
parents:
4376
diff
changeset
|
1412 # obsolete (perhaps made obsolete by the current `hg evolve`) |
3774
4736d0bb81bf
evolve: add an `--update` flag to `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3772
diff
changeset
|
1413 unfi = repo.unfiltered() |
4736d0bb81bf
evolve: add an `--update` flag to `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3772
diff
changeset
|
1414 succ = utility._singlesuccessor(repo, unfi[startnode]) |
4736d0bb81bf
evolve: add an `--update` flag to `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3772
diff
changeset
|
1415 hg.updaterepo(repo, repo[succ].node(), False) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1416 if repo[b'.'].node() != startnode: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1417 ui.status(_(b'working directory is now at %s\n') % repo[b'.']) |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1418 |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1419 def divergentsets(repo, ctx): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1420 """Compute sets of commits divergent with a given one""" |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1421 cache = {} |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1422 base = {} |
4258
697ec7c2f325
compat: drop 4.3 compatiblity code for `obsutil.allprecursors` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4257
diff
changeset
|
1423 for n in obsutil.allpredecessors(repo.obsstore, [ctx.node()]): |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1424 if n == ctx.node(): |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1425 # a node can't be a base for divergence with itself |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1426 continue |
5048
3947964a4ce7
evolve: provide cache argument to obsutil.successorssets() correctly
Anton Shestakov <av6@dwimlabs.net>
parents:
4998
diff
changeset
|
1427 nsuccsets = obsutil.successorssets(repo, n, cache=cache) |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1428 for nsuccset in nsuccsets: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1429 if ctx.node() in nsuccset: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1430 # we are only interested in *other* successor sets |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1431 continue |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1432 if tuple(nsuccset) in base: |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1433 # we already know the latest base for this divergency |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1434 continue |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1435 base[tuple(nsuccset)] = n |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1436 divergence = [] |
4714
c51fc0ae7a7e
py3: switch from iteritems() to items()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4706
diff
changeset
|
1437 for divset, b in base.items(): |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1438 divergence.append({ |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1439 b'divergentnodes': divset, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1440 b'commonprecursor': b |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1441 }) |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1442 |
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1443 return divergence |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1444 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1445 @eh.command( |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1446 b'evolve|stabilize|solve', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1447 [(b'n', b'dry-run', False, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1448 _(b'do not perform actions, just print what would be done')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1449 (b'', b'confirm', False, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1450 _(b'ask for confirmation before performing the action')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1451 (b'A', b'any', False, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1452 _(b'also consider troubled changesets unrelated to current working ' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1453 b'directory')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1454 (b'r', b'rev', [], _(b'solves troubles of these revisions'), _(b'REV')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1455 (b'', b'bumped', False, _(b'solves only bumped changesets (DEPRECATED)')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1456 (b'', b'phase-divergent', False, _(b'solves only phase-divergent changesets')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1457 (b'', b'divergent', False, _(b'solves only divergent changesets (DEPRECATED)')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1458 (b'', b'content-divergent', False, _(b'solves only content-divergent changesets')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1459 (b'', b'unstable', False, _(b'solves only unstable changesets (DEPRECATED)')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1460 (b'', b'orphan', False, _(b'solves only orphan changesets (default)')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1461 (b'a', b'all', None, _(b'evolve all troubled changesets related to the current' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1462 b' working directory and its descendants (default)')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1463 (b'', b'update', False, _(b'update to the head of evolved changesets')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1464 (b'c', b'continue', False, _(b'continue an interrupted evolution')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1465 (b'', b'stop', False, _(b'stop the interrupted evolution')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1466 (b'', b'abort', False, _(b'abort the interrupted evolution')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1467 (b'l', b'list', False, _(b'provide details on troubled changesets' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1468 b' in the repo')), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1469 ] + mergetoolopts, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1470 _(b'[OPTIONS]...'), |
4894
f9743b13de6d
help: categorizing evolve and topic commands
Rodrigo Damazio <rdamazio@google.com>
parents:
4857
diff
changeset
|
1471 helpbasic=True, |
f9743b13de6d
help: categorizing evolve and topic commands
Rodrigo Damazio <rdamazio@google.com>
parents:
4857
diff
changeset
|
1472 **compat.helpcategorykwargs('CATEGORY_CHANGE_MANAGEMENT') |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1473 ) |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1474 def evolve(ui, repo, **opts): |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1475 """solve troubled changesets in your repository |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1476 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1477 Modifying history can lead to various types of troubled changesets: |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1478 orphan, phase-divergent, or content-divergent. The evolve command resolves |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1479 your troubles by executing one of the following actions: |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1480 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1481 - update working copy to a successor |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1482 - rebase an orphan changeset |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1483 - extract the desired changes from a phase-divergent changeset |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1484 - fuse content-divergent changesets back together |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1485 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1486 If you pass no arguments, evolve works in automatic mode: it will execute a |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1487 single action to reduce instability related to your working copy. There are |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1488 two cases for this action. First, if the parent of your working copy is |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1489 obsolete, evolve updates to the parent's successor. Second, if the working |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1490 copy parent is not obsolete but has obsolete predecessors, then evolve |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1491 determines if there is an orphan changeset that can be rebased onto the |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1492 working copy parent in order to reduce instability. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1493 If so, evolve rebases that changeset. If not, evolve refuses to guess your |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1494 intention, and gives a hint about what you might want to do next. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1495 |
4751
d0965c5c5335
evolve: further clarify when update is performed
kevpeng@google.com
parents:
4708
diff
changeset
|
1496 When ``--update`` is used, successful evolve operations update the working |
d0965c5c5335
evolve: further clarify when update is performed
kevpeng@google.com
parents:
4708
diff
changeset
|
1497 directory to the newly created changesets. Moreover, an update will always |
d0965c5c5335
evolve: further clarify when update is performed
kevpeng@google.com
parents:
4708
diff
changeset
|
1498 be performed if the current working directory parent is obsolete. |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1499 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1500 Automatic mode only handles common use cases. For example, it avoids taking |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1501 action in the case of ambiguity, and it ignores orphan changesets that are |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1502 not related to your working copy. |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1503 It also refuses to solve phase-divergent or content-divergent changesets |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1504 unless you explicitly request such behavior (see below). |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1505 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1506 Eliminating all instability around your working copy may require multiple |
4605
f8790714b741
evolve: mention that --all is the default behavior now
Anton Shestakov <av6@dwimlabs.net>
parents:
4604
diff
changeset
|
1507 invocations of :hg:`evolve` if you use ``--rev`` or ``--no-all``. Use |
f8790714b741
evolve: mention that --all is the default behavior now
Anton Shestakov <av6@dwimlabs.net>
parents:
4604
diff
changeset
|
1508 ``--all`` (which is the default behavior) to recursively select and evolve |
f8790714b741
evolve: mention that --all is the default behavior now
Anton Shestakov <av6@dwimlabs.net>
parents:
4604
diff
changeset
|
1509 all orphan changesets that can be rebased onto the working copy parent. |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1510 This is more powerful than successive invocations, since ``--all`` handles |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1511 ambiguous cases (e.g. orphan changesets with multiple children) by evolving |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1512 all branches. |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1513 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1514 When your repository cannot be handled by automatic mode, you might need to |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1515 use ``--rev`` to specify a changeset to evolve. For example, if you have |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1516 an orphan changeset that is not related to the working copy parent, |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1517 you could use ``--rev`` to evolve it. Or, if some changeset has multiple |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1518 orphan children, evolve in automatic mode refuses to guess which one to |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1519 evolve; you have to use ``--rev`` in that case. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1520 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1521 Alternately, ``--any`` makes evolve search for the next evolvable changeset |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1522 regardless of whether it is related to the working copy parent. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1523 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1524 You can supply multiple revisions to evolve multiple troubled changesets |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1525 in a single invocation. In revset terms, ``--any`` is equivalent to ``--rev |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1526 first(orphan())``. ``--rev`` and ``--all`` are mutually exclusive, as are |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1527 ``--rev`` and ``--any``. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1528 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1529 ``hg evolve --any --all`` is useful for cleaning up instability across all |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1530 branches, letting evolve figure out the appropriate order and destination. |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1531 |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1532 When you have troubled changesets that are not orphan, :hg:`evolve` refuses |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1533 to consider them unless you specify the category of trouble you |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1534 wish to resolve, with ``--phase-divergent`` or ``--content-divergent``. |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1535 These options are currently mutually exclusive with each other and with |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1536 ``--orphan`` (the default). You can combine ``--phase-divergent`` or |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1537 ``--content-divergent`` with ``--rev``, ``--all``, or ``--any``. |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1538 |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1539 You can also use the evolve command to list the troubles affecting your |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1540 repository by using the --list flag. You can choose to display only some |
4180
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1541 categories of troubles with the --orphan, --content-divergent or |
96525b95d083
evolvecmd: use modern vocabulary in help text for evolve
Anton Shestakov <av6@dwimlabs.net>
parents:
4179
diff
changeset
|
1542 --phase-divergent flags. |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1543 |
3821
f67ac33c07d2
evolve: rename help topic evolve.interrupted-evolve to evolve.interrupted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3811
diff
changeset
|
1544 Interrupted |
f67ac33c07d2
evolve: rename help topic evolve.interrupted-evolve to evolve.interrupted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3811
diff
changeset
|
1545 =========== |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1546 |
5210
b9b71fdea693
evolve: fix some documentation grammar/typos
Eric Spishak-Thomas <emspishak@gmail.com>
parents:
5111
diff
changeset
|
1547 The `hg evolve` command is an all purpose tool that solves all kinds of |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1548 instabilities in your repository. Sometimes, instability resolution will lead |
5210
b9b71fdea693
evolve: fix some documentation grammar/typos
Eric Spishak-Thomas <emspishak@gmail.com>
parents:
5111
diff
changeset
|
1549 to merge conflicts that cannot be solved without human intervention (same as |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1550 `hg merge`). This can lead to an "interrupted state" where human assistance is |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1551 requested. There are three things which you can do when you face a similar |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1552 situation: |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1553 |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1554 - `hg evolve --continue`: |
4676
b6c819facbe8
evolvecmd: the proper way to deal with conflicts is to resolve them
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
1555 resolve all the conflicts using `hg resolve` and then run this to |
b6c819facbe8
evolvecmd: the proper way to deal with conflicts is to resolve them
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
1556 continue the interrupted evolve |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1557 |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1558 - `hg evolve --stop`: |
4265
4d62095d9fe6
evolve: fix a documentation typo
Eric Spishak-Thomas <spishak@google.com>
parents:
4235
diff
changeset
|
1559 stops the current interrupted evolve, keeping all the successful steps, |
3795
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1560 but delaying to resolution of the remaining step for later. |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1561 |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1562 - `hg evolve --abort`: |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1563 aborts the interrupted evolve and undoes all the resolution which have |
b8b4ff86feb8
evolve: add a help topic `Interrupted-Evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3794
diff
changeset
|
1564 happened |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1565 """ |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1566 with repo.wlock(), repo.lock(): |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1567 return _performevolve(ui, repo, **opts) |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1568 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1569 def _performevolve(ui, repo, **opts): |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1570 opts = _checkevolveopts(repo, opts) |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1571 # Options |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1572 contopt = opts['continue'] |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1573 anyopt = opts['any'] |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1574 allopt = opts['all'] |
4580
3ef96578da43
evolve: use --all by default (BC)
Anton Shestakov <av6@dwimlabs.net>
parents:
4577
diff
changeset
|
1575 if allopt is None: |
3ef96578da43
evolve: use --all by default (BC)
Anton Shestakov <av6@dwimlabs.net>
parents:
4577
diff
changeset
|
1576 allopt = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1577 startnode = repo[b'.'].node() |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1578 dryrunopt = opts['dry_run'] |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1579 confirmopt = opts['confirm'] |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1580 revopt = opts['rev'] |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1581 stopopt = opts['stop'] |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1582 abortopt = opts['abort'] |
3774
4736d0bb81bf
evolve: add an `--update` flag to `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3772
diff
changeset
|
1583 shouldupdate = opts['update'] |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1584 |
4762
75bc0a51809a
py3: redefine "troublecategories" in evolve as a dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
4752
diff
changeset
|
1585 troublecategories = { |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1586 b'phasedivergent': r'phase_divergent', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1587 b'contentdivergent': r'content_divergent', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1588 b'orphan': r'orphan', |
4762
75bc0a51809a
py3: redefine "troublecategories" in evolve as a dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
4752
diff
changeset
|
1589 } |
75bc0a51809a
py3: redefine "troublecategories" in evolve as a dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
4752
diff
changeset
|
1590 specifiedcategories = [k for k, v in troublecategories.items() if opts[v]] |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1591 if opts['list']: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1592 ui.pager(b'evolve') |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1593 listtroubles(ui, repo, specifiedcategories, **opts) |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1594 return |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1595 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1596 targetcat = b'orphan' |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1597 if 1 < len(specifiedcategories): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1598 msg = _(b'cannot specify more than one trouble category to solve (yet)') |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1599 raise error.Abort(msg) |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1600 elif len(specifiedcategories) == 1: |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1601 targetcat = specifiedcategories[0] |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1602 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1603 ui.setconfig(b'ui', b'forcemerge', opts.get('tool', r''), b'evolve') |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1604 |
3477
713e26a647f5
evolve: create a state object in all case
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3470
diff
changeset
|
1605 evolvestate = state.cmdstate(repo) |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1606 # Continuation handling |
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1607 if contopt: |
3556
b0438c9101ad
evolve: load evolvestate before passing to continueevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3555
diff
changeset
|
1608 if not evolvestate: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1609 raise error.Abort(_(b'no interrupted evolve to continue')) |
3556
b0438c9101ad
evolve: load evolvestate before passing to continueevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3555
diff
changeset
|
1610 evolvestate.load() |
4603
8cc329d705f9
evolve: add progress support for --continue
Martin von Zweigbergk <martinvonz@google.com>
parents:
4602
diff
changeset
|
1611 continueevolve(ui, repo, evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1612 if evolvestate[b'command'] != b'evolve': |
3558
cec6e21b3bcf
evolve: de-duplicate some function calls
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3557
diff
changeset
|
1613 evolvestate.delete() |
cec6e21b3bcf
evolve: de-duplicate some function calls
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3557
diff
changeset
|
1614 return |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1615 startnode = repo.unfiltered()[evolvestate[b'startnode']] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1616 if b'update' in evolvestate: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1617 shouldupdate = evolvestate[b'update'] |
3557
77a400149758
evolve: move deletion of evolvestate out of continueevolve() function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3556
diff
changeset
|
1618 evolvestate.delete() |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1619 elif stopopt: |
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1620 if not evolvestate: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1621 raise error.Abort(_(b'no interrupted evolve to stop')) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1622 evolvestate.load() |
3824
a8f509981d30
evolve: factor out logic for --stop flag in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3822
diff
changeset
|
1623 stopevolve(ui, repo, evolvestate) |
3577
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1624 evolvestate.delete() |
279d8b610ac5
evolve: add a `--stop` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3573
diff
changeset
|
1625 return |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1626 elif abortopt: |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1627 if not evolvestate: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1628 raise error.Abort(_(b'no interrupted evolve to abort')) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1629 evolvestate.load() |
3776
2d450974bb1c
evolve: fix `hg abort` when hg next --evolve leads to conflicts (issue5897)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3707
diff
changeset
|
1630 # `hg next --evolve` in play |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1631 if evolvestate[b'command'] != b'evolve': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1632 pctx = repo[b'.'] |
3776
2d450974bb1c
evolve: fix `hg abort` when hg next --evolve leads to conflicts (issue5897)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3707
diff
changeset
|
1633 hg.updaterepo(repo, pctx.node(), True) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1634 ui.status(_(b'evolve aborted\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1635 ui.status(_(b'working directory is now at %s\n') |
3776
2d450974bb1c
evolve: fix `hg abort` when hg next --evolve leads to conflicts (issue5897)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3707
diff
changeset
|
1636 % pctx.hex()[:12]) |
3981
b4d0245c7f40
evolve: delete evolvestate after aborting interrupted `next --evolve`
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3978
diff
changeset
|
1637 evolvestate.delete() |
3776
2d450974bb1c
evolve: fix `hg abort` when hg next --evolve leads to conflicts (issue5897)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3707
diff
changeset
|
1638 return 0 |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1639 return abortevolve(ui, repo, evolvestate) |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1640 else: |
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1641 cmdutil.bailifchanged(repo) |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1642 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1643 obswdir = repo[b'.'].obsolete() |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1644 revs = _selectrevs(repo, allopt, revopt, anyopt, targetcat) |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1645 |
4695
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1646 if not (revs or obswdir): |
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1647 return _handlenotrouble(ui, repo, allopt, revopt, anyopt, targetcat) |
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1648 obswdironly = not revs and obswdir |
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1649 |
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1650 if obswdir: |
4348
398c33b17d76
evolve: make sure we don't stop after evolution of obsparent (issue5881)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4347
diff
changeset
|
1651 result = solveobswdp(ui, repo, opts) |
398c33b17d76
evolve: make sure we don't stop after evolution of obsparent (issue5881)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4347
diff
changeset
|
1652 if result != 0 or result is True: |
4682
8195452be71d
evolve: clarify why returning by adding inline doc
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4681
diff
changeset
|
1653 # return as solving obswdp wasn't successful |
4348
398c33b17d76
evolve: make sure we don't stop after evolution of obsparent (issue5881)
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4347
diff
changeset
|
1654 return result |
4695
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1655 if obswdironly: |
4c9f9dac8977
evolve: fix the code flow pattern of solving obswdir par and troubled revs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4694
diff
changeset
|
1656 return 0 |
3470
ece5cd58147d
evolve: move the evolve command to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3469
diff
changeset
|
1657 |
4612
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1658 # Progress handling |
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1659 seen = 1 |
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1660 showprogress = allopt or revopt |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1661 count = len(revs) |
4612
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1662 |
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1663 def progresscb(): |
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1664 if showprogress: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1665 compat.progress(ui, _(b'evolve'), seen, unit=_(b'changesets'), |
4612
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1666 total=count) |
c289f06028d0
evolve: move more of the progress-related variables together
Martin von Zweigbergk <martinvonz@google.com>
parents:
4611
diff
changeset
|
1667 |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1668 # Order the revisions |
3845
5c964ebe4d4b
evolve: always order the revs to be evolved
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3843
diff
changeset
|
1669 revs = _orderrevs(repo, revs) |
3480
1799fc777f30
evolve: store the target category in evolvestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3479
diff
changeset
|
1670 |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1671 # cbor does not know how to serialize sets, using list for skippedrevs |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1672 stateopts = {b'category': targetcat, b'replacements': {}, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1673 b'revs': list(revs), b'confirm': confirmopt, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1674 b'startnode': startnode, b'skippedrevs': [], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1675 b'command': b'evolve', b'orphanmerge': False, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1676 b'bookmarkchanges': [], b'temprevs': [], b'obsmarkers': [], |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1677 b'update': shouldupdate} |
3555
60e132e20b14
evolve: move the handling for non-continue part in else conditional
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3554
diff
changeset
|
1678 evolvestate.addopts(stateopts) |
4155
cc3a0b13ae57
evolve: use stack alias s# in `hg evolve` msgs
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4154
diff
changeset
|
1679 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1680 activetopic = getattr(repo, 'currenttopic', b'') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1681 tr = repo.transaction(b"evolve") |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1682 with util.acceptintervention(tr): |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1683 for rev in revs: |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1684 _solveonerev(ui, repo, rev, evolvestate, activetopic, dryrunopt, |
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1685 confirmopt, progresscb, targetcat) |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1686 seen += 1 |
3573
d53277cdc1e7
evolve: handle stabilization of merge changeset with both parents obsoleted
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3571
diff
changeset
|
1687 |
4601
e5aa1e23d146
evolve: move progress-clearing out of _cleanup()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4600
diff
changeset
|
1688 if showprogress: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1689 compat.progress(ui, _(b'evolve'), None) |
4601
e5aa1e23d146
evolve: move progress-clearing out of _cleanup()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4600
diff
changeset
|
1690 |
e5aa1e23d146
evolve: move progress-clearing out of _cleanup()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4600
diff
changeset
|
1691 _cleanup(ui, repo, startnode, shouldupdate) |
3554
f045fafd3484
evolve: move the logic of continuation handling of `hg evolve` in own fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3545
diff
changeset
|
1692 |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1693 def _solveonerev(ui, repo, rev, evolvestate, activetopic, dryrunopt, confirmopt, |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1694 progresscb, targetcat): |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1695 """solves one trouble, including orphan merges |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1696 |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1697 Like _solveone(), this solves one trouble. Unlike _solveone(), it |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1698 stabilizes for both parents of orphan merges. |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1699 """ |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1700 curctx = repo[rev] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1701 revtopic = getattr(curctx, 'topic', lambda: b'')() |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1702 topicidx = getattr(curctx, 'topicidx', lambda: None)() |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1703 stacktmplt = False |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1704 # check if revision being evolved is in active topic to make sure |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1705 # that we can use stack aliases s# in evolve msgs. |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1706 if activetopic and (activetopic == revtopic) and topicidx is not None: |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1707 stacktmplt = True |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1708 progresscb() |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1709 ret = _solveone(ui, repo, curctx, evolvestate, dryrunopt, |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1710 confirmopt, progresscb, targetcat, |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1711 stacktmplt=stacktmplt) |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1712 if ret[0]: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1713 evolvestate[b'replacements'][curctx.node()] = ret[1] |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1714 evolvestate[b'lastsolved'] = ret[1] |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1715 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1716 evolvestate[b'skippedrevs'].append(curctx.node()) |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1717 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1718 if evolvestate[b'orphanmerge']: |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1719 # we were processing an orphan merge with both parents obsolete, |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1720 # stabilized for second parent, re-stabilize for the first parent |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1721 ret = _solveone(ui, repo, repo[ret[1]], evolvestate, dryrunopt, |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1722 confirmopt, progresscb, targetcat, |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1723 stacktmplt=stacktmplt) |
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1724 if ret[0]: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1725 evolvestate[b'replacements'][curctx.node()] = ret[1] |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1726 evolvestate[b'lastsolved'] = ret[1] |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1727 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1728 evolvestate[b'skippedrevs'].append(curctx.node()) |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1729 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1730 evolvestate[b'orphanmerge'] = False |
4606
6c3f4cfa582e
evolve: extract function for solving one revision, including merges
Martin von Zweigbergk <martinvonz@google.com>
parents:
4605
diff
changeset
|
1731 |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1732 def solveobswdp(ui, repo, opts): |
4378
0b97d4bea7e0
evolve: add description of function solveobswdp
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4377
diff
changeset
|
1733 """this function updates to the successor of obsolete wdir parent""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1734 oldid = repo[b'.'].node() |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1735 startctx = repo[b'.'] |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1736 dryrunopt = opts.get('dry_run', False) |
5181
c979d64a2589
compat: drop 4.5 compatibility layer for log utility
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5179
diff
changeset
|
1737 displayer = logcmdutil.changesetdisplayer(ui, repo, |
c979d64a2589
compat: drop 4.5 compatibility layer for log utility
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5179
diff
changeset
|
1738 {b'template': shorttemplate}) |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1739 try: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1740 ctx = repo[utility._singlesuccessor(repo, repo[b'.'])] |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1741 except utility.MultipleSuccessorsError as exc: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1742 repo.ui.write_err(_(b'parent is obsolete with multiple' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1743 b' successors:\n')) |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1744 for ln in exc.successorssets: |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1745 for n in ln: |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1746 displayer.show(repo[n]) |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1747 return 2 |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1748 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1749 ui.status(_(b'update:')) |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1750 if not ui.quiet: |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1751 displayer.show(ctx) |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1752 |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1753 if dryrunopt: |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1754 return 0 |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1755 res = hg.update(repo, ctx.rev()) |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1756 newid = ctx.node() |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1757 |
4376
0fbf895ce160
evolve: make "startnode" consistently be a node, not a context
Martin von Zweigbergk <martinvonz@google.com>
parents:
4375
diff
changeset
|
1758 if ctx != startctx: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1759 with repo.wlock(), repo.lock(), repo.transaction(b'evolve') as tr: |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1760 bmupdater = rewriteutil.bookmarksupdater(repo, oldid, tr) |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1761 bmupdater(newid) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1762 ui.status(_(b'working directory is now at %s\n') % ctx) |
4347
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1763 return res |
59745d6d626d
evolve: extract "update" code into its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4344
diff
changeset
|
1764 |
3824
a8f509981d30
evolve: factor out logic for --stop flag in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3822
diff
changeset
|
1765 def stopevolve(ui, repo, evolvestate): |
a8f509981d30
evolve: factor out logic for --stop flag in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3822
diff
changeset
|
1766 """logic for handling of `hg evolve --stop`""" |
3826
8e8bd5bb2f90
evolve: declare updated and pctx variables in stopevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3825
diff
changeset
|
1767 updated = False |
8e8bd5bb2f90
evolve: declare updated and pctx variables in stopevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3825
diff
changeset
|
1768 pctx = None |
5029
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1769 divrelocated = evolvestate.get(b'relocated-div') |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1770 otherrelocated = evolvestate.get(b'relocated-other') |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1771 strips = [] |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1772 if divrelocated: |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1773 strips.append(divrelocated) |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1774 if otherrelocated: |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1775 strips.append(otherrelocated) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1776 if (evolvestate[b'command'] == b'evolve' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1777 and evolvestate[b'category'] == b'contentdivergent' |
5029
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1778 and strips): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1779 oldother = evolvestate[b'old-other'] |
5029
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1780 olddiv = evolvestate[b'old-divergent'] |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1781 if olddiv: |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1782 with repo.wlock(), repo.lock(): |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1783 repo = repo.unfiltered() |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1784 hg.updaterepo(repo, olddiv, True) |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1785 repair.strip(ui, repo, strips, False) |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1786 updated = True |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1787 pctx = repo[olddiv] |
421b295e32b4
evolve: add logic to cover --stop when "divergent" relocation in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5022
diff
changeset
|
1788 elif oldother: |
3827
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1789 with repo.wlock(), repo.lock(): |
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1790 repo = repo.unfiltered() |
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1791 hg.updaterepo(repo, oldother, True) |
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1792 repair.strip(ui, repo, strips, False) |
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1793 updated = True |
82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3826
diff
changeset
|
1794 pctx = repo[oldother] |
3826
8e8bd5bb2f90
evolve: declare updated and pctx variables in stopevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3825
diff
changeset
|
1795 if not updated: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1796 pctx = repo[b'.'] |
3826
8e8bd5bb2f90
evolve: declare updated and pctx variables in stopevolve()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3825
diff
changeset
|
1797 hg.updaterepo(repo, pctx.node(), True) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1798 ui.status(_(b'stopped the interrupted evolve\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1799 ui.status(_(b'working directory is now at %s\n') % pctx) |
3824
a8f509981d30
evolve: factor out logic for --stop flag in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3822
diff
changeset
|
1800 |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1801 def abortevolve(ui, repo, evolvestate): |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1802 """ logic for handling of `hg evolve --abort`""" |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1803 |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1804 with repo.wlock(), repo.lock(): |
3757
2bc60fcac354
evolve: make `--abort` strip the temporary revs created during resolution
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3756
diff
changeset
|
1805 repo = repo.unfiltered() |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1806 evolvedctx = [] |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1807 # boolean value to say whether we should strip or not |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1808 cleanup = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1809 startnode = evolvestate[b'startnode'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1810 for old, new in evolvestate[b'replacements'].items(): |
3755
a19703c6d2bb
evolve: check for None before adding in set of revisions to strip
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3754
diff
changeset
|
1811 if new: |
a19703c6d2bb
evolve: check for None before adding in set of revisions to strip
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3754
diff
changeset
|
1812 evolvedctx.append(repo[new]) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1813 for temp in evolvestate[b'temprevs']: |
3757
2bc60fcac354
evolve: make `--abort` strip the temporary revs created during resolution
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3756
diff
changeset
|
1814 if temp: |
2bc60fcac354
evolve: make `--abort` strip the temporary revs created during resolution
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3756
diff
changeset
|
1815 evolvedctx.append(repo[temp]) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1816 evolvedrevs = [c.rev() for c in evolvedctx] |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1817 |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1818 # checking if phase changed of any of the evolved rev |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1819 immutable = [c for c in evolvedctx if not c.mutable()] |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1820 if immutable: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1821 repo.ui.warn(_(b"cannot clean up public changesets: %s\n") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1822 % b', '.join(bytes(c) for c in immutable), |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1823 hint=_(b"see 'hg help phases' for details")) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1824 cleanup = False |
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1825 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1826 # checking no new changesets are created on evolved revs |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1827 descendants = set() |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1828 if evolvedrevs: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1829 descendants = set(repo.changelog.descendants(evolvedrevs)) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1830 if descendants - set(evolvedrevs): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1831 repo.ui.warn(_(b"warning: new changesets detected on destination " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1832 b"branch\n")) |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1833 cleanup = False |
3832
fb821ed44f86
evolve: strip the extra obsmarkers if any on `hg evolve --abort`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3831
diff
changeset
|
1834 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1835 # finding the indices of the obsmarkers to be stripped and stripping |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1836 # them |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1837 if evolvestate[b'obsmarkers']: |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1838 stripmarkers = set() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1839 for m in evolvestate[b'obsmarkers']: |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1840 m = (m[0], m[1]) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1841 stripmarkers.add(m) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1842 indices = [] |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1843 allmarkers = obsutil.getmarkers(repo) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1844 for i, m in enumerate(allmarkers): |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1845 marker = (m.prednode(), m.succnodes()[0]) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1846 if marker in stripmarkers: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1847 indices.append(i) |
3832
fb821ed44f86
evolve: strip the extra obsmarkers if any on `hg evolve --abort`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3831
diff
changeset
|
1848 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1849 repair.deleteobsmarkers(repo.obsstore, indices) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1850 repo.ui.debug(b'deleted %d obsmarkers\n' % len(indices)) |
3832
fb821ed44f86
evolve: strip the extra obsmarkers if any on `hg evolve --abort`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3831
diff
changeset
|
1851 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1852 if cleanup: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1853 if evolvedrevs: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1854 strippoints = [c.node() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1855 for c in repo.set(b'roots(%ld)', evolvedrevs)] |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1856 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1857 # updating the working directory |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1858 hg.updaterepo(repo, startnode, True) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1859 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1860 # Strip from the first evolved revision |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1861 if evolvedrevs: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1862 # no backup of evolved cset versions needed |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1863 repair.strip(repo.ui, repo, strippoints, False) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1864 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1865 with repo.transaction(b'evolve') as tr: |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1866 # restoring bookmarks at there original place |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1867 bmchanges = evolvestate[b'bookmarkchanges'] |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1868 if bmchanges: |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1869 repo._bookmarks.applychanges(repo, tr, bmchanges) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1870 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1871 evolvestate.delete() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1872 ui.status(_(b'evolve aborted\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1873 ui.status(_(b'working directory is now at %s\n') |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1874 % nodemod.hex(startnode)[:12]) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1875 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1876 raise error.Abort(_(b"unable to abort interrupted evolve, use 'hg " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1877 b"evolve --stop' to stop evolve")) |
3653
d9682c41ea2f
evolve: restore bookmarks correctly after `hg evolve --abort`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3649
diff
changeset
|
1878 |
4798
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1879 def hgabortevolve(ui, repo): |
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1880 """logic for aborting evolve using 'hg abort'""" |
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1881 with repo.wlock(), repo.lock(): |
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1882 evolvestate = state.cmdstate(repo) |
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1883 evolvestate.load() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1884 if evolvestate[b'command'] != b'evolve': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1885 pctx = repo[b'.'] |
4798
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1886 hg.updaterepo(repo, pctx.node(), True) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1887 ui.status(_(b'evolve aborted\n')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1888 ui.status(_(b'working directory is now at %s\n') |
4798
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1889 % pctx.hex()[:12]) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1890 evolvestate.delete() |
4798
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1891 return 0 |
2e14a9386316
abort: added support for evolve to hg abort
Taapas Agrawal <taapas2897@gmail.com>
parents:
4797
diff
changeset
|
1892 return abortevolve(ui, repo, evolvestate) |
3642
319b1f0f4de2
evolve: add a `--abort` flag for `hg evolve` command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3640
diff
changeset
|
1893 |
4603
8cc329d705f9
evolve: add progress support for --continue
Martin von Zweigbergk <martinvonz@google.com>
parents:
4602
diff
changeset
|
1894 def continueevolve(ui, repo, evolvestate): |
3554
f045fafd3484
evolve: move the logic of continuation handling of `hg evolve` in own fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3545
diff
changeset
|
1895 """logic for handling of `hg evolve --continue`""" |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
1896 |
5431
b34af5087714
compat: compatibility for mergestate being a separate module in 5.5
Anton Shestakov <av6@dwimlabs.net>
parents:
5297
diff
changeset
|
1897 ms = compat.mergestate.read(repo) |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1898 mergeutil.checkunresolved(ms) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1899 if (evolvestate[b'command'] == b'next' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1900 or evolvestate[b'category'] == b'orphan'): |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1901 _completeorphan(ui, repo, evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1902 elif evolvestate[b'category'] == b'phasedivergent': |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1903 _completephasedivergent(ui, repo, evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1904 elif evolvestate[b'category'] == b'contentdivergent': |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1905 _continuecontentdivergent(ui, repo, evolvestate, None) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1906 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1907 repo.ui.status(_(b"continuing interrupted '%s' resolution is not yet" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1908 b" supported\n") % evolvestate[b'category']) |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1909 return |
3554
f045fafd3484
evolve: move the logic of continuation handling of `hg evolve` in own fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3545
diff
changeset
|
1910 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1911 # make sure we are continuing evolve and not `hg next --evolve` |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1912 if evolvestate[b'command'] != b'evolve': |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1913 return |
4589
5ba885e2ef5e
evolve: reduce indentation with an early return statement
Martin von Zweigbergk <martinvonz@google.com>
parents:
4588
diff
changeset
|
1914 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1915 # Progress handling |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1916 seen = 1 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1917 count = len(evolvestate[b'revs']) |
4603
8cc329d705f9
evolve: add progress support for --continue
Martin von Zweigbergk <martinvonz@google.com>
parents:
4602
diff
changeset
|
1918 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1919 def progresscb(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1920 compat.progress(ui, _(b'evolve'), seen, unit=_(b'changesets'), |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1921 total=count) |
4603
8cc329d705f9
evolve: add progress support for --continue
Martin von Zweigbergk <martinvonz@google.com>
parents:
4602
diff
changeset
|
1922 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1923 category = evolvestate[b'category'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1924 confirm = evolvestate[b'confirm'] |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1925 unfi = repo.unfiltered() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1926 activetopic = getattr(repo, 'currenttopic', b'') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1927 tr = repo.transaction(b"evolve") |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1928 with util.acceptintervention(tr): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1929 for rev in evolvestate[b'revs']: |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1930 # XXX: prevent this lookup by storing nodes instead of revnums |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1931 curctx = unfi[rev] |
4221
db70de7c1698
evolve: use stack template in --continue case also
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4219
diff
changeset
|
1932 |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1933 # check if we can use stack template |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1934 revtopic = getattr(curctx, 'topic', lambda: b'')() |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1935 topicidx = getattr(curctx, 'topicidx', lambda: None)() |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1936 stacktmplt = False |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1937 if (activetopic and (activetopic == revtopic) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1938 and topicidx is not None): |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1939 stacktmplt = True |
4608
fe22c36b5563
evolve: use single transaction also when continuing
Martin von Zweigbergk <martinvonz@google.com>
parents:
4607
diff
changeset
|
1940 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1941 if (curctx.node() not in evolvestate[b'replacements'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1942 and curctx.node() not in evolvestate[b'skippedrevs']): |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1943 newnode = _solveone(ui, repo, curctx, evolvestate, False, |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1944 confirm, progresscb, category, |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1945 stacktmplt=stacktmplt) |
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1946 if newnode[0]: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1947 evolvestate[b'replacements'][curctx.node()] = newnode[1] |
5510
9fef6f8790a5
evolve: use evolvestate instead of populating a variable in functions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5477
diff
changeset
|
1948 evolvestate[b'lastsolved'] = newnode[1] |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1949 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1950 evolvestate[b'skippedrevs'].append(curctx.node()) |
4797
8c780c3eb116
evolve: fixed lock acquire before checking state
Taapas Agrawal <taapas2897@gmail.com>
parents:
4774
diff
changeset
|
1951 seen += 1 |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
1952 |
3822
cb060c408b41
evolve: move logic to continue interrupted content-div resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3821
diff
changeset
|
1953 def _continuecontentdivergent(ui, repo, evolvestate, progresscb): |
cb060c408b41
evolve: move logic to continue interrupted content-div resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3821
diff
changeset
|
1954 """function to continue the interrupted content-divergence resolution.""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1955 tr = repo.transaction(b'evolve') |
4594
fed1435757ba
evolve: use util.acceptintervention() for closing transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4593
diff
changeset
|
1956 with util.acceptintervention(tr): |
3822
cb060c408b41
evolve: move logic to continue interrupted content-div resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3821
diff
changeset
|
1957 repo = repo.unfiltered() |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1958 divergent = repo[evolvestate[b'divergent']] |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1959 other = repo[evolvestate[b'other-divergent']] |
5552
4c328eb7196e
evolve: add some assertions
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5551
diff
changeset
|
1960 assert divergent != other |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1961 base = repo[evolvestate[b'base']] |
5550
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
1962 resolutionparent = repo[evolvestate.get(b'resolutionparent')] |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1963 if evolvestate[b'relocating-div']: |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1964 newdiv = _completerelocation(ui, repo, evolvestate) |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1965 current = repo[evolvestate[b'current']] |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1966 obsolete.createmarkers(repo, [(current, (repo[newdiv],))], |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1967 operation=b'evolve') |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1968 evolvestate[b'old-divergent'] = divergent.node() |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1969 evolvestate[b'relocating-div'] = False |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1970 evolvestate[b'relocated-div'] = newdiv |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1971 evolvestate[b'temprevs'].append(newdiv) |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1972 evolvestate[b'divergent'] = newdiv |
5517
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
1973 divergent = repo[newdiv] |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1974 |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1975 relocatereq = evolvestate[b'relocation-req'] |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1976 if relocatereq: |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1977 evolvestate[b'relocating-other'] = True |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1978 ui.status(_(b'rebasing "other" content-divergent changeset %s on' |
5550
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
1979 b' %s\n' % (other, resolutionparent))) |
95d00d58885f
evolve: rely on resolutionparent when relocating divergent csets
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5541
diff
changeset
|
1980 newother = _relocatedivergent(repo, other, resolutionparent, |
5285
299d86c15b55
evolve: extract function for relocating divergent commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
5264
diff
changeset
|
1981 evolvestate) |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1982 evolvestate[b'old-other'] = other.node() |
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1983 evolvestate[b'relocating-other'] = False |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1984 evolvestate[b'relocated-other'] = newother |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1985 evolvestate[b'temprevs'].append(newother) |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1986 evolvestate[b'other-divergent'] = newother |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1987 other = repo[newother] |
5557
ca45afafd94f
evolve: update some comments
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5556
diff
changeset
|
1988 # continue the resolution by merging the content-divergent csets |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1989 _mergecontentdivergents(repo, progresscb, divergent, other, |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
1990 base, evolvestate) |
5016
64868b7dc112
evolve: add logic to cover --continue case when relocating "divergent"
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5014
diff
changeset
|
1991 |
5014
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
1992 if evolvestate[b'relocating-other']: |
3881
9cf45b94f977
evolve: continue conflicted relocation content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3879
diff
changeset
|
1993 newother = _completerelocation(ui, repo, evolvestate) |
5516
2a04af930bad
evolve: update "old-other" in evolvestate for --stop functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5515
diff
changeset
|
1994 evolvestate[b'old-other'] = other.node() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1995 current = repo[evolvestate[b'current']] |
3881
9cf45b94f977
evolve: continue conflicted relocation content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3879
diff
changeset
|
1996 obsolete.createmarkers(repo, [(current, (repo[newother],))], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1997 operation=b'evolve') |
5014
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
1998 evolvestate[b'relocating-other'] = False |
35870ce163ee
evolve: use more specific key name to store in evolvestate
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5012
diff
changeset
|
1999 evolvestate[b'relocated-other'] = newother |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2000 evolvestate[b'temprevs'].append(newother) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2001 evolvestate[b'other-divergent'] = newother |
5517
a4c6c63e0ed5
evolve: refactor few lines for clear understanding
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5516
diff
changeset
|
2002 other = repo[newother] |
5557
ca45afafd94f
evolve: update some comments
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5556
diff
changeset
|
2003 # continue the resolution by merging the content-divergent csets |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
2004 _mergecontentdivergents(repo, progresscb, divergent, |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
2005 other, base, evolvestate) |
3881
9cf45b94f977
evolve: continue conflicted relocation content-divergence
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3879
diff
changeset
|
2006 |
5017
b302066725c3
evolve: use meaningful variable names for a return value
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5016
diff
changeset
|
2007 res, newnode = _completecontentdivergent(ui, repo, progresscb, |
5515
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
2008 divergent, other, |
159d6c0c7dbb
evolve: make consistent usage of variable throughout the func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5514
diff
changeset
|
2009 base, evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2010 origdivergent = evolvestate[b'orig-divergent'] |
5017
b302066725c3
evolve: use meaningful variable names for a return value
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5016
diff
changeset
|
2011 evolvestate[b'replacements'][origdivergent] = newnode |
b302066725c3
evolve: use meaningful variable names for a return value
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5016
diff
changeset
|
2012 ret = (res, newnode) |
4384
8993fd4805d0
evolve: update the public divergence resolution logic to cover --continue case
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4383
diff
changeset
|
2013 # logic to continue the public content-divergent |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2014 publicnode = evolvestate.get(b'public-divergent') |
4415
29733c2b0fd3
evolve: rename npublicdiv to publicnode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4414
diff
changeset
|
2015 if publicnode: |
4384
8993fd4805d0
evolve: update the public divergence resolution logic to cover --continue case
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4383
diff
changeset
|
2016 if not res: |
4414
29645d5ba3d9
evolve: in pubdiv resolution make sure that transaction get closed
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4413
diff
changeset
|
2017 # no need to proceed for phase divergence resolution step |
29645d5ba3d9
evolve: in pubdiv resolution make sure that transaction get closed
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4413
diff
changeset
|
2018 pass |
4417
b86413cfca4a
evolve: cover continue case in pubdiv when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4416
diff
changeset
|
2019 elif newnode == publicnode: |
b86413cfca4a
evolve: cover continue case in pubdiv when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4416
diff
changeset
|
2020 # merging had the same changes as public changeset and |
b86413cfca4a
evolve: cover continue case in pubdiv when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4416
diff
changeset
|
2021 # divergence has been resolved by creating markers |
b86413cfca4a
evolve: cover continue case in pubdiv when merging results in same as public
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4416
diff
changeset
|
2022 pass |
4414
29645d5ba3d9
evolve: in pubdiv resolution make sure that transaction get closed
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4413
diff
changeset
|
2023 else: |
4415
29733c2b0fd3
evolve: rename npublicdiv to publicnode
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4414
diff
changeset
|
2024 prec = repo[publicnode] |
4414
29645d5ba3d9
evolve: in pubdiv resolution make sure that transaction get closed
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4413
diff
changeset
|
2025 bumped = repo[newnode] |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
2026 ret = _resolvephasedivergent(ui, repo, prec=prec, bumped=bumped) |
4384
8993fd4805d0
evolve: update the public divergence resolution logic to cover --continue case
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4383
diff
changeset
|
2027 return ret |
3822
cb060c408b41
evolve: move logic to continue interrupted content-div resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3821
diff
changeset
|
2028 |
3633
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2029 def _completephasedivergent(ui, repo, evolvestate): |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2030 """function to complete the interrupted phase-divergence resolution. |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2031 |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2032 First completes the relocation of the commit and then process resolving |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2033 phase-divergence""" |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2034 |
4593
f6b9c409c12e
evolve: use context manager for transactions
Martin von Zweigbergk <martinvonz@google.com>
parents:
4592
diff
changeset
|
2035 # need to start transaction for bookmark changes |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2036 with repo.transaction(b'evolve'): |
3633
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2037 node = _completerelocation(ui, repo, evolvestate) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2038 evolvestate[b'temprevs'].append(node) |
3633
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2039 # resolving conflicts can lead to empty wdir and node can be None in |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2040 # those cases |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2041 ctx = repo[evolvestate[b'current']] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2042 newctx = repo[node] if node is not None else repo[b'.'] |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2043 obsolete.createmarkers(repo, [(ctx, (newctx,))], operation=b'evolve') |
3633
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2044 |
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2045 # now continuing the phase-divergence resolution part |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2046 prec = repo[evolvestate[b'precursor']] |
4466
cc4506838589
evolve: remove tmpctx arg from _resolvephasedivergent()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4465
diff
changeset
|
2047 retvalue = _resolvephasedivergent(ui, repo, prec, newctx) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2048 evolvestate[b'replacements'][ctx.node()] = retvalue[1] |
3633
ed3032ee53eb
evolve: handle interrupted phase-divergence resolution gracefully
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3632
diff
changeset
|
2049 |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2050 def _completeorphan(ui, repo, evolvestate): |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2051 """function to complete the interrupted orphan resolution""" |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2052 |
3630
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2053 node = _completerelocation(ui, repo, evolvestate) |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2054 # resolving conflicts can lead to empty wdir and node can be None in |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2055 # those cases |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2056 ctx = repo[evolvestate[b'current']] |
3636
92a2d3217de9
evolve: show a message when evolution leads to no changes to commit
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3635
diff
changeset
|
2057 if node is None: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2058 repo.ui.status(_(b"evolution of %d:%s created no changes" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2059 b" to commit\n") % (ctx.rev(), ctx)) |
4689
27947b17cfaf
evolve: orphans that evolve into nothing don't need successors (issue5967)
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
2060 replacement = () |
27947b17cfaf
evolve: orphans that evolve into nothing don't need successors (issue5967)
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
2061 else: |
27947b17cfaf
evolve: orphans that evolve into nothing don't need successors (issue5967)
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
2062 replacement = (repo[node],) |
27947b17cfaf
evolve: orphans that evolve into nothing don't need successors (issue5967)
Anton Shestakov <av6@dwimlabs.net>
parents:
4641
diff
changeset
|
2063 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2064 obsolete.createmarkers(repo, [(ctx, replacement)], operation=b'evolve') |
3630
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2065 |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2066 # make sure we are continuing evolve and not `hg next --evolve` |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2067 if evolvestate[b'command'] == b'evolve': |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2068 evolvestate[b'replacements'][ctx.node()] = node |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2069 if evolvestate[b'orphanmerge']: |
3630
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2070 # processing a merge changeset with both parents obsoleted, |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2071 # stabilized on second parent, insert in front of list to |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2072 # re-process to stabilize on first parent |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2073 evolvestate[b'revs'].insert(0, repo[node].rev()) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2074 evolvestate[b'orphanmerge'] = False |
3630
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2075 |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2076 def _completerelocation(ui, repo, evolvestate): |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2077 """function to complete the interrupted relocation of a commit |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2078 return the new node formed |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2079 """ |
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2080 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2081 orig = repo[evolvestate[b'current']] |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2082 ctx = orig |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2083 source = ctx.extra().get(b'source') |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2084 extra = {} |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2085 if source: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2086 extra[b'source'] = source |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2087 extra[b'intermediate-source'] = ctx.hex() |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2088 else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2089 extra[b'source'] = ctx.hex() |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2090 user = ctx.user() |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2091 date = ctx.date() |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2092 message = ctx.description() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2093 ui.status(_(b'evolving %d:%s "%s"\n') % (ctx.rev(), ctx, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2094 message.split(b'\n', 1)[0])) |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2095 targetphase = max(ctx.phase(), phases.draft) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2096 overrides = {(b'phases', b'new-commit'): targetphase} |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2097 |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2098 ctxparents = orig.parents() |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2099 if len(ctxparents) == 2: |
5019
967e9a87e82d
cleanup: replace .parents()[0] by .p1()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5017
diff
changeset
|
2100 currentp1 = repo.dirstate.p1() |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2101 p1obs = ctxparents[0].obsolete() |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2102 p2obs = ctxparents[1].obsolete() |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2103 # asumming that the parent of current wdir is successor of one |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2104 # of p1 or p2 of the original changeset |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2105 if p1obs and not p2obs: |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2106 # p1 is obsolete and p2 is not obsolete, current working |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2107 # directory parent should be successor of p1, so we should |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2108 # set dirstate parents to (succ of p1, p2) |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
2109 with repo.dirstate.parentchange(), compat.parentchange(repo): |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2110 repo.dirstate.setparents(currentp1, |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2111 ctxparents[1].node()) |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2112 elif p2obs and not p1obs: |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2113 # p2 is obsolete and p1 is not obsolete, current working |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2114 # directory parent should be successor of p2, so we should |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2115 # set dirstate parents to (succ of p2, p1) |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
2116 with repo.dirstate.parentchange(), compat.parentchange(repo): |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2117 repo.dirstate.setparents(ctxparents[0].node(), |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2118 currentp1) |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2119 |
5476
d542e9720b1e
orphan: fix buggy case of try resolving orphan merge two times
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5474
diff
changeset
|
2120 elif p1obs and p2obs: |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2121 # both the parents were obsoleted, if orphanmerge is set, we |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2122 # are processing the second parent first (to keep parent order) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2123 if evolvestate.get(b'orphanmerge'): |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
2124 with repo.dirstate.parentchange(), compat.parentchange(repo): |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2125 repo.dirstate.setparents(ctxparents[0].node(), |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2126 currentp1) |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2127 pass |
3978
fb8e44c70798
evolve: set the second parent if we get conflicts while evolving
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
3977
diff
changeset
|
2128 else: |
5096
6742ce189373
compat: add a context manager that calls _quick_access_changeid_invalidate()
Anton Shestakov <av6@dwimlabs.net>
parents:
5095
diff
changeset
|
2129 with repo.dirstate.parentchange(), compat.parentchange(repo): |
5019
967e9a87e82d
cleanup: replace .parents()[0] by .p1()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5017
diff
changeset
|
2130 repo.dirstate.setparents(repo.dirstate.p1(), nodemod.nullid) |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2131 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
2132 with repo.ui.configoverride(overrides, b'evolve-continue'): |
3629
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2133 node = repo.commit(text=message, user=user, |
f23946bf6625
evolve: move logic to complete interrupted orphan resolution to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3628
diff
changeset
|
2134 date=date, extra=extra) |
3630
2789c0ec2ad7
evolve: move logic to complete interrupted relocation to new fn
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3629
diff
changeset
|
2135 return node |