#!/usr/bin/env python import os import subprocess from pathlib import Path GIT_ROOT = Path(os.environ.get("GIT_ROOT_DIR") or "/srv/git/") def pre(depth: int, last: bool = False) -> str: return (': ' * (depth)) + ("'-" if last else '|-') def is_public(repo: Path) -> bool: cmd = ["git", "config", "-f", f"{repo}/config", "cgit.ignore"] proc = subprocess.run(cmd, stdout=subprocess.PIPE) if proc.stdout.decode().strip() == "1": return False return True def print_dir(dir: str, depth: int): print(f"{pre(depth)}+ {dir}/") def print_repo(repo: str, depth: int, last: bool = False, public: bool = False): print(f"{pre(depth, last=last)} {repo.replace('.git','')} {'' if public else '[h]'}") def run_on_all_repos(root: Path, depth: int = 0): contents = sorted(os.listdir(root)) for element in contents: full_path = root / element if element.startswith("."): pass # ignore hidden files elif element.endswith(".git"): public = is_public(full_path) last = element == contents[-1] print_repo(element, depth, last=last, public=public) elif os.path.isdir(root / element): print_dir(element, depth) run_on_all_repos(root / element, depth=depth+1) if __name__ == "__main__": run_on_all_repos(GIT_ROOT)