# HG changeset patch # User Yuya Nishihara # Date 2015-05-23 02:14:00 # Node ID 38117278f295e13f94676460f0d767dc919b4093 # Parent e164568315165bac0cbe4ef06852109f44dfc1d7 revbranchcache: return uncached branchinfo for nullrev (issue4683) This fixes the crash caused by "branch(null)" revset. No cache should be necessary for nullrev because changelog.branchinfo(nullrev) does not involve IO operation. Note that the problem of "branch(wdir())" isn't addressed by this patch. "wdir()" will raise TypeError in many places because of None. This is the reason why "wdir()" is still experimental. diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py --- a/mercurial/branchmap.py +++ b/mercurial/branchmap.py @@ -341,6 +341,10 @@ class revbranchcache(object): changelog = self._repo.changelog rbcrevidx = rev * _rbcrecsize + # avoid negative index, changelog.read(nullrev) is fast without cache + if rev == nullrev: + return changelog.branchinfo(rev) + # if requested rev is missing, add and populate all missing revs if len(self._rbcrevs) < rbcrevidx + _rbcrecsize: self._rbcrevs.extend('\0' * (len(changelog) * _rbcrecsize - diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -1602,6 +1602,14 @@ prepare repository that has "default" br $ echo default5 >> a $ hg ci -m5 +"null" revision belongs to "default" branch (issue4683) + + $ log 'branch(null)' + 0 + 1 + 4 + 5 + "null" revision belongs to "default" branch, but it shouldn't appear in set unless explicitly specified (issue4682)