From patchwork Thu Jan 8 00:15:56 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [5,of,5] localrepo: add ignoremissing parameter to branchtip From: Sean Farley X-Patchwork-Id: 7372 Message-Id: <9daf4c4a0221192b5a5d.1420676156@laptop.local> To: mercurial-devel@selenic.com Date: Wed, 07 Jan 2015 16:15:56 -0800 # HG changeset patch # User Sean Farley # Date 1413521368 25200 # Thu Oct 16 21:49:28 2014 -0700 # Node ID 9daf4c4a0221192b5a5dd5625cf2c901ebec2c72 # Parent b4996d3d9ed2de964a9507b66932084f86bbbc76 localrepo: add ignoremissing parameter to branchtip Previously, in the namespaces api, the only caller of branchtip was singlenode which happened to raise the same exception that branchtip raised: KeyError. This is a minor change but will allow upcoming patches to use repo.branchtip to not raise an exception if a branch doesn't exist. After that, it will be possible for extensions to use the namespace api in a stable way. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -716,16 +716,25 @@ class localrepository(object): '''returns a dictionary {branch: [branchheads]} with branchheads ordered by increasing revision number''' branchmap.updatecache(self) return self._branchcaches[self.filtername] - def branchtip(self, branch): - '''return the tip node for a given branch''' + def branchtip(self, branch, ignoremissing=False): + '''return the tip node for a given branch + + If ignoremissing is True, then this method will not raise an error. + This is helpful for callers that only expect None for a missing branch + (e.g. namespace). + + ''' try: return self.branchmap().branchtip(branch) except KeyError: - raise error.RepoLookupError(_("unknown branch '%s'") % branch) + if not ignoremissing: + raise error.RepoLookupError(_("unknown branch '%s'") % branch) + else: + pass def lookup(self, key): return self[key].node() def lookupbranch(self, key, remote=None): diff --git a/mercurial/namespaces.py b/mercurial/namespaces.py --- a/mercurial/namespaces.py +++ b/mercurial/namespaces.py @@ -39,11 +39,11 @@ class namespaces(object): lambda repo, name: repo.nodetags(name)) self.addnamespace(n) n = ns("branches", "branch", lambda repo: repo.branchmap().keys(), - lambda repo, name: tolist(repo.branchtip(name)), + lambda repo, name: tolist(repo.branchtip(name, True)), lambda repo, node: [repo[node].branch()]) self.addnamespace(n) def __getitem__(self, namespace): """returns the namespace object"""