hgext/split.py
author Pulkit Goyal <7895pulkit@gmail.com>
Wed, 06 Jan 2021 16:18:06 +0530
changeset 46235 0babe12ef35d
parent 45876 568c05d8f3d2
child 46758 7f6c002d7c0a
permissions -rw-r--r--
sharesafe: introduce functionality to automatically upgrade shares In past few months, we have developed a `share-safe` mode for sharing repository in which share source requirements and config values are shared with the shares. To get it rolling, an important task is to get these shares automatically upgraded. We are focusing on an installation where shares are created by scripts and test jobs. It will be difficult to manually upgrade these and we need some functionality to do so automatically. This patch introduces a config option to deal with it. If all of the following conditions are met, we upgrade the share repository automatically: * If the config option is enabled * Share source repository is share-safe enabled * Share is not share-safe enabled * Any command is run in the share Upgrading the share is pretty easy as it involves only editing the requirements file. Differential Revision: https://phab.mercurial-scm.org/D9679
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     1
# split.py - split a changeset into smaller ones
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     2
#
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     3
# Copyright 2015 Laurent Charignon <lcharignon@fb.com>
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     4
# Copyright 2017 Facebook, Inc.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     5
#
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     6
# This software may be used and distributed according to the terms of the
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     7
# GNU General Public License version 2 or any later version.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     8
"""command to split a changeset into smaller ones (EXPERIMENTAL)"""
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
     9
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    10
from __future__ import absolute_import
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    11
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    12
from mercurial.i18n import _
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    13
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    14
from mercurial.node import (
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    15
    nullid,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    16
    short,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    17
)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    18
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    19
from mercurial import (
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    20
    bookmarks,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    21
    cmdutil,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    22
    commands,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    23
    error,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    24
    hg,
36400
7b86aa31b004 py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35455
diff changeset
    25
    pycompat,
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    26
    registrar,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    27
    revsetlang,
43935
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    28
    rewriteutil,
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    29
    scmutil,
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    30
)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    31
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    32
# allow people to use split without explicitly enabling rebase extension
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    33
from . import rebase
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    34
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    35
cmdtable = {}
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    36
command = registrar.command(cmdtable)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    37
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    38
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    39
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    40
# be specifying the version(s) of Mercurial they are tested with, or
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    41
# leave the attribute unspecified.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    42
testedwith = b'ships-with-hg-core'
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    43
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    44
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    45
@command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    46
    b'split',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    47
    [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    48
        (b'r', b'rev', b'', _(b"revision to split"), _(b'REV')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    49
        (b'', b'rebase', True, _(b'rebase descendants after split')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    50
    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    51
    + cmdutil.commitopts2,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    52
    _(b'hg split [--no-rebase] [[-r] REV]'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    53
    helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    54
    helpbasic=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    55
)
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    56
def split(ui, repo, *revs, **opts):
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    57
    """split a changeset into smaller ones
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    58
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    59
    Repeatedly prompt changes and commit message for new changesets until there
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    60
    is nothing left in the original changeset.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    61
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    62
    If --rev was not given, split the working directory parent.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    63
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    64
    By default, rebase connected non-obsoleted descendants onto the new
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    65
    changeset. Use --no-rebase to avoid the rebase.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    66
    """
38069
5ba0cf22e4d0 py3: fix kwargs handling in hgext/split.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36408
diff changeset
    67
    opts = pycompat.byteskwargs(opts)
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    68
    revlist = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    69
    if opts.get(b'rev'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    70
        revlist.append(opts.get(b'rev'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    71
    revlist.extend(revs)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    72
    with repo.wlock(), repo.lock(), repo.transaction(b'split') as tr:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    73
        revs = scmutil.revrange(repo, revlist or [b'.'])
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    74
        if len(revs) > 1:
45876
568c05d8f3d2 errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45856
diff changeset
    75
            raise error.InputError(_(b'cannot split multiple revisions'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    76
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    77
        rev = revs.first()
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    78
        ctx = repo[rev]
43935
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    79
        # Handle nullid specially here (instead of leaving for precheck()
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    80
        # below) so we get a nicer message and error code.
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    81
        if rev is None or ctx.node() == nullid:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    82
            ui.status(_(b'nothing to split\n'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    83
            return 1
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    84
        if ctx.node() is None:
45876
568c05d8f3d2 errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45856
diff changeset
    85
            raise error.InputError(_(b'cannot split working directory'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    86
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    87
        if opts.get(b'rebase'):
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    88
            # Skip obsoleted descendants and their descendants so the rebase
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    89
            # won't cause conflicts for sure.
43935
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    90
            descendants = list(repo.revs(b'(%d::) - (%d)', rev, rev))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    91
            torebase = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    92
                repo.revs(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    93
                    b'%ld - (%ld & obsolete())::', descendants, descendants
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    94
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
    95
            )
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    96
        else:
43935
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    97
            torebase = []
2349a60f33db split: use rewriteutil.precheck() instead of reimplementing it
Martin von Zweigbergk <martinvonz@google.com>
parents: 43641
diff changeset
    98
        rewriteutil.precheck(repo, [rev] + torebase, b'split')
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
    99
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   100
        if len(ctx.parents()) > 1:
45876
568c05d8f3d2 errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45856
diff changeset
   101
            raise error.InputError(_(b'cannot split a merge changeset'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   102
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   103
        cmdutil.bailifchanged(repo)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   104
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   105
        # Deactivate bookmark temporarily so it won't get moved unintentionally
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   106
        bname = repo._activebookmark
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   107
        if bname and repo._bookmarks[bname] != ctx.node():
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   108
            bookmarks.deactivate(repo)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   109
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   110
        wnode = repo[b'.'].node()
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   111
        top = None
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   112
        try:
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   113
            top = dosplit(ui, repo, tr, ctx, opts)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   114
        finally:
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   115
            # top is None: split failed, need update --clean recovery.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   116
            # wnode == ctx.node(): wnode split, no need to update.
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   117
            if top is None or wnode != ctx.node():
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   118
                hg.clean(repo, wnode, show_stats=False)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   119
            if bname:
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   120
                bookmarks.activate(repo, bname)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   121
        if torebase and top:
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   122
            dorebase(ui, repo, torebase, top)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   123
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   124
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   125
def dosplit(ui, repo, tr, ctx, opts):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   126
    committed = []  # [ctx]
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   127
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   128
    # Set working parent to ctx.p1(), and keep working copy as ctx's content
41966
42e2c7c52e1b split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
   129
    if ctx.node() != repo.dirstate.p1():
42e2c7c52e1b split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
   130
        hg.clean(repo, ctx.node(), show_stats=False)
42e2c7c52e1b split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
   131
    with repo.dirstate.parentchange():
42e2c7c52e1b split: use the new movedirstate() we now have in scmutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 40295
diff changeset
   132
        scmutil.movedirstate(repo, ctx.p1())
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   133
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   134
    # Any modified, added, removed, deleted result means split is incomplete
43641
705738def50c split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
   135
    def incomplete(repo):
705738def50c split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
   136
        st = repo.status()
705738def50c split: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
   137
        return any((st.modified, st.added, st.removed, st.deleted))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   138
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   139
    # Main split loop
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   140
    while incomplete(repo):
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   141
        if committed:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   142
            header = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   143
                b'HG: Splitting %s. So far it has been split into:\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   144
            ) % short(ctx.node())
45856
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   145
            # We don't want color codes in the commit message template, so
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   146
            # disable the label() template function while we render it.
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   147
            with ui.configoverride(
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   148
                {(b'templatealias', b'label(l,x)'): b"x"}, b'split'
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   149
            ):
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   150
                for c in committed:
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   151
                    summary = cmdutil.format_changeset_summary(ui, c, b'split')
8357e0e81bb7 split: disable color while rendering template for use in commit message
Martin von Zweigbergk <martinvonz@google.com>
parents: 45773
diff changeset
   152
                    header += _(b'HG: - %s\n') % summary
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   153
            header += _(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43077
diff changeset
   154
                b'HG: Write commit message for the next split changeset.\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   155
            )
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   156
        else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   157
            header = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   158
                b'HG: Splitting %s. Write commit message for the '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   159
                b'first split changeset.\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   160
            ) % short(ctx.node())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   161
        opts.update(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   162
            {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   163
                b'edit': True,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   164
                b'interactive': True,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   165
                b'message': header + ctx.description(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   166
            }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   167
        )
36400
7b86aa31b004 py3: fix handling of keyword arguments at more places
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35455
diff changeset
   168
        commands.commit(ui, repo, **pycompat.strkwargs(opts))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   169
        newctx = repo[b'.']
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   170
        committed.append(newctx)
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   171
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   172
    if not committed:
45876
568c05d8f3d2 errors: raise InputError in `hg split`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45856
diff changeset
   173
        raise error.InputError(_(b'cannot split an empty revision'))
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   174
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   175
    scmutil.cleanupnodes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   176
        repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   177
        {ctx.node(): [c.node() for c in committed]},
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   178
        operation=b'split',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   179
        fixphase=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   180
    )
35455
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   181
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   182
    return committed[-1]
02ea370c2baa split: new extension to split changesets
Jun Wu <quark@fb.com>
parents:
diff changeset
   183
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   184
36408
83bade6206d4 split: use ctx.rev() instead of %d % ctx
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36400
diff changeset
   185
def dorebase(ui, repo, src, destctx):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   186
    rebase.rebase(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   187
        ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   188
        repo,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   189
        rev=[revsetlang.formatspec(b'%ld', src)],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   190
        dest=revsetlang.formatspec(b'%d', destctx.rev()),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41966
diff changeset
   191
    )