hgext3rd/evolve/rewriteutil.py
author Sushil khanchi <sushilkhanchi97@gmail.com>
Sun, 10 Nov 2019 16:32:34 +0530
changeset 5243 e08900cf4b8b
parent 5083 e50f4fc6cc6d
permissions -rw-r--r--
evolve: add pre-check logic for creation of phase divergence locally Changes in tests reflect the added behaviour.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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,
5243
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
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:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4803
diff changeset
    61
        msg = _(b"cannot %s the null revision") % (action)
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)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4803
diff changeset
    71
        msg = _(b"cannot %s public changesets: %s") % (action, summary)
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:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4803
diff changeset
    76
        msg = _(b"%s will orphan %i descendants")
2784
d17d193c4145 precheck: update the orphan message to something me generic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2783
diff changeset
    77
        msg %= (action, len(newunstable))
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4803
diff changeset
    78
        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
    79
        raise error.Abort(msg, hint=hint)
5079
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    80
    divrisk = revs_hascontentdivrisk(repo, revs)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    81
    allowdivergence = repo.ui.configbool(b'experimental',
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    82
                                         b'evolution.allowdivergence')
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    83
    if divrisk and not allowdivergence:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    84
        localdiv = repo[divrisk[0]]
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    85
        otherdiv, base = repo[divrisk[1][0]], repo[divrisk[1][1]]
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    86
        msg = _(b"%s of %s creates content-divergence "
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    87
                b"with %s") % (action, localdiv, otherdiv)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    88
        if localdiv.rev() != base.rev():
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    89
            msg += _(b', from %s') % base
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    90
        hint = _(b"add --verbose for details or see "
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    91
                 b"'hg help evolution.instability'")
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    92
        if repo.ui.verbose:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    93
            if localdiv.rev() != base.rev():
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    94
                msg += _(b'\n    changeset %s is an evolution of '
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    95
                         b'changeset %s') % (localdiv, base)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    96
            msg += _(b'\n    changeset %s already have a successors as '
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    97
                     b'changeset %s\n'
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    98
                     b'    rewriting changeset %s would create '
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
    99
                     b'"content-divergence"\n'
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   100
                     b'    set experimental.evolution.allowdivergence=True to '
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   101
                     b'overwrite this check') % (base, otherdiv, localdiv)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   102
            hint = _(b"see 'hg help evolution.instability' for details "
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   103
                     b"on content-divergence")
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   104
        raise error.Abort(msg, hint=hint)
5243
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   105
    pdivrisk = precheck_phasediv(repo, revs)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   106
    if pdivrisk and not allowdivergence:
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   107
        rev, pred = repo[pdivrisk[0]], repo[pdivrisk[1]]
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   108
        msg = _(b'%s of %s creates phase-divergence '
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   109
                b'with %s') % (action, rev, pred)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   110
        hint = _(b"add --verbose for details or see "
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   111
                 b"'hg help evolution.instability'")
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   112
        if repo.ui.verbose:
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   113
            msg += _(b'\n    changeset %s has a public predecessor as %s\n'
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   114
                     b'    rewritting changeset %s would create '
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   115
                     b'phase-divergence\n'
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   116
                     b'    set experimental.evolution.allowdivergence=True to '
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   117
                     b'overwrite this check') % (rev, pred, rev)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   118
            hint = _(b"see 'hg help evolution.instability' for details "
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   119
                     b"on phase-divergence")
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   120
        raise error.Abort(msg, hint=hint)
2777
7d86d88b2fa8 rewriteutil: add a precheck function to validate rewrite beforehand
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2765
diff changeset
   121
2756
f4dd6e6d4c73 rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   122
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
   123
    """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
   124
    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
   125
    """
f4dd6e6d4c73 rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   126
    def updatebookmarks(newid):
f4dd6e6d4c73 rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
   127
        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
   128
        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
   129
        if bmchanges:
3699
67d6cc7e0979 compat: drop compatibility layer for bookmark.applychanges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3506
diff changeset
   130
            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
   131
    return updatebookmarks
2757
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   132
5079
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   133
def revs_hascontentdivrisk(repo, revs):
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   134
    obsrevs = repo.revs(b'%ld and obsolete()', revs)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   135
    for r in obsrevs:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   136
        div = precheck_contentdiv(repo, repo[r])
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   137
        if div:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   138
            return [r, div]
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   139
    return []
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   140
2757
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   141
def disallowednewunstable(repo, revs):
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   142
    """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
   143
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   144
    (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
   145
    """
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   146
    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
   147
    if allowunstable:
