[PATCH evolve-ext] inhibit: move transaction wrapping outside of repo setup
Laurent Charignon
lcharignon at fb.com
Tue Jun 16 12:06:40 CDT 2015
Please disregard this patch, I made an accidental amend before sending it.
> On Jun 16, 2015, at 10:04 AM, Laurent Charignon <lcharignon at fb.com> wrote:
>
> # HG changeset patch
> # User Laurent Charignon <lcharignon at fb.com>
> # Date 1434415091 25200
> # Mon Jun 15 17:38:11 2015 -0700
> # Node ID 577fd643ac5eaaf4dec17bc7bb8516920897af17
> # Parent 5c13945b32fc4bcb4998a1bdd0b669ac43c26574
> inhibit: move transaction wrapping outside of repo setup
>
> Before this patch, transaction wrapping code was done in reposetup. It happened
> to cause stackoverflows in repos with a lot of subreps.
>
> This patch moves the wrapping to extsetup and avoids this problem.
>
> diff --git a/hgext/directaccess.py b/hgext/directaccess.py
> --- a/hgext/directaccess.py
> +++ b/hgext/directaccess.py
> @@ -11,21 +11,25 @@ from mercurial import repoview
> from mercurial import branchmap
> from mercurial import revset
> from mercurial import error
> -from mercurial import commands
> +from mercurial import commands, hg
> from mercurial.i18n import _
>
> cmdtable = {}
> command = cmdutil.command(cmdtable)
>
> -# List of commands where no warning is shown for direct access
> -directaccesslevel = [
> - # warning or not, extension (None if core), command name
> - (False, None, 'update'),
> - (False, None, 'export'),
> - (True, 'rebase', 'rebase'),
> - (False, 'evolve', 'prune'),
> +# List of commands that have restricted / or no directaccess
> +directaccesswarning = [
> + # (None if core) or extension name, command name
> + ('rebase', 'rebase'),
> ]
>
> +directaccessforbidden = [
> + # (None if core) or extension name, command name
> + (None, 'serve'),
> + (None, 'push'),
> +]
> +
> +
> def reposetup(ui, repo):
> repo._explicitaccess = set()
>
> @@ -46,13 +50,13 @@ def setupdirectaccess():
> branchmap.subsettable['visible-directaccess-nowarn'] = 'visible'
> branchmap.subsettable['visible-directaccess-warn'] = 'visible'
>
> - for warn, ext, cmd in directaccesslevel:
> - try:
> - cmdtable = extensions.find(ext).cmdtable if ext else commands.table
> - wrapper = wrapwithwarning if warn else wrapwithoutwarning
> - extensions.wrapcommand(cmdtable, cmd, wrapper)
> - except (error.UnknownCommand, KeyError):
> - pass
> + #for warn, ext, cmd in directaccesslevel:
> + # try:
> + # cmdtable = extensions.find(ext).cmdtable if ext else commands.table
> + # wrapper = wrapwithwarning if warn else wrapwithoutwarning
> + # extensions.wrapcommand(cmdtable, cmd, wrapper)
> + # except (error.UnknownCommand, KeyError):
> + # pass
>
> def wrapwithoutwarning(orig, ui, repo, *args, **kwargs):
> if repo and repo.filtername == 'visible':
> @@ -85,8 +89,13 @@ def uisetup(ui):
> order.remove('directaccess')
> extensions._order = order
>
> +def _repository(orig, *args, **kwargs):
> + repo = orig(*args, **kwargs)
> + return repo.filtered("visible-directaccess-nowarn")
> +
> def extsetup(ui):
> extensions.wrapfunction(revset, 'posttreebuilthook', _posttreebuilthook)
> + extensions.wrapfunction(hg, 'repository', _repository)
> setupdirectaccess()
>
> def gethashsymbols(tree):
> diff --git a/hgext/inhibit.py b/hgext/inhibit.py
> --- a/hgext/inhibit.py
> +++ b/hgext/inhibit.py
> @@ -48,9 +48,6 @@ def reposetup(ui, repo):
> return newnode
>
> repo.__class__ = obsinhibitedrepo
> - # Wrapping this to inhibit obsolete revs resulting from a transaction
> - extensions.wrapfunction(localrepo.localrepository,
> - 'transaction', transactioncallback)
>
> def _update(orig, ui, repo, *args, **kwargs):
> """
> @@ -199,6 +196,11 @@ def extsetup(ui):
> except KeyError:
> errormsg = _('Cannot use inhibit without the direct access extension')
> raise error.Abort(errormsg)
> +
> + # Wrapping this to inhibit obsolete revs resulting from a transaction
> + extensions.wrapfunction(localrepo.localrepository,
> + 'transaction', transactioncallback)
> +
> obsolete.cachefuncs['obsolete'] = _computeobsoleteset
> # wrap create marker to make it able to lift the inhibition
> extensions.wrapfunction(obsolete, 'createmarkers', _createmarkers)
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list