Inconsistent HG_PENDING handling

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Wed Feb 15 10:01:05 EST 2017


At Mon, 13 Feb 2017 18:19:35 -0500,
Augie Fackler wrote:
> 
> (+foozy, marmoute for transaction musing)
> 
> On Sun, Feb 12, 2017 at 07:06:49PM -0500, timeless wrote:
> > bookmarks.py
> >     if 'HG_PENDING' in encoding.environ:
> >         try:
> >             bkfile = repo.vfs('bookmarks.pending')
> >
> > dirstate.py
> > def _trypending(root, vfs, filename):
> >     '''Open  file to be read according to HG_PENDING environment variable
> >
> >     This opens '.pending' of specified 'filename' only when HG_PENDING
> >     is equal to 'root'.
> >
> >     This returns '(fp, is_pending_opened)' tuple.
> >     '''
> >     if root == encoding.environ.get('HG_PENDING'):
> >
> > localrepo.py
> >         if 'HG_PENDING' in encoding.environ:
> >             p = encoding.environ['HG_PENDING']
> >             if p.startswith(self.root):
> >                 c.readpending('00changelog.i.a')
> >
> > it /seems/ like the dirstate code is designed so that it shows the
> > dirstate for a given repository based on pending
> > so, if i have a hg hook that deals w/ HG_PENDING
> >
> > and there are 2 hg things triggering pending
> > and thus two repositories running hooks that deal w/ pending
> > and for some reason one of them runs an hg command in the other repository
> > that second repository will afaict not report the pending dirstate,
> > since it checks carefully
> > but will report the pending bookmark, since afaict it checks carelessly
> >
> > the same incorrect behavior appears to be present for phases too
> >
> > but that should mean a nested repo could see a pending something
> >
> > if i have a repo w/ a registered subrepo, and someone does a "push" to
> > my repo, is the subrepo directory modified as part of the step leading
> > to my push-pretxn hook?
> 
> This looks correct to me - there's one easy-to-fix bug in bookmarks,
> and one hard-to-fix bug related to nested repositories. Can I at least
> get you to draft a change for bookmarks to make it more sound?
> 
> Thanks!

I understand:

  - a transaction covers only one repository

  - an external hook with HG_PENDING can't see any pending changes in
    other repositories, even if they are outer ones of subrepo nesting

IMHO, making HG_PENDING check in bookmarks.py, phases.py, and
localrepo.py strict is enough.


BTW, I have pending patches to make HG_PENDING check strict by
centralizing "read file in according to HG_PENDING" logic (as a part
of followup for DirstateTransactionPlan), in fact. I'll post them,
soon :-)


> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel at mercurial-scm.org
> > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> 

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


More information about the Mercurial-devel mailing list