--- a/mercurial/hgweb/hgweb_mod.py Mon Aug 03 22:15:45 2020 -0700
+++ b/mercurial/hgweb/hgweb_mod.py Tue Aug 04 09:13:10 2020 -0700
@@ -53,7 +53,41 @@
configfn(b'web', b'style'),
b'paper',
)
- return styles, templater.stylemap(styles, templatepath)
+ return styles, _stylemap(styles, templatepath)
+
+
+def _stylemap(styles, path=None):
+ """Return path to mapfile for a given style.
+
+ Searches mapfile in the following locations:
+ 1. templatepath/style/map
+ 2. templatepath/map-style
+ 3. templatepath/map
+ """
+
+ if path is None:
+ path = templater.templatedir()
+
+ 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
+
+ raise RuntimeError(b"No hgweb templates found in %r" % path)
def makebreadcrumb(url, prefix=b''):