diff -r a35d0128545e -r bebb05a7e249 mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py Tue Jan 08 04:15:46 2013 +0100 +++ b/mercurial/hgweb/hgweb_mod.py Wed Nov 28 20:21:26 2012 +0100 @@ -24,6 +24,30 @@ 'pushkey': 'push', } +def makebreadcrumb(url): + '''Return a 'URL breadcrumb' list + + A 'URL breadcrumb' is a list of URL-name pairs, + corresponding to each of the path items on a URL. + This can be used to create path navigation entries. + ''' + if url.endswith('/'): + url = url[:-1] + relpath = url + if relpath.startswith('/'): + relpath = relpath[1:] + + breadcrumb = [] + urlel = url + pathitems = [''] + relpath.split('/') + for pathel in reversed(pathitems): + if not pathel or not urlel: + break + breadcrumb.append({'url': urlel, 'name': pathel}) + urlel = os.path.dirname(urlel) + return reversed(breadcrumb) + + class hgweb(object): def __init__(self, repo, name=None, baseui=None): if isinstance(repo, str): @@ -285,7 +309,8 @@ "header": header, "footer": footer, "motd": motd, - "sessionvars": sessionvars + "sessionvars": sessionvars, + "pathdef": makebreadcrumb(req.url), }) return tmpl