diff options
Diffstat (limited to 'Omni/Dev/GitStats.py')
-rwxr-xr-x | Omni/Dev/GitStats.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Omni/Dev/GitStats.py b/Omni/Dev/GitStats.py new file mode 100755 index 0000000..8a6328d --- /dev/null +++ b/Omni/Dev/GitStats.py @@ -0,0 +1,50 @@ +#!/usr/bin/env run.sh +# : run gitstats +# : out gitstats-serve +""" +Show gitstats for the omnirepo. + +Generates gitstats HTML output in _/var, then starts a webserver to serve that +directory. +""" + +import http.server +import os +import pathlib +import subprocess +import sys + + +def main() -> None: + """Serve gitstats on localhost:8000. + + Raises: + ValueError: if CODEROOT is not set + """ + if "test" in sys.argv: + # test that gitstats in available, and exit + sys.exit(subprocess.run(["which", "gitstats"], check=False).returncode) + root = os.getenv("CODEROOT") + if root is None: + msg = "CODEROOT is not set" + raise ValueError(msg) + omni_dir = pathlib.Path(root) + out_dir = omni_dir / "_" / "var" / "gitstats" + subprocess.check_call([ + "gitstats", + str(omni_dir), + str(out_dir), + ]) + addr = ("", 8000) + handler = http.server.SimpleHTTPRequestHandler + pwd = pathlib.Path.cwd() + os.chdir(out_dir) + with http.server.HTTPServer(addr, handler) as httpd: + host, port = httpd.socket.getsockname()[:2] + sys.stdout.write(f"serving gitstats on http://{host}:{port}\n") + sys.stdout.flush() + try: + httpd.serve_forever() + except KeyboardInterrupt: + sys.stdout.write("\nstopping httpd\n") + os.chdir(pwd) |