hgext/amend.py
author Martin von Zweigbergk <martinvonz@google.com>
Tue, 12 Mar 2019 14:58:35 -0700
changeset 41986 95e4ae86329f
parent 41173 4145fd3569c3
child 42932 e4803231f538
permissions -rw-r--r--
patch: include newline at EOF in help text for interactive patch The lack of a newline means that some "editors" that are useful in tests, such as `echo "+new line" >> "$1"` don't work. It's obviously easy to work around it, but newline at EOF seems like a good practice anyway. Differential Revision: https://phab.mercurial-scm.org/D6124
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33404
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     1
# amend.py - provide the amend command
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     2
#
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     3
# Copyright 2017 Facebook, Inc.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     4
#
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     7
"""provide the amend command (EXPERIMENTAL)
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     8
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
     9
This extension provides an ``amend`` command that is similar to
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    10
``commit --amend`` but does not prompt an editor.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    11
"""
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    12
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    13
from __future__ import absolute_import
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    14
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    15
from mercurial.i18n import _
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    16
from mercurial import (
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    17
    cmdutil,
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    18
    commands,
34889
554885e10868 amend: error out if the note is greater than 255bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34795
diff changeset
    19
    error,
34970
3e549546a6e9 py3: handle keyword arguments in hgext/amend.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34889
diff changeset
    20
    pycompat,
33404
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    21
    registrar,
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    22
)
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    23
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    24
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    25
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    26
# be specifying the version(s) of Mercurial they are tested with, or
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    27
# leave the attribute unspecified.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    28
testedwith = 'ships-with-hg-core'
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    29
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    30
cmdtable = {}
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    31
command = registrar.command(cmdtable)
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    32
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    33
@command('amend',
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    34
    [('A', 'addremove', None,
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    35
      _('mark new/missing files as added/removed before committing')),
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    36
     ('e', 'edit', None, _('invoke editor on commit messages')),
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    37
     ('i', 'interactive', None, _('use interactive mode')),
34795
530b7361e3a9 amend: add a flag `-n/--note` to store note with amend
Pulkit Goyal <7895pulkit@gmail.com>
parents: 33404
diff changeset
    38
     ('n', 'note', '', _('store a note on the amend')),
41173
4145fd3569c3 amend: turn currentdate into tri-state bool so config option can be negated
Yuya Nishihara <yuya@tcha.org>
parents: 41125
diff changeset
    39
     ('D', 'currentdate', None,
41125
126101284e04 amend: add -D/--currentdate option
Yuya Nishihara <yuya@tcha.org>
parents: 40293
diff changeset
    40
      _('record the current date as commit date')),
33404
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    41
    ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2,
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    42
    _('[OPTION]... [FILE]...'),
40293
c303d65d2e34 help: assigning categories to existing commands
rdamazio@google.com
parents: 34970
diff changeset
    43
    helpcategory=command.CATEGORY_COMMITTING,
33404
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    44
    inferrepo=True)
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    45
def amend(ui, repo, *pats, **opts):
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    46
    """amend the working copy parent with all or specified outstanding changes
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    47
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    48
    Similar to :hg:`commit --amend`, but reuse the commit message without
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    49
    invoking editor, unless ``--edit`` was set.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    50
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    51
    See :hg:`help commit` for more details.
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    52
    """
34970
3e549546a6e9 py3: handle keyword arguments in hgext/amend.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34889
diff changeset
    53
    opts = pycompat.byteskwargs(opts)
34889
554885e10868 amend: error out if the note is greater than 255bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34795
diff changeset
    54
    if len(opts['note']) > 255:
554885e10868 amend: error out if the note is greater than 255bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34795
diff changeset
    55
        raise error.Abort(_("cannot store a note of more than 255 bytes"))
33404
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    56
    with repo.wlock(), repo.lock():
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    57
        if not opts.get('logfile'):
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    58
            opts['message'] = opts.get('message') or repo['.'].description()
0d5afd360e9e amend: new extension providing the amend command
Jun Wu <quark@fb.com>
parents:
diff changeset
    59
        opts['amend'] = True
34970
3e549546a6e9 py3: handle keyword arguments in hgext/amend.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34889
diff changeset
    60
        return commands._docommit(ui, repo, *pats, **pycompat.strkwargs(opts))