Mercurial > public > mercurial-scm > hg-stable
diff mercurial/cmdutil.py @ 26561:1f14920a892c
import: allow processing of extra part header during import
As we have a way for extension to add more header, we need a way for them to
actually process them. We add a basic hook points to alter the changeset
(especially extra) before we commit. There would be more to do for a full
featured hooking, but this currently fit my needs.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Tue, 06 Oct 2015 09:51:24 -0700 |
parents | b9be8ab6e628 |
children | dd2f5e014806 |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Tue Oct 06 02:23:21 2015 -0700 +++ b/mercurial/cmdutil.py Tue Oct 06 09:51:24 2015 -0700 @@ -831,6 +831,22 @@ if runfn: return runfn() +## facility to let extension process additional data into an import patch +# list of identifier to be executed in order +extrapreimport = [] # run before commit +# mapping from identifier to actual import function +# +# 'preimport' are run before the commit is made and are provided the following +# arguments: +# - repo: the localrepository instance, +# - patchdata: data extracted from patch header (cf m.patch.patchheadermap), +# - extra: the future extra dictionnary of the changeset, please mutate it, +# - opts: the import options. +# XXX ideally, we would just pass an ctx ready to be computed, that would allow +# mutation of in memory commit and more. Feel free to rework the code to get +# there. +extrapreimportmap = {} + def tryimportone(ui, repo, hunk, parents, opts, msgs, updatefunc): """Utility function used by commands.import to import a single patch @@ -949,12 +965,15 @@ else: editor = getcommiteditor(editform=editform, **opts) allowemptyback = repo.ui.backupconfig('ui', 'allowemptycommit') + extra = {} + for idfunc in extrapreimport: + extrapreimportmap[idfunc](repo, extractdata, extra, opts) try: if partial: repo.ui.setconfig('ui', 'allowemptycommit', True) n = repo.commit(message, opts.get('user') or user, opts.get('date') or date, match=m, - editor=editor) + editor=editor, extra=extra) finally: repo.ui.restoreconfig(allowemptyback) dsguard.close()