spgit

A static page generator for git repositories

git clone git://git.janzachar.dev/spgit.git


0from pathlib import Path
1from .repo import page
2import html
3
4def link(r, entry) -> str:
5    out = "<nav>"
6
7    out += f'<a href="{r.meta.page_url}"> HEAD </a> '
8    path = Path(entry.path)
9    for p in path.parents[::-1]:
10        link = r.meta.page_url + "/files/" + str(p)
11        out += f'<a href="{link}.html">{p.name}</a> / '
12
13    if entry.path:
14        out += path.name
15    out += "</nav>"
16
17    return out
18
19def blob(entry) -> str:
20    data = entry.data_stream.read().decode("utf-8")
21    data = html.escape(data)
22    data = data.encode("utf-8", "xmlcharrefreplace")
23    data = data.decode()
24
25    out = '<pre id="entry">'
26    for i,line in enumerate(data.split('\n')):
27        out += f'<code id="l{i}"><a href="#l{i}">{i}</a>'
28        out += line
29        out += '</a></code>\n'
30    out += '</pre>'
31
32    return out
33
34def tree(r, entry) -> str:
35    out = "<ul>"
36    for e in entry.trees + entry.blobs:
37        p = Path(e.path)
38        out += f"""
39            <li id="{e.type}">
40                <a href="{r.meta.page_url}/files/{p}.html">
41                    {p.name}
42                    {'/' if e.type == "tree" else ''}
43                </a>
44            </li>"""
45
46    out += "</ul>"
47    return out
48
49
50def gen(r, entry) -> str:
51    if entry.type == "tree":
52        return page(r,
53            link(r, entry) +
54            tree(r, entry))
55    elif entry.type == "blob":
56        return page(r,
57            link(r, entry) +
58            blob(entry))
59    else:
60        raise ValueError(f"Unknown entry type '{entry.type}'!")
61
62