diff hgext/amend.py @ 33404:0d5afd360e9e

amend: new extension providing the amend command Various third parties have implemented the `amend` command, which is in high demand. This patch adds it as an experimental extension so its interface could be formalized in core directly. Since `commit --amend` is basically what `amend` should do. The command is just a thin wrapper around `commit --amend` and just prevent the editor from popping up by passing `--message`.
author Jun Wu <quark@fb.com>
date Tue, 11 Jul 2017 20:53:55 -0700
parents
children 530b7361e3a9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/amend.py	Tue Jul 11 20:53:55 2017 -0700
@@ -0,0 +1,51 @@
+# 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,
+    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')),
+    ] + 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.
+    """
+    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, **opts)