diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -18,6 +18,7 @@ import tags as tagsmod from lock import release import weakref, errno, os, time, inspect import branchmap, pathutil +import namespaces propertycache = util.propertycache filecache = scmutil.filecache @@ -297,6 +298,9 @@ class localrepository(object): # - bookmark changes self.filteredrevcache = {} + # generic mapping between names and nodes + self.names = namespaces.namespaces(self) + def close(self): pass diff --git a/mercurial/namespaces.py b/mercurial/namespaces.py --- a/mercurial/namespaces.py +++ b/mercurial/namespaces.py @@ -35,6 +35,11 @@ class namespaces(object): self._names = util.sortdict() self._repo = weakref.ref(repo) + # we need current mercurial named objects (bookmarks, tags, and + # branches) to be initialized somewhere, so that place is here + self.addnamespace("bookmarks", + lambda repo, name: tolist(repo._bookmarks.get(name))) + @property def repo(self): return self._repo() diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py +++ b/mercurial/statichttprepo.py @@ -8,7 +8,7 @@ # GNU General Public License version 2 or any later version. from i18n import _ -import changelog, byterange, url, error +import changelog, byterange, url, error, namespaces import localrepo, manifest, util, scmutil, store import urllib, urllib2, errno, os @@ -106,6 +106,8 @@ class statichttprepository(localrepo.loc self.vfs = self.opener self._phasedefaults = [] + self.names = namespaces.namespaces(self) + try: requirements = scmutil.readrequires(self.opener, self.supported) except IOError, inst: