ARCH: Clean Core Refactor & Terminology Alignment
This commit is contained in:
82
system/scripts/repair_inbox_metadata.py
Normal file
82
system/scripts/repair_inbox_metadata.py
Normal file
@@ -0,0 +1,82 @@
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
def get_git_creation_date(file_path, line_number):
|
||||
try:
|
||||
# Use git blame to find the timestamp of the line
|
||||
cmd = ["git", "blame", "-L", f"{line_number},{line_number}", "--porcelain", file_path]
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
for line in result.stdout.split('\n'):
|
||||
if line.startswith('author-time '):
|
||||
timestamp = int(line.split(' ')[1])
|
||||
return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d")
|
||||
except Exception as e:
|
||||
pass
|
||||
return None
|
||||
|
||||
def repair_file(file_path):
|
||||
print(f"Repairing {file_path}...")
|
||||
with open(file_path, 'r') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
new_lines = []
|
||||
modified = False
|
||||
|
||||
i = 0
|
||||
while i < len(lines):
|
||||
line = lines[i]
|
||||
new_lines.append(line)
|
||||
|
||||
# Look for headline
|
||||
if line.startswith('*'):
|
||||
# Find the PROPERTIES drawer
|
||||
j = i + 1
|
||||
has_properties = False
|
||||
has_created = False
|
||||
properties_line_idx = -1
|
||||
|
||||
# Check up to 10 lines ahead for performance
|
||||
while j < len(lines) and j < i + 10 and not lines[j].startswith('*'):
|
||||
if ":PROPERTIES:" in lines[j]:
|
||||
has_properties = True
|
||||
properties_line_idx = j
|
||||
if ":CREATED:" in lines[j]:
|
||||
has_created = True
|
||||
break
|
||||
if ":END:" in lines[j]:
|
||||
break
|
||||
j += 1
|
||||
|
||||
if has_properties and not has_created:
|
||||
# Use git blame on the headline line
|
||||
creation_date = get_git_creation_date(file_path, i + 1)
|
||||
|
||||
if creation_date:
|
||||
dt = datetime.strptime(creation_date, "%Y-%m-%d")
|
||||
org_date = dt.strftime("[%Y-%m-%d %a]")
|
||||
|
||||
# Advance and append original lines until :PROPERTIES:
|
||||
while i < properties_line_idx:
|
||||
i += 1
|
||||
new_lines.append(lines[i])
|
||||
|
||||
new_lines.append(f":CREATED: {org_date}\n")
|
||||
modified = True
|
||||
i += 1
|
||||
|
||||
if modified:
|
||||
with open(file_path, 'w') as f:
|
||||
f.writelines(new_lines)
|
||||
print(f"DONE: Repaired {file_path}")
|
||||
else:
|
||||
print(f"SKIP: No changes needed for {file_path}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Test on a small portion first if needed, but here we go
|
||||
files = ["inbox-atoms.org", "inbox-emacs.org", "inbox-posts.org"]
|
||||
for f in files:
|
||||
if os.path.exists(f):
|
||||
repair_file(f)
|
||||
Reference in New Issue
Block a user