51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Precise (id,line) -> end_line/bytes delta between my parse and the pin."""
|
|
import importlib.util
|
|
import json
|
|
import re
|
|
import sys
|
|
|
|
BEGIN = "<!-- queue-index:begin -->"
|
|
END = "<!-- queue-index:end -->"
|
|
doc = open("/root/troupe-standup/docs/queue-index.md", encoding="utf-8").read()
|
|
body = doc.split(BEGIN, 1)[1].split(END, 1)[0]
|
|
m = re.search(r"```json\n(.*?)\n```", body, re.S)
|
|
pinned = json.loads(m.group(1))
|
|
|
|
SPEC = importlib.util.spec_from_file_location(
|
|
"qe", "/root/troupe-standup/wizard-work/ledger/queue-extract.py")
|
|
qm = importlib.util.module_from_spec(SPEC)
|
|
SPEC.loader.exec_module(qm)
|
|
mine, _, _ = qm.extract()
|
|
|
|
pin_by_key = {(it["id"], it["line"]): it for it in pinned["items"]}
|
|
mine_by_key = {(it["id"], it["line"]): it for it in mine}
|
|
|
|
delta = []
|
|
for k in sorted(set(pin_by_key) & set(mine_by_key), key=lambda t: (t[1], t[0])):
|
|
pa, ma = pin_by_key[k], mine_by_key[k]
|
|
if pa["end_line"] != ma["end_line"] or pa["lines"] != ma["lines"] or pa["bytes"] != ma["bytes"]:
|
|
delta.append((k, pa, ma))
|
|
print("total shared keys:", len(pin_by_key))
|
|
print("keys with end_line/lines/bytes divergence:", len(delta))
|
|
for k, pa, ma in delta:
|
|
print(" %s mine(end=%-5d lines=%-4d by=%-6d) pin(end=%-5d lines=%-4d by=%-6d)" %
|
|
(k, ma["end_line"], ma["lines"], ma["bytes"], pa["end_line"], pa["lines"], pa["bytes"]))
|
|
|
|
content = open("/root/troupe-standup/WORK-QUEUE.md", encoding="utf-8").read()
|
|
lines, trailing = qm.split_lines(content)
|
|
fenced = qm.fence_mask(lines)
|
|
items, end_of = qm.build_items(lines, fenced)
|
|
sizes2 = [qm.line_bytes(ln, i == len(lines) - 1, trailing) for i, ln in enumerate(lines)]
|
|
spans = sorted([(it["line"], end_of(it["line"])) for it in items])
|
|
overlap = 0
|
|
prev_end = 0
|
|
for (a, b) in spans:
|
|
if a < prev_end + 1:
|
|
overlap += 1
|
|
prev_end = max(prev_end, b)
|
|
print("items:", len(items), "first:", items[0]["line"], "last:", items[-1]["end_line"])
|
|
print("overlap count:", overlap)
|
|
print("end of last:", items[-1]["end_line"], "file lines:", len(lines))
|
|
print("my item byte sum:", sum(it["bytes"] for it in items))
|