[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