2878c8a686ab rewriteutil: move disallowednewunstable in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2756
diff changeset
   148
        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
   149
    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
   150
684feae20be5 rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2757
diff changeset
   151
def foldcheck(repo, revs):
684feae20be5 rewriteutil: move 'foldcheck' to the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2757
diff changeset
   152
    """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
   153
    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
   154
    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
   155
    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
   156
        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
   157
                            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
   158
    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
   159
    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
   160
        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
   161
                            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
   162
    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
   163
    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
   164
    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
   165
        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
   166
                            b"one external changeset (not in revisions)"))
4845
6f5d3f58fbe4 branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4814 4841
diff changeset
   167
    if not repo.ui.configbool(b'experimental', b'evolution.allowdivergence'):
6f5d3f58fbe4 branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4814 4841
diff changeset
   168
        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
   169
        if obsolete:
4845
6f5d3f58fbe4 branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4814 4841
diff changeset
   170
            msg = _(b'folding obsolete revisions may cause divergence')
6f5d3f58fbe4 branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4814 4841
diff changeset
   171
            hint = _(b'set experimental.evolution.allowdivergence=yes'
6f5d3f58fbe4 branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4814 4841
diff changeset
   172
                     b' to allow folding them')
4841
95d2b5440731 rewriteutil: move allowdivergence check to foldcheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 4723
diff changeset
   173
            raise error.Abort(msg, hint=hint)
5083
e50f4fc6cc6d evolve: remove a check which is already done by rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5079
diff changeset
   174
    root = repo[roots.first()]
4723
41885988921e fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents: 4714
diff changeset
   175
    # 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
   176
    baseparents -= {root.p1().rev()}
41885988921e fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents: 4714
diff changeset
   177
    p2 = repo[baseparents.first()]
41885988921e fold: allow operations on merge commits with some conditions
Anton Shestakov <av6@dwimlabs.net>
parents: 4714
diff changeset
   178
    return root, head, p2
2759
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   179
2765
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   180
def deletebookmark(repo, repomarks, bookmarks):
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   181
    wlock = lock = tr = None
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   182
    try:
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   183
        wlock = repo.wlock()
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   184
        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
   185
        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
   186
        bmchanges = []
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   187
        for bookmark in bookmarks:
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   188
            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
   189
        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
   190
        tr.close()
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   191
        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
   192
            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
   193
    finally:
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   194
        lockmod.release(tr, lock, wlock)
8a2e1aac6b41 rewriteutil: move 'deletebookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2764
diff changeset
   195
2762
610581a2fb74 commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2759
diff changeset
   196
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
   197
    """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
   198
    """
610581a2fb74 commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2759
diff changeset
   199
    hg.update(repo, prev)
3751
a1a0cfbffd30 evolve: pass revisions as strings to commands.*()
Martin von Zweigbergk <martinvonz@google.com>
parents: 3699
diff changeset
   200
    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
   201
2764
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   202
def reachablefrombookmark(repo, revs, bookmarks):
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   203
    """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
   204
    yoinked from mq.py
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   205
    """
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   206
    repomarks = repo._bookmarks
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   207
    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
   208
        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
   209
                          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
   210
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   211
    # 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
   212
    # 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
   213
    # 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
   214
    nodetobookmarks = {}
4714
c51fc0ae7a7e py3: switch from iteritems() to items()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4710
diff changeset
   215
    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
   216
        nodetobookmarks.setdefault(bnode, []).append(mark)
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   217
    for marks in nodetobookmarks.values():
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   218
        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
   219
            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
   220
            revs = set(revs)
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   221
            revs.update(set(rsrevs))
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   222
            revs = sorted(revs)
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   223
    return repomarks, revs
a4a6f4128be5 rewriteutil: move 'reachablefrombookmark' to the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
   224
2759
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   225
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
   226
    """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
   227
    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
   228
    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
   229
    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
   230
    """
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   231
    wlock = lock = tr = None
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   232
    try:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   233
        wlock = repo.wlock()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   234
        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
   235
        tr = repo.transaction(b'rewrite')
2759
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   236
        base = old.p1()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   237
        updatebookmarks = bookmarksupdater(repo, old.node(), tr)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   238
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   239
        # 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
   240
        # 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
   241
        files = set(old.files())
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   242
        for u in updates:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   243
            files.update(u.files())
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   244
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   245
        # 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
   246
        copied = copies.pathcopies(base, head)
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
        # 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
   249
        def samefile(f):
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   250
            if f in head.manifest():
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   251
                a = head.filectx(f)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   252
                if f in base.manifest():
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   253
                    b = base.filectx(f)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   254
                    return (a.data() == b.data()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   255
                            and a.flags() == b.flags())
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   256
                else:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   257
                    return False
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   258
            else:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   259
                return f not in base.manifest()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   260
        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
   261
        # 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
   262
        headmf = head.manifest()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   263
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   264
        def filectxfn(repo, ctx, path):
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   265
            if path in headmf:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   266
                fctx = head[path]
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   267
                flags = fctx.flags()
3298
f4b06f44d274 memfilectx: changectx argument is not mandatory
Boris Feld <boris.feld@octobus.net>
parents: 3151
diff changeset
   268
                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
   269
                return mctx
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   270
            return None
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   271
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   272
        message = cmdutil.logmessage(repo.ui, commitopts)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   273
        if not message:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   274
            message = old.description()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   275
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
   276
        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
   277
        # 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
   278
        # 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
   279
        # 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
   280
        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
   281
        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
   282
        extra[b'branch'] = head.branch()
2759
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   283
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   284
        new = context.memctx(repo,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   285
                             parents=newbases,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   286
                             text=message,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   287
                             files=files,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   288
                             filectxfn=filectxfn,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   289
                             user=user,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   290
                             date=date,
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   291
                             extra=extra)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   292
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
   293
        if commitopts.get(b'edit'):
2759
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   294
            new._text = cmdutil.commitforceeditor(repo, new, [])
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   295
        revcount = len(repo)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   296
        newid = repo.commitctx(new)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   297
        new = repo[newid]
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   298
        created = len(repo) != revcount
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   299
        updatebookmarks(newid)
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   300
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   301
        tr.close()
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   302
        return newid, created
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   303
    finally:
3137185b1bfe rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2758
diff changeset
   304
        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
   305
5078
66f01dd79f5d evolve: rename a function to make it explicit
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5038
diff changeset
   306
def precheck_contentdiv(repo, ctx):
5079
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   307
    """return divergent revision if rewriting an obsolete cset (ctx) will
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   308
    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
   309
    # 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
   310
    # 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
   311
    #     detected by successorssets)
