changelog: add a `branch` method, bypassing changectx
The only way to access the branch of a changeset is currently to
create a changectx object and access its `branch()` method. Creating
a new Python object is costly and has a huge impact on code doing
heavy access to `branch()` (like branchmap).
This change introduces a new method on changelog that allows direct
access to the branch of a revision. See the next changeset for impact.
--- a/mercurial/changelog.py Tue Jan 08 01:28:39 2013 +0100
+++ b/mercurial/changelog.py Thu Jan 10 00:41:40 2013 +0100
@@ -337,3 +337,10 @@
l = [hex(manifest), user, parseddate] + sorted(files) + ["", desc]
text = "\n".join(l)
return self.addrevision(text, transaction, len(self), p1, p2)
+
+ def branch(self, rev):
+ """return the branch of a revision
+
+ This function exists because creating a changectx object
+ just to access this is costly."""
+ return encoding.tolocal(self.read(rev)[5].get("branch"))