You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.4 KiB
36 lines
1.4 KiB
"""Audit docs repo git history: .bru counts per commit + did the 6 missing files ever exist?"""
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
|
|
if sys.stdout.encoding.lower() != "utf-8":
|
|
sys.stdout.reconfigure(encoding="utf-8")
|
|
|
|
REPO = r"E:\code\crm-api-docs"
|
|
|
|
def git(*args):
|
|
r = subprocess.run(["git", "-C", REPO, "-c", "core.quotepath=false"] + list(args),
|
|
capture_output=True)
|
|
if r.returncode != 0:
|
|
raise RuntimeError(r.stderr.decode("utf-8", "replace"))
|
|
return r.stdout.decode("utf-8", "replace")
|
|
|
|
commits = [line.split("|")[0] for line in git("log", "--format=%h|%ci|%s|%d").splitlines()]
|
|
print(f"commits on HEAD branch: {len(commits)}")
|
|
|
|
target_frag = ("战略协议", "batch-update")
|
|
for c in commits:
|
|
files = git("ls-tree", "-r", c, "--name-only").splitlines()
|
|
bru = [f for f in files if f.endswith(".bru")]
|
|
hit = [f for f in bru if any(t in f for t in target_frag)]
|
|
print(f"{c}: {len(bru)} .bru, agreement/batch-update hits: {len(hit)}")
|
|
for h in hit:
|
|
print(f" {h}")
|
|
|
|
print("--- fsck dangling/unreachable (lost commits check) ---")
|
|
fsck = subprocess.run(["git", "-C", REPO, "fsck", "--lost-found"], capture_output=True)
|
|
out = fsck.stdout.decode("utf-8", "replace") + fsck.stderr.decode("utf-8", "replace")
|
|
print(out[:2000] if out.strip() else "(no output)")
|
|
|
|
print("--- all refs ---")
|
|
print(git("for-each-ref", "--format=%(refname:short) %(objectname:short)").strip() or "(none)")
|
|
|