diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -56,6 +56,7 @@ from . import ( subrepo, tags as tagsmod, transaction, + txnutil, util, ) @@ -513,10 +514,8 @@ class localrepository(object): @storecache('00changelog.i') def changelog(self): c = changelog.changelog(self.svfs) - if 'HG_PENDING' in encoding.environ: - p = encoding.environ['HG_PENDING'] - if p.startswith(self.root): - c.readpending('00changelog.i.a') + if txnutil.mayhavepending(self.root): + c.readpending('00changelog.i.a') return c def _constructmanifest(self): diff --git a/tests/test-hook.t b/tests/test-hook.t --- a/tests/test-hook.t +++ b/tests/test-hook.t @@ -832,6 +832,50 @@ pretxnclose hook failure should abort th [1] $ cd .. +check whether HG_PENDING makes pending changes only in related +repositories visible to an external hook. + +(emulate a transaction running concurrently by copied +.hg/store/00changelog.i.a in subsequent test) + + $ cat > $TESTTMP/savepending.sh < cp .hg/store/00changelog.i.a .hg/store/00changelog.i.a.saved + > exit 1 # to avoid adding new revision for subsequent tests + > EOF + $ cd a + $ hg tip -q + 4:539e4b31b6dc + $ hg --config hooks.pretxnclose="sh $TESTTMP/savepending.sh" commit -m "invisible" + transaction abort! + rollback completed + abort: pretxnclose hook exited with status 1 + [255] + $ cp .hg/store/00changelog.i.a.saved .hg/store/00changelog.i.a + +(check (in)visibility of new changeset while transaction running in +repo) + + $ cat > $TESTTMP/checkpending.sh < echo '@a' + > hg -R $TESTTMP/a tip -q + > echo '@a/nested' + > hg -R $TESTTMP/a/nested tip -q + > exit 1 # to avoid adding new revision for subsequent tests + > EOF + $ hg init nested + $ cd nested + $ echo a > a + $ hg add a + $ hg --config hooks.pretxnclose="sh $TESTTMP/checkpending.sh" commit -m '#0' + @a + 4:539e4b31b6dc + @a/nested + 0:bf5e395ced2c + transaction abort! + rollback completed + abort: pretxnclose hook exited with status 1 + [255] + Hook from untrusted hgrc are reported as failure ================================================