diff --git a/tools/repair_trees.py b/tools/repair_trees.py index c2690b7..dac5434 100644 --- a/tools/repair_trees.py +++ b/tools/repair_trees.py @@ -80,7 +80,7 @@ def load_progress(path: Path) -> set[str]: try: data = json.loads(path.read_text(encoding="utf-8")) return set(data.get("finished_video_ids", [])) - except (json.JSONDecodeError, KeyError, TypeError): + except (json.JSONDecodeError, KeyError, TypeError, AttributeError): logger.warning("progress 文件损坏,忽略: {}", path) return set() @@ -390,9 +390,18 @@ async def main_async(args: argparse.Namespace) -> None: all_stats.append(stats) completed += 1 - # 无 error 且非 dry_run 才记 finished + # 修复后重新检测,关键 issue 清零才记 finished if stats["error"] is None and not args.dry_run: - await save_progress(progress_path, progress_lock, vid) + index = TreeIndex.load_json(str(tree_path)) + remaining = [i for i in detect_issues(index) if i.issue_type == "empty_field"] + if not remaining: + await save_progress(progress_path, progress_lock, vid) + else: + logger.warning( + "[{}] 修复后仍有 {} 个 empty_field,不计入 finished", + vid, + len(remaining), + ) # 进度日志 if completed % 10 == 0: