Kurt Granroth wrote:
> On 08/01/2010 09:33 AM, Yuya Nishihara wrote:
> > Kurt Granroth wrote:
> >> The problem is that the hooks are attached to the "wrong" UI object.
> >>
> >> Okay, so hgtk.run() calls 'extension.loadall(ui)'.  This is the function
> >> that calls the extensions' uisetup()... and this is where the necessary
> >> hook is setup so that hgeol is called during the update.  So far, so good.
> > 
> > I don't read full story yet, but Mercurial also calls extensions.loadall()
> > with lui, which is copy of ui. (see dispatch.py:_dispatch().)
> > It means preupdate.eol hook doesn't take effect in most cases.
> > 
> > in-hg-repo% hg update  # doesn't call eol.preupdate()
> > out-hg-repo% hg clone foo bar  # calls eol.preupdate()
> > in-hg-repo% hg clone . ../bar  # doesn't call eol.preupdate()
> > 
> > It's only effective for clone only when you're outside ouf repository.
> 
> I got almost exactly the *opposite* results of your test, in my earlier
> testing.  That is, eol.preupdate() ran with 'hg update' but did not run
> with 'hg clone'.
> 
> Actually, to be a bit more precise: hg clone *did* appear to work when
> the repositories were local (file://) but did not when the source repo
> was remote (ssh:// or http://).
> 
> I don't think calling extensions.loadall() will do anything useful.  The
> core extensions code uses a few global variables to ensure that hooks
> are only loaded once.

I cannot figure out what makes difference.
Here's my understanding:

uisetup() is called only by extensions.loadall(), and where calling
extensions.loadall() are:
% grep loadall *.py
dispatch.py:    extensions.loadall(lui)
dispatch.py:    # (uisetup and extsetup are handled in extensions.loadall)
extensions.py:def loadall(ui):
localrepo.py:            extensions.loadall(self.ui)

* If current directory is inside repo, _dispatch() copies ui to lui to load
  local .hg/hgrc; then calls extensions.loadall(lui).
* If source repo of 'hg clone' is local, localrepository() will load its
  .hg/hgrc followed by extensions.loadall(self.ui). Here self.ui is copy
  of self.baseui.

Yuya,

------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Tortoisehg-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tortoisehg-discuss

Reply via email to