[PATCH 1 of 6 V3] branchmap: read and write key part related to filtered revision
Augie Fackler
raf at durin42.com
Tue Jan 1 17:35:01 CST 2013
queued the whole series. thanks for your patience.
On Jan 1, 2013, at 5:14 PM, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at logilab.fr>
> # Date 1357060764 -3600
> # Node ID d5a9f27529d3f7c6fdf3e927847b82f29c888573
> # Parent 9916d104c485e744dad50d63398d540f429e0caa
> branchmap: read and write key part related to filtered revision
>
> Now that we have a third part for the cache key we need to write and read it on
> disk. It is only written when there is filtered revision. This keep the format
> compatible with older version.
>
> Notes that, at this state, filtered repository does not use any disk caches yet.
>
> diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
> --- a/mercurial/branchmap.py
> +++ b/mercurial/branchmap.py
> @@ -16,13 +16,18 @@ def read(repo):
> f.close()
> except (IOError, OSError):
> return branchcache()
>
> try:
> - last, lrev = lines.pop(0).split(" ", 1)
> + cachekey = lines.pop(0).split(" ", 2)
> + last, lrev = cachekey[:2]
> last, lrev = bin(last), int(lrev)
> - partial = branchcache(tipnode=last, tiprev=lrev)
> + filteredhash = None
> + if len(cachekey) > 2:
> + filteredhash = bin(cachekey[2])
> + partial = branchcache(tipnode=last, tiprev=lrev,
> + filteredhash=filteredhash)
> if not partial.validfor(repo):
> # invalidate the cache
> raise ValueError('tip differs')
> for l in lines:
> if not l:
> @@ -111,11 +116,14 @@ class branchcache(dict):
>
>
> def write(self, repo):
> try:
> f = repo.opener("cache/branchheads", "w", atomictemp=True)
> - f.write("%s %s\n" % (hex(self.tipnode), self.tiprev))
> + cachekey = [hex(self.tipnode), str(self.tiprev)]
> + if self.filteredhash is not None:
> + cachekey.append(hex(self.filteredhash))
> + f.write(" ".join(cachekey) + '\n')
> for label, nodes in self.iteritems():
> for node in nodes:
> f.write("%s %s\n" % (hex(node), encoding.fromlocal(label)))
> f.close()
> except (IOError, OSError):
More information about the Mercurial-devel
mailing list