reposetup: more explicit namespace setup

This commit is contained in:
Ryan McElroy 2015-03-19 20:51:38 -07:00
parent 0052ab3b1b
commit e9c1e314b6

View File

@ -123,6 +123,7 @@ def exsetcurrent(orig, repo, mark):
writedistance(repo) writedistance(repo)
return res return res
def reposetup(ui, repo): def reposetup(ui, repo):
if not repo.local(): if not repo.local():
return return
@ -133,43 +134,53 @@ def reposetup(ui, repo):
loadremotenames(repo) loadremotenames(repo)
# cache this so we don't iterate over new values ns = namespaces.namespace
items = list(repo.names.iteritems())
for nsname, ns in items:
d = _remotenames.get(nsname)
if not d:
continue
rname = 'remote' + nsname mark2nodes = _remotenames.get('bookmarks')
rtmpl = 'remote' + ns.templatename node2marks = {}
for name, node in mark2nodes.iteritems():
node2marks.setdefault(node[0], []).append(name)
remotebookmarkns = ns(
'remotebookmarks',
templatename='remotebookmarks',
logname='bookmark',
colorname='remotebookmarks',
listnames=lambda repo: mark2nodes.keys(),
namemap=lambda repo, name: mark2nodes.get(name),
nodemap=lambda repo, node: node2marks.get(node, []))
repo.names.addnamespace(remotebookmarkns)
if nsname == 'bookmarks' and hoist: if hoist:
def names(rp, d=d): hoist2nodes = {}
l = d.keys() node2hoists = {}
for name in l: for name, node in mark2nodes.iteritems():
if name.startswith(hoist): if name.startswith(hoist):
l.append(name[len(hoist):]) hoist2nodes[name[len(hoist):]] = node
return l node2hoists.setdefault(node[0], []).append(name)
hoistedmarkns = ns(
'hoistedbookmarks',
templatename='hoistedbookmarks',
logname='hoistedname',
colorname='hoistedname',
listnames=lambda repo: hoist2nodes.keys(),
namemap=lambda repo, name: hoist2nodes.get(name),
nodemap=lambda repo, node: node2hoists.get(name, []))
repo.names.addnamespace(hoistedmarkns)
def namemap(rp, name, d=d): branch2nodes = _remotenames.get('branches')
if name in d: node2branch = {}
return d[name] for name, nodes in branch2nodes.iteritems():
return d.get(hoist + name) for node in nodes:
node2branch[node] = [name]
# we don't hoist nodemap because we don't want hoisted names remotebranchns = ns(
# to show up in logs, which is the primary use case here 'remotebranches',
else: templatename='remotebranches',
names = lambda rp, d=d: d.keys() logname='branch',
namemap = lambda rp, name, d=d: d.get(name) colorname='remotebranch',
listnames=lambda repo: branch2nodes.keys(),
nodemap = lambda rp, node, d=d: [name for name, n in d.iteritems() namemap=lambda repo, name: branch2nodes.get(name),
for n2 in n if n2 == node] nodemap=lambda repo, node: node2branch.get(node, []))
repo.names.addnamespace(remotebranchns)
n = namespaces.namespace(rname, templatename=rtmpl,
logname=ns.templatename, colorname=rtmpl,
listnames=names, namemap=namemap,
nodemap=nodemap)
repo.names.addnamespace(n)
def _tracking(ui): def _tracking(ui):
# omg default true # omg default true