85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
"""Remove YAML frontmatter from all markdown files in the repo.
|
|
|
|
Frontmatter is the block delimited by `---` at the very start of a file:
|
|
---
|
|
title: ...
|
|
---
|
|
The script strips that block (and any immediately following blank lines)
|
|
from every .md file found recursively under the target directory.
|
|
"""
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
FRONTMATTER_RE = re.compile(r"\A---\r?\n.*?\r?\n---\r?\n?", re.DOTALL)
|
|
|
|
|
|
def strip_frontmatter(content: str) -> str:
|
|
"""Return content with leading YAML frontmatter removed."""
|
|
m = FRONTMATTER_RE.match(content)
|
|
if not m:
|
|
return content
|
|
rest = content[m.end():]
|
|
# Trim leading blank lines left behind after the frontmatter.
|
|
return rest.lstrip("\r\n")
|
|
|
|
|
|
def process_file(path: str, dry_run: bool = False) -> bool:
|
|
"""Strip frontmatter from one file. Returns True if changed."""
|
|
try:
|
|
with open(path, "r", encoding="utf-8-sig", newline="") as f:
|
|
original = f.read()
|
|
except (UnicodeDecodeError, OSError) as e:
|
|
print(f" ! skip (read error): {path} ({e})")
|
|
return False
|
|
|
|
updated = strip_frontmatter(original)
|
|
if updated == original:
|
|
return False
|
|
|
|
if dry_run:
|
|
print(f" ~ would strip frontmatter: {path}")
|
|
else:
|
|
with open(path, "w", encoding="utf-8", newline="") as f:
|
|
f.write(updated)
|
|
print(f" ✓ stripped frontmatter: {path}")
|
|
return True
|
|
|
|
|
|
def main() -> None:
|
|
args = [a for a in sys.argv[1:] if a != "--dry-run"]
|
|
dry_run = "--dry-run" in sys.argv
|
|
root = args[0] if args else os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# Only process these subdirectories under root.
|
|
target_dirs = ["agentss", "promps"]
|
|
|
|
print(f"Scanning: {root} (dirs: {', '.join(target_dirs)})"
|
|
+ (" (dry run)" if dry_run else ""))
|
|
changed = 0
|
|
total = 0
|
|
for sub in target_dirs:
|
|
sub_root = os.path.join(root, sub)
|
|
if not os.path.isdir(sub_root):
|
|
print(f" ! directory not found, skipping: {sub_root}")
|
|
continue
|
|
for dirpath, _dirs, files in os.walk(sub_root):
|
|
# Skip hidden dirs.
|
|
if os.path.basename(dirpath).startswith("."):
|
|
continue
|
|
for name in files:
|
|
if not name.lower().endswith(".md"):
|
|
continue
|
|
total += 1
|
|
full = os.path.join(dirpath, name)
|
|
if process_file(full, dry_run=dry_run):
|
|
changed += 1
|
|
|
|
print(f"\nDone. {changed} of {total} markdown file(s) "
|
|
f"{'would be ' if dry_run else ''}modified.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|