5079
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   312
    divergent = [] # contains [divergent_cset, common_precursor]
5038
f583d9eedbce evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4845
diff changeset
   313
    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
   314
    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
   315
                        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
   316
                            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
   317
                            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
   318
                        ))
f583d9eedbce evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4845
diff changeset
   319
    if nodivergencerisk:
f583d9eedbce evolve: extract logic of pre-checking divergence risk to its own function
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4845
diff changeset
   320
        # 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
   321
        #     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
   322
        from . import evolvecmd
5079
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   323
        divsets = evolvecmd.divergentsets(repo, ctx)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   324
        if divsets:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   325
            nsuccset = divsets[0][b'divergentnodes']
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   326
            divergent.append(nsuccset[0])
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   327
            prec = divsets[0][b'commonprecursor']
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   328
            divergent.append(prec)
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   329
    else:
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   330
        divergent.append(sset[0][0])
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   331
        divergent.append(ctx.node())
1f92a6aa40d6 evolve: add pre-check logic for content-divergence in rewriteutil.precheck()
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5078
diff changeset
   332
    return divergent
5243
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   333
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   334
def precheck_phasediv(repo, revs):
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   335
    """check if revisions being rewritten has a public predecessor
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   336
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   337
    this method has similar logic as obsolete._computephasedivergentset
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   338
    except that here we are looking into obsolete revs"""
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   339
    obsrevs = repo.revs(b'%ld and obsolete()', revs)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   340
    obsstore = repo.obsstore
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   341
    phase = repo._phasecache.phase
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   342
    public = phases.public
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   343
    cl = repo.changelog
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   344
    torev = compat.getgetrev(cl)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   345
    tonode = cl.node
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   346
    for rev in obsrevs:
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   347
        node = tonode(rev)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   348
        for pnode in obsutil.allpredecessors(obsstore, [node]):
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   349
            prev = torev(pnode)
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   350
            if (prev is not None) and (phase(repo, prev) <= public):
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   351
                # we have a public predecessor
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   352
                return [rev, prev]
e08900cf4b8b evolve: add pre-check logic for creation of phase divergence locally
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 5083
diff changeset
   353
    return []