[PATCH 1 of 3] extensions: introduce a class interposition function

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Sun Nov 25 15:10:30 UTC 2012


At Wed, 21 Nov 2012 10:29:19 +0100,
Pierre-Yves David wrote:
> 
> [1  <multipart/signed (7bit)>]
> [1.1  <text/plain; us-ascii (quoted-printable)>]
> On Tue, Nov 20, 2012 at 02:55:43PM -0800, Bryan O'Sullivan wrote:
> > # HG changeset patch
> > # User Bryan O'Sullivan <bryano at fb.com>
> > # Date 1353452136 28800
> > # Node ID cbf274dc847b5c28a282ae98a7d8b9bd48b6137d
> > # Parent  4ae21a7568f353dcb781df28d2acf458b06afcad
> > extensions: introduce a class interposition function
> > 
> > This allows an existing class to be augmented in a transparent way,
> > without its subclasses or callers needing to participate.
> > 
> > The manual class override mechanism currently in use introduces
> > names into an outer scope that can be accidentally (and incorrectly)
> > used in monkeypatched classes. It also does not make clear which
> > class is intended to be monkeypatched. Finally, it requires explicit
> > support from the to-be-monkeypatched code (e.g. reposetup).
> 
> I'm a afraid this will result in side effect when multiple repository are
> involved. FUJIWARA Katsunori spend a lot of time ensuring that enabling and
> extension in one repo won't affect other repository involved in the same
> process.
> 
> (But cleaning up the wrapping is a good idea)

I think Bryan's work will make extensions enabled in repositories not
enabling them, as Pierre mentioned.

Problem cases are:

  - clone from or push to localhost: extensions enabled only in the
    source are enabled also in the destination

  - pull from localhost: extensions enabled only in the destination
    are enabled also in the source

  - recursive execution in subrepo tree: extensions enabled only in
    the parent or some of siblings in the tree are enabled also in
    others

My last posted patches for this problem are:

    http://www.selenic.com/pipermail/mercurial-devel/2012-October/045434.html
    http://www.selenic.com/pipermail/mercurial-devel/2012-October/045435.html
    http://www.selenic.com/pipermail/mercurial-devel/2012-October/045436.html

Something to enable overriding/patching per repository class causes
this problem. Are there any good ways to enable overriding/patching
per repository instance ?

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy at lares.dti.ne.jp



More information about the Mercurial-devel mailing list