repo: move unfiltered-repo optimization to workingctx
localrepo.__getitem__ special-cased lookup of the working copy parent
to avoid looking up obsmarkers. I think the reason for that code
(which I once wrote myself) was to make `hg commit` not load
obsmarkers, which it would otherwise do via ctx.p1() in
localrepo.commitctx().
That had the somewhat unfortunate consequence of making lookup of an
unrelated binary nodeid load the dirstate. Now that changectx's
constructor is dumb, we can let workingctx._parents() have the
opmtimization instead.
This affects two tests, because they no longer end up loading the
dirstate and their "warning: ignoring unknown working parent ..."
messages therefore go way.
Differential Revision: https://phab.mercurial-scm.org/D4828
--- a/mercurial/context.py Wed Sep 26 22:53:14 2018 -0700
+++ b/mercurial/context.py Wed Sep 26 23:09:28 2018 -0700
@@ -1241,7 +1241,9 @@
p = self._repo.dirstate.parents()
if p[1] == nullid:
p = p[:-1]
- return [self._repo[x] for x in p]
+ # use unfiltered repo to delay/avoid loading obsmarkers
+ unfi = self._repo.unfiltered()
+ return [changectx(self._repo, unfi.changelog.rev(n), n) for n in p]
def _fileinfo(self, path):
# populate __dict__['_manifest'] as workingctx has no _manifestdelta
--- a/mercurial/localrepo.py Wed Sep 26 22:53:14 2018 -0700
+++ b/mercurial/localrepo.py Wed Sep 26 23:09:28 2018 -0700
@@ -1228,8 +1228,7 @@
node = self.changelog.tip()
rev = self.changelog.rev(node)
return context.changectx(self, rev, node)
- elif (changeid == '.'
- or self.local() and changeid == self.dirstate.p1()):
+ elif changeid == '.':
# this is a hack to delay/avoid loading obsmarkers
# when we know that '.' won't be hidden
node = self.dirstate.p1()
--- a/tests/test-histedit-obsolete.t Wed Sep 26 22:53:14 2018 -0700
+++ b/tests/test-histedit-obsolete.t Wed Sep 26 23:09:28 2018 -0700
@@ -71,7 +71,6 @@
$ hg commit --amend -X . -m XXXXXX
$ hg commit --amend -X . -m b2
$ hg --hidden --config extensions.strip= strip 'desc(XXXXXX)' --no-backup
- warning: ignoring unknown working parent aba7da937030!
$ hg histedit --continue
$ hg log -G
@ 8:273c1f3b8626 c
--- a/tests/test-single-head.t Wed Sep 26 22:53:14 2018 -0700
+++ b/tests/test-single-head.t Wed Sep 26 23:09:28 2018 -0700
@@ -200,5 +200,4 @@
$ hg strip --config extensions.strip= --rev 'desc("c_dH0")'
saved backup bundle to $TESTTMP/client/.hg/strip-backup/fe47ea669cea-a41bf5a9-backup.hg
- warning: ignoring unknown working parent 49003e504178!