mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
e6b221f9d6
Summary: This adds an extension which will allow a user to specify commit 'extras' from the command line. This will allow our repo sync script to include extra metadata in the commits. For instance, this is required in order to not lose git's committer info when syncing into mercurial (which is required in order to make sure two commits with the same content but different committers will produce a different hash in Mercurial). Test Plan: Added a simple test Reviewers: pyd, lcharignon, mpm, sid0, rmcelroy Reviewed By: rmcelroy Differential Revision: https://phabricator.fb.com/D2027341 Signature: t1:2027341:1430255572:6866d0ba5564ca977c8fce41e55988883e15ce5b
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
# 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.
|
|
|
|
from mercurial import util, cmdutil, commands, hg, scmutil
|
|
from mercurial import bookmarks, extensions
|
|
from mercurial.i18n import _
|
|
from hgext import rebase
|
|
import errno, os, stat, subprocess
|
|
|
|
cmdtable = {}
|
|
command = cmdutil.command(cmdtable)
|
|
testedwith = 'internal'
|
|
|
|
def extsetup(ui):
|
|
entry = extensions.wrapcommand(commands.table, 'commit', _commit)
|
|
options = entry[1]
|
|
options.append(('', 'extra', [],
|
|
_('set a commit\'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']
|