[PATCH 1 of 4] store all heads of a branch in the branch cache
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Fri Dec 12 00:26:58 CST 2008
I have too little context in the patch to be sure, but I think you're
not using the now fully cached branch heads to feed
localrepo.branchheads(). This might speed up things if people access
branchheads() multiple times. Or am I missing something?
-parren
On Thu, Dec 11, 2008 at 9:10 PM, John Mulligan
<phlogistonjohn at asynchrono.us> wrote:
> # HG changeset patch
> # User John Mulligan <phlogistonjohn at asynchrono.us>
> # Date 1228955389 18000
> # Node ID 7903e526a9db7778b6a63049d7dad2af2a444b3e
> # Parent b95ff487870e3c15198017779125b7f400491d49
> store all heads of a branch in the branch cache
>
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -385,12 +385,13 @@
> partial = self._ubranchcache
>
> self._branchtags(partial, lrev)
> + # this private cache holds all heads (not just tips)
> + self._ubranchcache = partial
>
> # the branch cache is stored on disk as UTF-8, but in the local
> # charset internally
> for k, v in partial.items():
> - self.branchcache[util.tolocal(k)] = v
> - self._ubranchcache = partial
> + self.branchcache[util.tolocal(k)] = v[-1]
> return self.branchcache
>
> def _readbranchcache(self):
> @@ -411,7 +412,7 @@
> for l in lines:
> if not l: continue
> node, label = l.split(" ", 1)
> - partial[label.strip()] = bin(node)
> + partial.setdefault(label.strip(), []).append(bin(node))
> except (KeyboardInterrupt, util.SignalInterrupt):
> raise
> except Exception, inst:
> @@ -424,8 +425,9 @@
> try:
> f = self.opener("branch.cache", "w", atomictemp=True)
> f.write("%s %s\n" % (hex(tip), tiprev))
> - for label, node in branches.iteritems():
> - f.write("%s %s\n" % (hex(node), label))
> + for label, nodes in branches.iteritems():
> + for node in nodes:
> + f.write("%s %s\n" % (hex(node), label))
> f.rename()
> except (IOError, OSError):
> pass
> @@ -434,7 +436,12 @@
> for r in xrange(start, end):
> c = self[r]
> b = c.branch()
> - partial[b] = c.node()
> + bheads = partial.setdefault(b, [])
> + bheads.append(c.node())
> + for p in c.parents():
> + pn = p.node()
> + if pn in bheads:
> + bheads.remove(pn)
>
> def lookup(self, key):
> if isinstance(key, int):
> diff --git a/tests/test-newbranch.out b/tests/test-newbranch.out
> --- a/tests/test-newbranch.out
> +++ b/tests/test-newbranch.out
> @@ -81,6 +81,7 @@
>
> 4:4909a3732169
> 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
> +be8523e69bf892e25817fc97187516b3c0804ae4 default
> bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
> 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
> 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
> @@ -90,6 +91,7 @@
> be8523e69bf892e25817fc97187516b3c0804ae4 default
> % pushing everything
> 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
> +be8523e69bf892e25817fc97187516b3c0804ae4 default
> bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
> 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
> 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
More information about the Mercurial-devel
mailing list