[PATCH 4 of 6] filelog: add support for unpacking lwcopy entries

Matt Mackall mpm at selenic.com
Mon Feb 7 18:27:02 UTC 2011


On Mon, 2011-02-07 at 12:32 +0100, Sune Foldager wrote:
> On 01-02-2011 01:02, Matt Mackall wrote:
> > On Mon, 2011-01-31 at 11:21 +0100, Sune Foldager wrote:
> >> # HG changeset patch
> >> # User Sune Foldager<cryo at cyanite.org>
> >> # Date 1296295857 -3600
> >> # Node ID b973580739760fc25f971b947864a890abf5eb2c
> >> # Parent  c53628efd882402813e98fc86bde1bf825ad1c79
> >> filelog: add support for unpacking lwcopy entries
> >>
> >> diff --git a/mercurial/filelog.py b/mercurial/filelog.py
> >> --- a/mercurial/filelog.py
> >> +++ b/mercurial/filelog.py
> >> @@ -5,7 +5,7 @@
> >>   # This software may be used and distributed according to the terms of the
> >>   # GNU General Public License version 2 or any later version.
> >>
> >> -import revlog
> >> +import revlog, mdiff
> >>   import re
> >>
> >>   class filelog(revlog.revlog):
> >> @@ -67,6 +67,23 @@
> >>
> >>           return True
> >>
> >> +    def _ptext(self, meta):
> >> +        return filelog(self.opener, meta["copy"]).read(revlog.bin(meta["copyrev"]))
> >> +
> >> +    def _unpack_text(self, text):
> >> +        meta, keys, mdlen = _parsemeta(text)
> >> +        if meta and "copylw" in meta:
> >> +            ptext = self._ptext(meta)
> >> +            text = mdiff.patches(ptext, [buffer(text, mdlen)])
> >> +            # delete copylw entry to get just what we should get without lwcopy
> >> +            keys.remove("copylw")
> >> +            text = "\1\n%s\1\n%s" % (_packmeta(meta, keys), text)
> >> +        return text
> >> +
> >> +    def _chunkbase(self, rev):
> >> +        text = revlog.revlog._chunkbase(self, rev)
> >> +        return self._unpack_text(text)
> >
> > As I mentioned before, I introduced _checkhash for this purpose.
> > _chunk/_chunkbase is actually not in the right place - a lightweight
> > copy may end up getting stored as a delta in the target revlog.
> 
> I'll take a deeper look at that, then.
> 
> Yes, lwcopies might (although it's almost pathological) end up being 
> stored as deltas. This will not be a problem, though, and likely take up 
> less space than a proper lwcopy store would for that entry.

My point is that I suspect your implementation is buggy when this
occurs.

-- 
Mathematics is the supreme nostalgia of our time.





More information about the Mercurial-devel mailing list