From patchwork Fri Jul 14 20:01:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1, of, 2, V3] commitextras: move fb extension to core which add extras to a commit From: Pulkit Goyal <7895pulkit@gmail.com> X-Patchwork-Id: 22373 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Sat, 15 Jul 2017 01:31:23 +0530 # HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1499799225 -19800 # Wed Jul 12 00:23:45 2017 +0530 # Node ID e51d188da49636884ae6c0df94f501e84436b857 # Parent 80e1331a7fe970f3e56fde9044949d72d3afdf30 # 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. 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