A static page generator for git repositories
git clone git://git.janzachar.dev/spgit.git
0from pathlib import Path1from .repo import page2import html34def link(r, entry) -> str:5 out = "<nav>"67 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> / '1213 if entry.path:14 out += path.name15 out += "</nav>"1617 return out1819def 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()2425 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 += line29 out += '</a></code>\n'30 out += '</pre>'3132 return out3334def 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>"""4546 out += "</ul>"47 return out484950def 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}'!")6162