Patchwork [1,of,2,v2] commitextras: move fb extension to core which add extras to a commit

login
register
mail settings
Submitter Pulkit Goyal
Date July 12, 2017, 11:43 a.m.
Message ID <3d742534fa70a38a2b54.1499859814@workspace>
Download mbox | patch
Permalink /patch/22251/
State Superseded
Headers show

Comments

Pulkit Goyal - July 12, 2017, 11:43 a.m.
# HG changeset patch
# User Pulkit Goyal <7895pulkit@gmail.com>
# Date 1499799225 -19800
#      Wed Jul 12 00:23:45 2017 +0530
# Node ID 3d742534fa70a38a2b540cfb0bf68610ecc63d0e
# Parent  26e4ba058215e536d3827befbea99ff6203d35f8
# EXP-Topic fbext
commitextras: move fb extension to core which add extras to a commit

This patch moves the Facebook extension to add extra fields to a commit to a
in-core extension.

Patch

diff --git a/hgext/commitextras.py b/hgext/commitextras.py
new file mode 100644
--- /dev/null
+++ b/hgext/commitextras.py
@@ -0,0 +1,45 @@ 
+# commitextras.py
+#
+# Copyright 2013 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.
+
+'''adds a new flag extras to commit'''
+
+from __future__ import absolute_import
+
+from mercurial.i18n import _
+from mercurial import (
+    commands,
+    extensions,
+    registrar,
+)
+
+cmdtable = {}
+command = registrar.command(cmdtable)
+testedwith = 'ships-with-hg-core'
+
+def extsetup(ui):
+    entry = extensions.wrapcommand(commands.table, 'commit', _commit)
+    options = entry[1]
+    options.append(('', 'extra', [],
+        _('set a changeset\'s extra values'), _("KEY=VALUE")))
+
+def _commit(orig, ui, repo, *pats, **opts):
+    origcommit = repo.commit
+    try:
+        def _wrappedcommit(*innerpats, **inneropts):
+            extras = opts.get('extra')
+            if extras:
+                for raw in extras:
+                    k, v = raw.split('=', 1)
+                    inneropts['extra'][k] = v
+            return origcommit(*innerpats, **inneropts)
+
+        # This __dict__ logic is needed because the normal
+        # extension.wrapfunction doesn't seem to work.
+        repo.__dict__['commit'] = _wrappedcommit
+        return orig(ui, repo, *pats, **opts)
+    finally:
+        del repo.__dict__['commit']
diff --git a/tests/test-help.t b/tests/test-help.t
--- a/tests/test-help.t
+++ b/tests/test-help.t
@@ -254,6 +254,7 @@ 
        censor        erase file content at a given revision
        churn         command to display statistics about repository history
        clonebundles  advertise pre-generated bundles to seed clones
+       commitextras  adds a new flag extras to commit
        convert       import revisions from foreign VCS repositories into
                      Mercurial
        eol           automatically manage newlines in repository files