diff -r 4ccd5ec565c2 -r d5ccc059fbcd mercurial/templater.py --- a/mercurial/templater.py Wed Jul 22 00:09:17 2020 -0700 +++ b/mercurial/templater.py Fri Jul 24 11:24:59 2020 -0700 @@ -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)