author | Sushil khanchi <sushilkhanchi97@gmail.com> |
Mon, 23 Dec 2019 01:03:45 +0530 | |
changeset 5236 | 6c0797ec50b6 |
parent 5234 | ea3f9e171b9a |
permissions | -rw-r--r-- |
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 |
# Module dedicated to host utility code dedicated to changeset rewrite |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
# |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 |
# Copyright 2017 Octobus <contact@octobus.net> |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
# |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
|
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 |
# Status: Stabilization of the API in progress |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 |
# |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 |
# The content of this module should move into core incrementally once we are |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 |
# happy one piece of it (and hopefully, able to reuse it in other core |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 |
# commands). |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 |
|
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
14 |
from mercurial import ( |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
15 |
cmdutil, |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
16 |
commands, |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
17 |
context, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
18 |
copies, |
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
19 |
error, |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
20 |
hg, |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
21 |
lock as lockmod, |
2780
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
22 |
node, |
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
23 |
obsolete, |
5038
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
24 |
obsutil, |
5233
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
25 |
phases, |
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
26 |
revset, |
3506
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3298
diff
changeset
|
27 |
util, |
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
28 |
) |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
29 |
|
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
30 |
from mercurial.i18n import _ |
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
31 |
|
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
32 |
from . import ( |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
33 |
compat, |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 |
) |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 |
|
2780
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
36 |
def _formatrevs(repo, revs, maxrevs=4): |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
37 |
"""return a string summarising revision in a descent size |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
38 |
|
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
39 |
If there is few enough revision, we list them otherwise we display a |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
40 |
summary in the form: |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
41 |
|
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
42 |
1ea73414a91b and 5 others |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
43 |
""" |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
44 |
tonode = repo.changelog.node |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
45 |
numrevs = len(revs) |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
46 |
if numrevs < maxrevs: |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
47 |
shorts = [node.short(tonode(r)) for r in revs] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
48 |
summary = b', '.join(shorts) |
2780
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
49 |
else: |
3151
41c72b6e8568
compat: drop compat code for smartrevs.first
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2785
diff
changeset
|
50 |
first = revs.first() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
51 |
summary = _(b'%s and %d others') |
2780
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
52 |
summary %= (node.short(tonode(first)), numrevs - 1) |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
53 |
return summary |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
54 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
55 |
def precheck(repo, revs, action=b'rewrite'): |
2777
7d86d88b2fa8
rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2765
diff
changeset
|
56 |
"""check if <revs> can be rewritten |
7d86d88b2fa8
rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2765
diff
changeset
|
57 |
|
7d86d88b2fa8
rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2765
diff
changeset
|
58 |
<action> can be used to control the commit message. |
7d86d88b2fa8
rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2765
diff
changeset
|
59 |
""" |
2785
b5a48e4aeec6
precheck: handle rewrite attempt of nullrev
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2784
diff
changeset
|
60 |
if node.nullrev in revs: |
5236
6c0797ec50b6
evolve: add quotes around the action in msg of pre-checking
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5234
diff
changeset
|
61 |
msg = _(b"cannot '%s' the null revision") % (action) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
62 |
hint = _(b"no changeset checked out") |
2785
b5a48e4aeec6
precheck: handle rewrite attempt of nullrev
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2784
diff
changeset
|
63 |
raise error.Abort(msg, hint=hint) |
3506
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3298
diff
changeset
|
64 |
if any(util.safehasattr(r, 'rev') for r in revs): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
65 |
msg = b"rewriteutil.precheck called with ctx not revs" |
3506
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3298
diff
changeset
|
66 |
repo.ui.develwarn(msg) |
6b4272bbb65d
evolve: update code for not implicitly converting ctx to revision
Boris Feld <boris.feld@octobus.net>
parents:
3298
diff
changeset
|
67 |
revs = (r.rev() for r in revs) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
68 |
publicrevs = repo.revs(b'%ld and public()', revs) |
2780
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
69 |
if publicrevs: |
58e4b51ee902
prefetc: point at the offending changeset when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2779
diff
changeset
|
70 |
summary = _formatrevs(repo, publicrevs) |
5236
6c0797ec50b6
evolve: add quotes around the action in msg of pre-checking
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5234
diff
changeset
|
71 |
msg = _(b"cannot '%s' public changesets: %s") % (action, summary) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
72 |
hint = _(b"see 'hg help phases' for details") |
2779
f51efb2bb8c9
precheck: point to 'phase' help when aborting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2778
diff
changeset
|
73 |
raise error.Abort(msg, hint=hint) |
2781
78b0c6053139
precheck: also check for unstability creation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2780
diff
changeset
|
74 |
newunstable = disallowednewunstable(repo, revs) |
78b0c6053139
precheck: also check for unstability creation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2780
diff
changeset
|
75 |
if newunstable: |
5234
ea3f9e171b9a
evolve: update the pre-check message for risk of orphans
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5233
diff
changeset
|
76 |
msg = _(b"performing '%s' in the middle of a stack will orphan %s") |
ea3f9e171b9a
evolve: update the pre-check message for risk of orphans
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5233
diff
changeset
|
77 |
if len(newunstable) > 1: |
ea3f9e171b9a
evolve: update the pre-check message for risk of orphans
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5233
diff
changeset
|
78 |
msg += (b" and its %d descendants") % (len(newunstable) - 1) |
ea3f9e171b9a
evolve: update the pre-check message for risk of orphans
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5233
diff
changeset
|
79 |
msg %= (action, repo[newunstable.first()]) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
80 |
hint = _(b"see 'hg help evolution.instability'") |
2781
78b0c6053139
precheck: also check for unstability creation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2780
diff
changeset
|
81 |
raise error.Abort(msg, hint=hint) |
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
82 |
divrisk = revs_hascontentdivrisk(repo, revs) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
83 |
allowdivergence = repo.ui.configbool(b'experimental', |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
84 |
b'evolution.allowdivergence') |
5233
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
85 |
divhint = _(b"For more, see 'hg help evolution.instability'") |
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
86 |
if divrisk and not allowdivergence: |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
87 |
msg = _(b"revision being rewritten or one of its precursor was " |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
88 |
b"rewritten as %s, performing '%s' will create " |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
89 |
b"content-divergence") % (repo[divrisk[0]], action) |
5233
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
90 |
raise error.Abort(msg, hint=divhint) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
91 |
pdivrisk = phasedivrisk(repo, revs) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
92 |
if pdivrisk and not allowdivergence: |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
93 |
msg = _(b"revision being rewritten has a public predecessor %s, " |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
94 |
b"performing '%s' will create phase-divergence") |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
95 |
msg = msg % (repo[pdivrisk[0]], action) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
96 |
raise error.Abort(msg, hint=divhint) |
2777
7d86d88b2fa8
rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2765
diff
changeset
|
97 |
|
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
98 |
def bookmarksupdater(repo, oldid, tr): |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
99 |
"""Return a callable update(newid) updating the current bookmark |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
100 |
and bookmarks bound to oldid to newid. |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 |
""" |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
102 |
def updatebookmarks(newid): |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
103 |
oldbookmarks = repo.nodebookmarks(oldid) |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
104 |
bmchanges = [(b, newid) for b in oldbookmarks] |
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
105 |
if bmchanges: |
3699
67d6cc7e0979
compat: drop compatibility layer for bookmark.applychanges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3506
diff
changeset
|
106 |
repo._bookmarks.applychanges(repo, tr, bmchanges) |
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
107 |
return updatebookmarks |
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
108 |
|
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
109 |
def revs_hascontentdivrisk(repo, revs): |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
110 |
obsrevs = repo.revs(b'%ld and obsolete()', revs) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
111 |
for r in obsrevs: |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
112 |
div = contentdivrisk(repo, repo[r]) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
113 |
if div: |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
114 |
return div |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
115 |
return [] |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
116 |
|
2757
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
117 |
def disallowednewunstable(repo, revs): |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
118 |
"""Check that editing <revs> will not create disallowed unstable |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
119 |
|
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
120 |
(unstable creation is controled by some special config). |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
121 |
""" |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
122 |
allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
123 |
if allowunstable: |
2878c8a686ab
rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2756
diff
changeset
|
124 |
return revset.baseset() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
125 |
return repo.revs(b"(%ld::) - %ld", revs, revs) |
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
126 |
|
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
127 |
def foldcheck(repo, revs): |
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
128 |
"""check that <revs> can be folded""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
129 |
precheck(repo, revs, action=b'fold') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
130 |
roots = repo.revs(b'roots(%ld)', revs) |
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
131 |
if len(roots) > 1: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
132 |
raise error.Abort(_(b"cannot fold non-linear revisions " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
133 |
b"(multiple roots given)")) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
134 |
heads = repo.revs(b'heads(%ld)', revs) |
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
135 |
if len(heads) > 1: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
136 |
raise error.Abort(_(b"cannot fold non-linear revisions " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
137 |
b"(multiple heads given)")) |
2758
684feae20be5
rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2757
diff
changeset
|
138 |
head = repo[heads.first()] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
139 |
baseparents = repo.revs(b'parents(%ld) - %ld', revs, revs) |
4723
41885988921e
fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents:
4714
diff
changeset
|
140 |
if len(baseparents) > 2: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
141 |
raise error.Abort(_(b"cannot fold revisions that merge with more than " |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
142 |
b"one external changeset (not in revisions)")) |
4845
6f5d3f58fbe4
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
143 |
if not repo.ui.configbool(b'experimental', b'evolution.allowdivergence'): |
6f5d3f58fbe4
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
144 |
obsolete = repo.revs(b'%ld and obsolete()', revs) |
4841
95d2b5440731
rewriteutil: move allowdivergence check to foldcheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
4723
diff
changeset
|
145 |
if obsolete: |
4845
6f5d3f58fbe4
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
146 |
msg = _(b'folding obsolete revisions may cause divergence') |
6f5d3f58fbe4
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
147 |
hint = _(b'set experimental.evolution.allowdivergence=yes' |
6f5d3f58fbe4
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
148 |
b' to allow folding them') |
4841
95d2b5440731
rewriteutil: move allowdivergence check to foldcheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
4723
diff
changeset
|
149 |
raise error.Abort(msg, hint=hint) |
5231
9d05eb69cd05
evolve: remove a check which is already done by rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5230
diff
changeset
|
150 |
root = repo[roots.first()] |
4723
41885988921e
fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents:
4714
diff
changeset
|
151 |
# root's p1 is already used as the target ctx p1 |
41885988921e
fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents:
4714
diff
changeset
|
152 |
baseparents -= {root.p1().rev()} |
41885988921e
fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents:
4714
diff
changeset
|
153 |
p2 = repo[baseparents.first()] |
41885988921e
fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents:
4714
diff
changeset
|
154 |
return root, head, p2 |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
155 |
|
2765
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
156 |
def deletebookmark(repo, repomarks, bookmarks): |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
157 |
wlock = lock = tr = None |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
158 |
try: |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
159 |
wlock = repo.wlock() |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
160 |
lock = repo.lock() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
161 |
tr = repo.transaction(b'prune') |
2765
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
162 |
bmchanges = [] |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
163 |
for bookmark in bookmarks: |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
164 |
bmchanges.append((bookmark, None)) |
3699
67d6cc7e0979
compat: drop compatibility layer for bookmark.applychanges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3506
diff
changeset
|
165 |
repo._bookmarks.applychanges(repo, tr, bmchanges) |
2765
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
166 |
tr.close() |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
167 |
for bookmark in sorted(bookmarks): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
168 |
repo.ui.write(_(b"bookmark '%s' deleted\n") % bookmark) |
2765
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
169 |
finally: |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
170 |
lockmod.release(tr, lock, wlock) |
8a2e1aac6b41
rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2764
diff
changeset
|
171 |
|
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
172 |
def presplitupdate(repo, ui, prev, ctx): |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
173 |
"""prepare the working directory for a split (for topic hooking) |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
174 |
""" |
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
175 |
hg.update(repo, prev) |
3751
a1a0cfbffd30
evolve: pass revisions as strings to commands.*()
Martin von Zweigbergk <martinvonz@google.com>
parents:
3699
diff
changeset
|
176 |
commands.revert(ui, repo, rev=ctx.hex(), all=True) |
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2759
diff
changeset
|
177 |
|
2764
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
178 |
def reachablefrombookmark(repo, revs, bookmarks): |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
179 |
"""filter revisions and bookmarks reachable from the given bookmark |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
180 |
yoinked from mq.py |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
181 |
""" |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
182 |
repomarks = repo._bookmarks |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
183 |
if not bookmarks.issubset(repomarks): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
184 |
raise error.Abort(_(b"bookmark '%s' not found") % |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
185 |
b','.join(sorted(bookmarks - set(repomarks.keys())))) |
2764
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
186 |
|
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
187 |
# If the requested bookmark is not the only one pointing to a |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
188 |
# a revision we have to only delete the bookmark and not strip |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
189 |
# anything. revsets cannot detect that case. |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
190 |
nodetobookmarks = {} |
4714
c51fc0ae7a7e
py3: switch from iteritems() to items()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4710
diff
changeset
|
191 |
for mark, bnode in repomarks.items(): |
2764
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
192 |
nodetobookmarks.setdefault(bnode, []).append(mark) |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
193 |
for marks in nodetobookmarks.values(): |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
194 |
if bookmarks.issuperset(marks): |
3767
115caa4e5278
evolve: add compat for repair.stripbmrevset which is moved to scmutil
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3751
diff
changeset
|
195 |
rsrevs = compat.bmrevset(repo, marks[0]) |
2764
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
196 |
revs = set(revs) |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
197 |
revs.update(set(rsrevs)) |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
198 |
revs = sorted(revs) |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
199 |
return repomarks, revs |
a4a6f4128be5
rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
200 |
|
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
201 |
def rewrite(repo, old, updates, head, newbases, commitopts): |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
202 |
"""Return (nodeid, created) where nodeid is the identifier of the |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
203 |
changeset generated by the rewrite process, and created is True if |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
204 |
nodeid was actually created. If created is False, nodeid |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
205 |
references a changeset existing before the rewrite call. |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
206 |
""" |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
207 |
wlock = lock = tr = None |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
208 |
try: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
209 |
wlock = repo.wlock() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
210 |
lock = repo.lock() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
211 |
tr = repo.transaction(b'rewrite') |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
212 |
base = old.p1() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
213 |
updatebookmarks = bookmarksupdater(repo, old.node(), tr) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
214 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
215 |
# commit a new version of the old changeset, including the update |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
216 |
# collect all files which might be affected |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
217 |
files = set(old.files()) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
218 |
for u in updates: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
219 |
files.update(u.files()) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
220 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
221 |
# Recompute copies (avoid recording a -> b -> a) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
222 |
copied = copies.pathcopies(base, head) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
223 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
224 |
# prune files which were reverted by the updates |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
225 |
def samefile(f): |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
226 |
if f in head.manifest(): |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
227 |
a = head.filectx(f) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
228 |
if f in base.manifest(): |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
229 |
b = base.filectx(f) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
230 |
return (a.data() == b.data() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
231 |
and a.flags() == b.flags()) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
232 |
else: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
233 |
return False |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
234 |
else: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
235 |
return f not in base.manifest() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
236 |
files = [f for f in files if not samefile(f)] |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
237 |
# commit version of these files as defined by head |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
238 |
headmf = head.manifest() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
239 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
240 |
def filectxfn(repo, ctx, path): |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
241 |
if path in headmf: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
242 |
fctx = head[path] |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
243 |
flags = fctx.flags() |
3298
f4b06f44d274
memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents:
3151
diff
changeset
|
244 |
mctx = compat.memfilectx(repo, ctx, fctx, flags, copied, path) |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
245 |
return mctx |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
246 |
return None |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
247 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
248 |
message = cmdutil.logmessage(repo.ui, commitopts) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
249 |
if not message: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
250 |
message = old.description() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
251 |
|
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4723
diff
changeset
|
252 |
user = commitopts.get(b'user') or old.user() |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
253 |
# TODO: In case not date is given, we should take the old commit date |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
254 |
# if we are working one one changeset or mimic the fold behavior about |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
255 |
# date |
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4723
diff
changeset
|
256 |
date = commitopts.get(b'date') or None |
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4723
diff
changeset
|
257 |
extra = dict(commitopts.get(b'extra', old.extra())) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
258 |
extra[b'branch'] = head.branch() |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
259 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
260 |
new = context.memctx(repo, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
261 |
parents=newbases, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
262 |
text=message, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
263 |
files=files, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
264 |
filectxfn=filectxfn, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
265 |
user=user, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
266 |
date=date, |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
267 |
extra=extra) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
268 |
|
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4723
diff
changeset
|
269 |
if commitopts.get(b'edit'): |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
270 |
new._text = cmdutil.commitforceeditor(repo, new, []) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
271 |
revcount = len(repo) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
272 |
newid = repo.commitctx(new) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
273 |
new = repo[newid] |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
274 |
created = len(repo) != revcount |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
275 |
updatebookmarks(newid) |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
276 |
|
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
277 |
tr.close() |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
278 |
return newid, created |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
279 |
finally: |
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
280 |
lockmod.release(tr, lock, wlock) |
5038
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
281 |
|
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
282 |
def contentdivrisk(repo, ctx): |
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
283 |
"""return divergent revision if rewriting an obsolete cset (ctx) will |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
284 |
create divergence""" |
5038
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
285 |
# We need to check two cases that can cause divergence: |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
286 |
# case 1: the rev being rewritten has a non-obsolete successor (easily |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
287 |
# detected by successorssets) |
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
288 |
divergent = [] |
5038
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
289 |
sset = obsutil.successorssets(repo, ctx.node()) |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
290 |
nodivergencerisk = (len(sset) == 0 |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
291 |
or (len(sset) == 1 |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
292 |
and len(sset[0]) == 1 |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
293 |
and repo[sset[0][0]].rev() == ctx.rev() |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
294 |
)) |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
295 |
if nodivergencerisk: |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
296 |
# case 2: one of the precursors of the rev being revived has a |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
297 |
# non-obsolete successor (we need divergentsets for this) |
f583d9eedbce
evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4845
diff
changeset
|
298 |
from . import evolvecmd |
5230
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
299 |
divsets = evolvecmd.divergentsets(repo, ctx) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
300 |
if divsets: |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
301 |
nsuccset = divsets[0][b'divergentnodes'] |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
302 |
divergent.append(nsuccset[0][0]) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
303 |
else: |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
304 |
divergent.append(sset[0][0]) |
39d282fd04e0
evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5038
diff
changeset
|
305 |
return divergent |
5233
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
306 |
|
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
307 |
def phasedivrisk(repo, revs): |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
308 |
"""return public predecessor of a revision if rewriting that revision will |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
309 |
create phase-divergence. |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
310 |
|
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
311 |
this method has similar logic as obsolete._computephasedivergentset |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
312 |
except that here we are looking into obsolete revs""" |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
313 |
obsrevs = repo.revs(b'%ld and obsolete()', revs) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
314 |
obsstore = repo.obsstore |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
315 |
phase = repo._phasecache.phase |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
316 |
public = phases.public |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
317 |
cl = repo.changelog |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
318 |
torev = compat.getgetrev(cl) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
319 |
tonode = cl.node |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
320 |
obsnodes = list(map(tonode, obsrevs)) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
321 |
for pnode in obsutil.allpredecessors(obsstore, obsnodes): |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
322 |
prev = torev(pnode) |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
323 |
if (prev is not None) and (phase(repo, prev) <= public): |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
324 |
# we have a public predecessor |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
325 |
return [prev] |
efd1aa8c313c
evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
5231
diff
changeset
|
326 |
return [] |