[PATCH 1 of 3] dirstate: factor maybelookup() out of write()
Matt Mackall
mpm at selenic.com
Wed Mar 16 08:45:44 CDT 2011
On Wed, 2011-03-16 at 08:55 -0400, Greg Ward wrote:
> On 15 March 2011, Matt Mackall said:
> > On Tue, 2011-03-15 at 21:39 -0400, Greg Ward wrote:
> > > # HG changeset patch
> > > # User Greg Ward <greg at gerg.ca>
> > > # Date 1300239394 14400
> > > # Node ID c5fa123f60a63af19057e873106c532ee2c553fa
> > > # Parent 0652b2da832daada866a68f7a4359227570c2447
> > > dirstate: factor maybelookup() out of write().
> > >
> > > For the moment, this serves no obvious purpose. But it will be needed
> > > in localrepository.commit() to avoid a subtle dirstate race when there
> > > are multiple commits in the same second from the same process.
> >
> > FYI, this is rather performance-sensitive due to being in the inner loop
> > of the dirstate write function. You'll note that that function goes to
> > some pains to avoid various lookups. It might be better to have it run
> > on the whole set of files to amortize the call overhead..
>
> Argh. My initial implementation did just that, but I talked myself
> into taking only a single filename, leaving the loop in the caller,
> because that's how every other state-changing method in dirstate
> looks. And it means write() would effectively loop twice:
>
> self.maybelookup(self._map, now) # loop over self._map
> for (f, e) in self._map.iteritems(): # loop again
> if f in copymap:
> ...
>
> Maybe I'll add something to contrib/perf.py to measure
> dirstate.write() and see the effects of this change.
>
> BTW: what's your feeling on the name 'maybelookup()'? Adrian has
> *juuuust* about succeeded in convincing me to go with checkmtime(). Or
> checkmtimes() if it takes an iterable of filenames.
That's a bit better.
> (My rationale for 'maybelookup()' is not that that this method might
> do the "lookup", i.e. compare file states, but that it might change
> f's state so that future code will need to do the lookup. I know some
> Java people who would call this maybePutFileInStateThatRequires-
> ComparingContentLater(), but they're obviously insane.)
>
> Greg
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list