Mercurial > hg
diff hgext/lfs/__init__.py @ 41048:84d61fdcefa5
lfs: convert to using exthelper to wrap functions
I'm not 100% sure that upgraderequirements() can be double annotated safely, but
it seems OK based on printing the address of the function being wrapped.
One thing I've noticed is that @eh.reposetup doesn't do the usual check to
ensure that it's a local repo. Should that be baked into @eh.reposetup()
somehow, possibly with a non-default option to skip the check? It seems like a
gaping hole if every function that gets registered needs to add this check.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 27 Nov 2018 22:10:07 -0500 |
parents | ef0baff11aea |
children | 70ca0e846d25 |
line wrap: on
line diff
--- a/hgext/lfs/__init__.py Fri Nov 30 21:39:55 2018 -0500 +++ b/hgext/lfs/__init__.py Tue Nov 27 22:10:07 2018 -0500 @@ -129,14 +129,11 @@ from mercurial.i18n import _ from mercurial import ( - bundle2, - changegroup, - cmdutil, config, - context, error, exchange, extensions, + exthelper, filelog, filesetlang, localrepo, @@ -148,11 +145,7 @@ revlog, scmutil, templateutil, - upgrade, util, - vfs as vfsmod, - wireprotoserver, - wireprotov1server, ) from . import ( @@ -167,42 +160,45 @@ # leave the attribute unspecified. testedwith = 'ships-with-hg-core' -configtable = {} -configitem = registrar.configitem(configtable) +eh = exthelper.exthelper() +eh.merge(wrapper.eh) +eh.merge(wireprotolfsserver.eh) -configitem('experimental', 'lfs.serve', +cmdtable = eh.cmdtable +configtable = eh.configtable +extsetup = eh.finalextsetup +uisetup = eh.finaluisetup +reposetup = eh.finalreposetup + +eh.configitem('experimental', 'lfs.serve', default=True, ) -configitem('experimental', 'lfs.user-agent', +eh.configitem('experimental', 'lfs.user-agent', default=None, ) -configitem('experimental', 'lfs.disableusercache', +eh.configitem('experimental', 'lfs.disableusercache', default=False, ) -configitem('experimental', 'lfs.worker-enable', +eh.configitem('experimental', 'lfs.worker-enable', default=False, ) -configitem('lfs', 'url', +eh.configitem('lfs', 'url', default=None, ) -configitem('lfs', 'usercache', +eh.configitem('lfs', 'usercache', default=None, ) # Deprecated -configitem('lfs', 'threshold', +eh.configitem('lfs', 'threshold', default=None, ) -configitem('lfs', 'track', +eh.configitem('lfs', 'track', default='none()', ) -configitem('lfs', 'retry', +eh.configitem('lfs', 'retry', default=5, ) - -cmdtable = {} -command = registrar.command(cmdtable) - templatekeyword = registrar.templatekeyword() filesetpredicate = registrar.filesetpredicate() @@ -216,10 +212,12 @@ # don't die on seeing a repo with the lfs requirement supported |= {'lfs'} -def uisetup(ui): +@eh.uisetup +def _uisetup(ui): localrepo.featuresetupfuncs.add(featuresetup) -def reposetup(ui, repo): +@eh.reposetup +def _reposetup(ui, repo): # Nothing to do with a remote repo if not repo.local(): return @@ -305,6 +303,7 @@ return _match +# Called by remotefilelog def wrapfilelog(filelog): wrapfunction = extensions.wrapfunction @@ -312,6 +311,7 @@ wrapfunction(filelog, 'renamed', wrapper.filelogrenamed) wrapfunction(filelog, 'size', wrapper.filelogsize) +@eh.wrapfunction(localrepo, 'resolverevlogstorevfsoptions') def _resolverevlogstorevfsoptions(orig, ui, requirements, features): opts = orig(ui, requirements, features) for name, module in extensions.extensions(ui): @@ -326,40 +326,10 @@ return opts -def extsetup(ui): +@eh.extsetup +def _extsetup(ui): wrapfilelog(filelog.filelog) - wrapfunction = extensions.wrapfunction - - wrapfunction(localrepo, 'makefilestorage', wrapper.localrepomakefilestorage) - wrapfunction(localrepo, 'resolverevlogstorevfsoptions', - _resolverevlogstorevfsoptions) - - wrapfunction(cmdutil, '_updatecatformatter', wrapper._updatecatformatter) - wrapfunction(scmutil, 'wrapconvertsink', wrapper.convertsink) - - wrapfunction(upgrade, '_finishdatamigration', - wrapper.upgradefinishdatamigration) - - wrapfunction(upgrade, 'preservedrequirements', - wrapper.upgraderequirements) - - wrapfunction(upgrade, 'supporteddestrequirements', - wrapper.upgraderequirements) - - wrapfunction(changegroup, - 'allsupportedversions', - wrapper.allsupportedversions) - - wrapfunction(exchange, 'push', wrapper.push) - wrapfunction(wireprotov1server, '_capabilities', wrapper._capabilities) - wrapfunction(wireprotoserver, 'handlewsgirequest', - wireprotolfsserver.handlewsgirequest) - - wrapfunction(context.basefilectx, 'cmp', wrapper.filectxcmp) - wrapfunction(context.basefilectx, 'isbinary', wrapper.filectxisbinary) - context.basefilectx.islfs = wrapper.filectxislfs - scmutil.fileprefetchhooks.add('lfs', wrapper._prefetchfiles) # Make bundle choose changegroup3 instead of changegroup2. This affects @@ -367,13 +337,6 @@ # "packed1". Using "packed1" with lfs will likely cause trouble. exchange._bundlespeccontentopts["v2"]["cg.version"] = "03" - # bundlerepo uses "vfsmod.readonlyvfs(othervfs)", we need to make sure lfs - # options and blob stores are passed from othervfs to the new readonlyvfs. - wrapfunction(vfsmod.readonlyvfs, '__init__', wrapper.vfsinit) - - # when writing a bundle via "hg bundle" command, upload related LFS blobs - wrapfunction(bundle2, 'writenewbundle', wrapper.writenewbundle) - @filesetpredicate('lfs()') def lfsfileset(mctx, x): """File that uses LFS storage.""" @@ -409,8 +372,8 @@ f = templateutil._showcompatlist(context, mapping, 'lfs_file', files) return templateutil.hybrid(f, files, makemap, pycompat.identity) -@command('debuglfsupload', - [('r', 'rev', [], _('upload large files introduced by REV'))]) +@eh.command('debuglfsupload', + [('r', 'rev', [], _('upload large files introduced by REV'))]) def debuglfsupload(ui, repo, **opts): """upload lfs blobs added by the working copy parent or given revisions""" revs = opts.get(r'rev', [])