|
|
@@ -179,7 +179,25 @@ def main() -> int:
|
|
|
prov = {}
|
|
|
|
|
|
def take(rel: str, src_path=None, src_bytes=None):
|
|
|
- """补齐一件 (或在位则只记账)。src_path=目录来源, src_bytes=zip 来源。"""
|
|
|
+ """补齐一件 (或在位则只记账)。src_path=目录来源, src_bytes=zip 来源。
|
|
|
+
|
|
|
+ ★ 日志不补进产物仓 (2026-09-17): 历史交付包里把构建日志也当产物发过 (如
|
|
|
+ `m5_cms_tcm/shared_component_bandpower.log`)。用户令 2 定的是"运行日志只在 logs/",
|
|
|
+ 所以这里把它直接落到 `logs/build/<场>/…` —— 数据没丢, 但不再算产物、也不进台账
|
|
|
+ (否则每从旧包补一次, `guanlan.py check` 的「日志统一」就红一次: 日志跑到 logs/ 外面了)。
|
|
|
+ """
|
|
|
+ low = rel.lower()
|
|
|
+ if low.endswith(('.log', '.jsonl')):
|
|
|
+ from src import logfile as _lf
|
|
|
+ dst_log = _lf.build_log(rel, P.farm())
|
|
|
+ prov[rel] = dict(source='log-relocated', why='包内日志: 按用户令 2 落到 logs/build/, 不算产物')
|
|
|
+ if not a.dry_run:
|
|
|
+ dst_log.parent.mkdir(parents=True, exist_ok=True)
|
|
|
+ if src_bytes is not None:
|
|
|
+ dst_log.write_bytes(src_bytes)
|
|
|
+ elif src_path is not None:
|
|
|
+ shutil.copy2(src_path, dst_log)
|
|
|
+ return
|
|
|
dst = dest_root / rel
|
|
|
if dst.exists():
|
|
|
# 已存在的件分两类: 我们自己重算的(raw-derived) 与 上轮已补齐的(shipped)。
|
|
|
@@ -244,13 +262,19 @@ def main() -> int:
|
|
|
by_store = {}
|
|
|
for rel, m in prov.items():
|
|
|
store = rel.split('/')[0]
|
|
|
- d = by_store.setdefault(store, {'raw-derived': 0, 'shipped': 0})
|
|
|
+ d = by_store.setdefault(store, {'raw-derived': 0, 'shipped': 0, 'log-relocated': 0})
|
|
|
+ d.setdefault(m['source'], 0)
|
|
|
d[m['source']] += 1
|
|
|
- print(f'{"仓":26s} {"raw 重算":>9s} {"随包补齐":>9s}')
|
|
|
+ moved = sum(d['log-relocated'] for d in by_store.values())
|
|
|
+ print(f'{"仓":26s} {"raw 重算":>9s} {"随包补齐":>9s}' + (f' {"日志归位":>9s}' if moved else ''))
|
|
|
for store, d in sorted(by_store.items()):
|
|
|
- print(f' {store:24s} {d["raw-derived"]:9d} {d["shipped"]:9d}')
|
|
|
- tot = {k: sum(d[k] for d in by_store.values()) for k in ('raw-derived', 'shipped')}
|
|
|
- print(f' {"合计":24s} {tot["raw-derived"]:9d} {tot["shipped"]:9d}')
|
|
|
+ print(f' {store:24s} {d["raw-derived"]:9d} {d["shipped"]:9d}'
|
|
|
+ + (f' {d["log-relocated"]:9d}' if moved else ''))
|
|
|
+ tot = {k: sum(d[k] for d in by_store.values()) for k in ('raw-derived', 'shipped', 'log-relocated')}
|
|
|
+ print(f' {"合计":24s} {tot["raw-derived"]:9d} {tot["shipped"]:9d}'
|
|
|
+ + (f' {tot["log-relocated"]:9d}' if moved else ''))
|
|
|
+ if moved:
|
|
|
+ print(f' (日志不落产物仓: {moved} 件按用户令 2 落到 logs/build/, 不计入产物台账)')
|
|
|
|
|
|
if a.dry_run:
|
|
|
print('\n(dry-run, 未写盘)')
|