Преглед изворни кода

products_state.py: 修 --on 漏还随包基线 (baseline_kept 判断写在 move 之后恒为 False)

zhouyang.xie пре 1 месец
родитељ
комит
351a9965b6
1 измењених фајлова са 14 додато и 8 уклоњено
  1. 14 8
      scripts/products_state.py

+ 14 - 8
scripts/products_state.py

@@ -69,12 +69,16 @@ def do_off() -> int:
     man = []
     # 随包基线备份藏在 windscada 里面: 先摘出来, 它不是产物 (rebuild_from_raw.py --verify 要用)
     baseline = P.store() / KEEP[0]
+    baseline_kept = False
+    kept_at = OFF / '_baseline_kept' / KEEP[0]
     if baseline.exists():
-        dst = OFF / '_baseline_kept' / KEEP[0]
-        dst.parent.mkdir(parents=True, exist_ok=True)
-        n, mb = count(baseline)
-        shutil.move(str(baseline), str(dst))
-        print(f'  保留 {P.rel(baseline):34s} {n:5d} 件 {mb:8.1f} MB  (随包基线, 不算产物)')
+        if not kept_at.exists():
+            kept_at.parent.mkdir(parents=True, exist_ok=True)
+            n, mb = count(baseline)
+            shutil.move(str(baseline), str(kept_at))
+            print(f'  保留 {P.rel(baseline):34s} {n:5d} 件 {mb:8.1f} MB  (随包基线, 不算产物)')
+    kept_at = OFF / '_baseline_kept' / KEEP[0]
+    baseline_kept = kept_at.exists()          # ★必须在 move **之后**判 (2026-09-11 曾写成之前 → 恒 False, --on 就不还原基线)
     for src, dst in items:
         if not src.exists():
             continue
@@ -84,7 +88,7 @@ def do_off() -> int:
         man.append(dict(rel=P.rel(src), to=P.rel(dst), files=n, mb=round(mb, 1)))
         print(f'  挪走 {P.rel(src):34s} {n:5d} 件 {mb:8.1f} MB')
     MANIFEST.write_text(json.dumps(dict(at=time.strftime('%Y-%m-%d %H:%M:%S'),
-                                        baseline_kept=bool(baseline.exists()), items=man),
+                                        baseline_kept=baseline_kept, items=man),
                                    ensure_ascii=False, indent=1), encoding='utf-8')
     print(f'\n共 {len(man)} 项已挪到 {P.rel(OFF)} (清单: {P.rel(MANIFEST)})')
     print(f'还原: python scripts/products_state.py --on')
@@ -108,11 +112,13 @@ def do_on() -> int:
         shutil.move(str(src), str(dst))
         n += 1
         print(f'  还原 {it["rel"]:34s} {it["files"]:5d} 件')
-    if man.get('baseline_kept'):
-        b = OFF / '_baseline_kept' / KEEP[0]
+    if man.get('baseline_kept') or (OFF / '_baseline_kept' / KEEP[0]).exists():
+        b = OFF / '_baseline_kept' / KEEP[0]        # 不看清单标记, 直接看备份在不在 (更稳)
         if b.exists():
             target = P.store() / KEEP[0]
             target.parent.mkdir(parents=True, exist_ok=True)
+            if target.exists():
+                shutil.rmtree(target)
             shutil.move(str(b), str(target))
             print(f'  还原 {P.rel(target):34s} (随包基线)')
     if OFF.exists() and not any(OFF.rglob('*')):