hgext/amend.py
author Kyle Lippincott <spectral@google.com>
Sat, 20 Jan 2018 15:33:48 -0800
changeset 35908 a9802c9ecfb5
parent 34970 3e549546a6e9
child 40293 c303d65d2e34
permissions -rw-r--r--
merge: use operation-provided labels (ex: dest/source) in several merge-tools Tools that did not use labels already, used only one, or used some label other than the exact strings of "local" or "other" were unmodified. Cases that used the label "base" were modified as well, if they were otherwise changed in this CL; "merged" was *not* changed. There are other possible changes we might want to make, but I didn't: - bcompare (linux and osx) uses the labels "parent1" and "parent2" instead of "local" and "other", so it was left alone, even though beyondcompare3 (windows) *was* changed. - araxis used the labels "Other", "Base", and "Local :$local", so it was also left alone. - UltraCompare didn't provide a label for 'local', just for 'base' and 'other', so it was left alone. Differential Revision: https://phab.mercurial-scm.org/D2012

# amend.py - provide the amend command
#
# Copyright 2017 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""provide the amend command (EXPERIMENTAL)

This extension provides an ``amend`` command that is similar to
``commit --amend`` but does not prompt an editor.
"""

from __future__ import absolute_import

from mercurial.i18n import _
from mercurial import (
    cmdutil,
    commands,
    error,
    pycompat,
    registrar,
)

# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
# be specifying the version(s) of Mercurial they are tested with, or
# leave the attribute unspecified.
testedwith = 'ships-with-hg-core'

cmdtable = {}
command = registrar.command(cmdtable)

@command('amend',
    [('A', 'addremove', None,
      _('mark new/missing files as added/removed before committing')),
     ('e', 'edit', None, _('invoke editor on commit messages')),
     ('i', 'interactive', None, _('use interactive mode')),
     ('n', 'note', '', _('store a note on the amend')),
    ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2,
    _('[OPTION]... [FILE]...'),
    inferrepo=True)
def amend(ui, repo, *pats, **opts):
    """amend the working copy parent with all or specified outstanding changes

    Similar to :hg:`commit --amend`, but reuse the commit message without
    invoking editor, unless ``--edit`` was set.

    See :hg:`help commit` for more details.
    """
    opts = pycompat.byteskwargs(opts)
    if len(opts['note']) > 255:
        raise error.Abort(_("cannot store a note of more than 255 bytes"))
    with repo.wlock(), repo.lock():
        if not opts.get('logfile'):
            opts['message'] = opts.get('message') or repo['.'].description()
        opts['amend'] = True
        return commands._docommit(ui, repo, *pats, **pycompat.strkwargs(opts))