# -*- coding: utf-8 -*- """Delete stale generated .bru files listed in bruno-recon.json (delete section). Safety: only removes files whose meta block carries the `generated` tag.""" import json import os DOCS = r'E:\code\crm-api-docs' RECON = r'e:\code\crm-backend-matt\.scratch\customer-rework\bruno-recon.json' LOG = r'e:\code\crm-backend-matt\.scratch\customer-rework\delete-run.txt' recon = json.load(open(RECON, encoding='utf-8')) delete = recon['delete'] if isinstance(recon, dict) else recon # delete entries: list of repo-relative paths (dir + filename joined) paths = [] for item in delete: if isinstance(item, dict): rel = item.get('path') or (item.get('dir', '') + '\\' + item.get('file', '')) else: rel = str(item) paths.append(rel) out = ['total in delete list: %d' % len(paths)] removed, missing, refused = [], [], [] for rel in paths: p = os.path.join(DOCS, rel) if not os.path.isfile(p): missing.append(rel) continue head = open(p, encoding='utf-8', errors='replace').read(400) if 'generated' not in head: refused.append(rel) continue os.remove(p) removed.append(rel) out.append('removed: %d' % len(removed)) out += [' ' + r for r in removed] out.append('missing (already gone): %d' % len(missing)) out += [' ' + r for r in missing] out.append('refused (no generated tag): %d' % len(refused)) out += [' ' + r for r in refused] open(LOG, 'w', encoding='utf-8').write('\n'.join(out)) print('removed=%d missing=%d refused=%d' % (len(removed), len(missing), len(refused)))