diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -1669,7 +1669,7 @@ # templates p = templater.templatedir() - fm.write(b'templatedirs', b'checking templates (%s)...\n', p) + fm.write(b'templatedirs', b'checking templates (%s)...\n', p or b'') fm.condwrite(not p, b'', _(b" no template directories found\n")) if p: m = templater.templatepath(b"map-cmdline.default") diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py --- a/mercurial/hgweb/hgwebdir_mod.py +++ b/mercurial/hgweb/hgwebdir_mod.py @@ -415,7 +415,8 @@ static = self.ui.config(b"web", b"static", untrusted=False) if not static: tp = self.templatepath or templater.templatedir() - static = [os.path.join(tp, b'static')] + if tp is not None: + static = [os.path.join(tp, b'static')] staticfile(static, fname, res) return res.sendresponse() diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -828,6 +828,8 @@ def include(rel, abs, remap, sections): templatedirs = [base, templatedir()] for dir in templatedirs: + if dir is None: + continue abs = os.path.normpath(os.path.join(dir, rel)) if os.path.isfile(abs): data = util.posixfile(abs, b'rb').read() @@ -850,13 +852,15 @@ # fallback check in template paths if not os.path.exists(path): - p2 = util.normpath(os.path.join(templatedir(), val)) - if os.path.isfile(p2): - path = p2 - else: - p3 = util.normpath(os.path.join(p2, b"map")) - if os.path.isfile(p3): - path = p3 + dir = templatedir() + if dir is not None: + p2 = util.normpath(os.path.join(dir, val)) + if os.path.isfile(p2): + path = p2 + else: + p3 = util.normpath(os.path.join(p2, b"map")) + if os.path.isfile(p3): + path = p3 cache, tmap, aliases = _readmapfile(path) @@ -1064,6 +1068,9 @@ def templatepath(name): '''return location of template file. returns None if not found.''' + dir = templatedir() + if dir is None: + return None f = os.path.join(templatedir(), name) if f and os.path.exists(f): return f @@ -1085,22 +1092,23 @@ if isinstance(styles, bytes): styles = [styles] - for style in styles: - # only plain name is allowed to honor template paths - if ( - not style - or style in (pycompat.oscurdir, pycompat.ospardir) - or pycompat.ossep in style - or pycompat.osaltsep - and pycompat.osaltsep in style - ): - continue - locations = [os.path.join(style, b'map'), b'map-' + style] - locations.append(b'map') + if path is not None: + for style in styles: + # only plain name is allowed to honor template paths + if ( + not style + or style in (pycompat.oscurdir, pycompat.ospardir) + or pycompat.ossep in style + or pycompat.osaltsep + and pycompat.osaltsep in style + ): + continue + locations = [os.path.join(style, b'map'), b'map-' + style] + locations.append(b'map') - for location in locations: - mapfile = os.path.join(path, location) - if os.path.isfile(mapfile): - return style, mapfile + for location in locations: + mapfile = os.path.join(path, location) + if os.path.isfile(mapfile): + return style, mapfile raise RuntimeError(b"No hgweb templates found in %r" % path)