17 lines
2.1 KiB
Python
17 lines
2.1 KiB
Python
from pathlib import Path
|
|
import json,gzip,hashlib,time
|
|
r=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');base=r/'docs/plans/original-completion-2026-10-02/execution';root=Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-review-7d78df63/.review-material');own=json.loads((root/'manifest.json').read_text());assert own['candidate']=='265ce30f81b1302ca374330f7129f02d6fde4697';refs={}
|
|
for batch in ['drive-offload-review-material-r04-20261015','drive-offload-cold-r06-20261015']:
|
|
m=json.loads(gzip.decompress((base/batch/'MANIFEST.json.gz').read_bytes()));v=json.loads((base/batch/'CLOUD_ARCHIVE_VERIFIED.json').read_text());assert v['actual_cloud_readback']
|
|
for x in m['members']:
|
|
if x['type']=='file':refs.setdefault(x['sha256'],{'batch':batch,'bytes':x['bytes']})
|
|
rows=[];missing={};t=time.monotonic()
|
|
for p in sorted(root.rglob('*')):
|
|
assert not p.is_symlink();s=p.stat();row={'path':str(p.relative_to(root)),'type':'directory' if p.is_dir() else 'file','mode':s.st_mode&0o777,'mtime_ns':s.st_mtime_ns}
|
|
if p.is_file():
|
|
with p.open('rb') as f:h=hashlib.file_digest(f,'sha256').hexdigest()
|
|
ref=refs.get(h);assert ref is None or ref['bytes']==s.st_size;row.update(bytes=s.st_size,sha256=h,existing_cloud_batch=ref['batch'] if ref else None)
|
|
if not ref:missing.setdefault(h,{'path':str(p),'bytes':s.st_size})
|
|
rows.append(row)
|
|
result={'source':str(root),'candidate':own['candidate'],'backend_completed':True,'members':rows,'file_count':sum(x['type']=='file' for x in rows),'logical_bytes':sum(x.get('bytes',0)for x in rows),'uncovered_unique_objects':missing,'uncovered_unique_bytes':sum(x['bytes']for x in missing.values()),'seconds':time.monotonic()-t,'source_retired':False,'formal_credit':0};e=base/'drive-offload-p18-review-r08-20261015';e.mkdir(exist_ok=False);raw=json.dumps(result,ensure_ascii=False,indent=2).encode();(e/'COVERAGE_PRECHECK.json.gz').write_bytes(gzip.compress(raw,mtime=0));print({k:v for k,v in result.items() if k not in ['members','uncovered_unique_objects']});print('uncovered_objects',len(missing))
|