[PATCH 12 of 14] revlog: generate full revisions for shallow nodes with no base
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Fri Jul 30 01:54:46 CDT 2010
On Fri, Jul 16, 2010 at 9:15 AM, Vishakh H <vsh426 at gmail.com> wrote:
> # HG changeset patch
> # User Vishakh H <vsh426 at gmail.com>
> # Date 1279263210 -19800
> # Node ID 896eb69fd908e63b2f5b34593da168fc35f49661
> # Parent 3ba8f61d3793dbe0aad3fe8c7ab6e29fd7f53a2e
> revlog: generate full revisions for shallow nodes with no base
>
> whenever we encounter a revision whose diff parent is missing
> include the whole revision instead of diff.
>
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -35,6 +35,8 @@
> REVLOG_KNOWN_FLAGS = REVLOG_PUNCHED_FLAG
> REVLOGNG_FLAGS = REVLOGNGINLINEDATA | REVLOGSHALLOW
>
> +PUNCHED_DATA = struct.pack(">l", -1)
> +
> # amount of data read unconditionally, should be >= 4
> # when not inline: threshold for using lazy index
> _prereadsize = 1048576
> @@ -1170,7 +1172,7 @@
> self._cache = (node, curr, text)
> return node
>
> - def group(self, nodelist, lookup, infocollect=None):
> + def group(self, nodelist, lookup, infocollect=None, shallownodes=[]):
Please document "shallownodes" in the docstring.
> """Calculate a delta group, yielding a sequence of changegroup chunks
> (strings).
>
> @@ -1195,6 +1197,7 @@
> # build deltas
> for d in xrange(len(revs) - 1):
> a, b = revs[d], revs[d + 1]
> + na = self.node(a)
> nb = self.node(b)
>
> if infocollect is not None:
> @@ -1202,7 +1205,7 @@
>
> p = self.parents(nb)
> meta = nb + p[0] + p[1] + lookup(nb)
> - if a == -1:
> + if ((a == -1) or (shallownodes and (na not in shallownodes))):
> d = self.revision(nb)
> meta += mdiff.trivialdiffheader(len(d))
> else:
This is fine for now. I hope that someday we have a changegroup format
that supports specifying diffs against the prior rev, either parent,
or nothing - at the bundler's discretion. But this is not your job
here.
-parren
More information about the Mercurial-devel
mailing list