[PATCH 5 of 5] localrepo: add ignoremissing parameter to branchtip

Sean Farley sean.michael.farley at gmail.com
Wed Jan 7 18:15:56 CST 2015


# HG changeset patch
# User Sean Farley <sean.michael.farley at gmail.com>
# 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"""


More information about the Mercurial-devel mailing list