[PATCH] introduce fncache repository layout
Adrian Buehlmann
adrian at cadifra.com
Sun Sep 7 06:27:46 CDT 2008
On 07.09.2008 11:48, Adrian Buehlmann wrote:
[..]
> diff --git a/mercurial/store.py b/mercurial/store.py
> --- a/mercurial/store.py
> +++ b/mercurial/store.py
[..]
> +class fncachestore(basicstore):
> + def __init__(self, path, opener, pathjoiner):
> + self.pathjoiner = pathjoiner
> + self.path = self.pathjoiner(path, 'store')
> + self.createmode = _calcmode(self.path)
> + self._op = opener(self.path)
> + self._op.createmode = self.createmode
> + self.opener = fncacheopener(self._op)
> +
> + def join(self, f):
> + return self.pathjoiner(self.path, hybridencode(f))
> +
> + def datafiles(self):
> + rewrite = False
> + existing = []
> + for f in fncache(self._op):
> + try:
> + st = os.stat(self.join(f))
> + yield f, hybridencode(f), st.st_size
Uh, so this calculates hybridencode _twice_ per iteration for
nothing. Silly me...
I was (carelessly) adapting to the refactoring done in
http://selenic.com/repo/index.cgi/hg/rev/def492d1b592
So it seems I can't use self.join here :(
I will update and resend. Apologies.
> + existing.append(f)
> + except OSError:
> + # nonexistent entry
> + rewrite = True
> + if rewrite:
> + # rewrite fncache to remove nonexistent entries
> + # (may be caused by rollback / strip)
> + fp = self._op('fncache', mode='wb')
> + for p in existing:
> + fp.write(p + '\n')
> + fp.close()
More information about the Mercurial-devel
mailing list