| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- r"""`pack.bat verify` 的入口:找最新的交付包(或用户给的路径)→ 交给 pack_dist.py --verify。
- 为什么要单独一个: `pack.bat verify` 不带参数时应该"自动找最新那个 zip",而批处理里做这个
- (dir /b /o-d 之类) 既啰嗦又在中文路径上不稳 —— 放到 Python 里三行搞定,批处理只负责传参。
- 用法:
- python scripts/pack_verify_entry.py # 找 <安装根父目录>/guanlan-v*_dist_*.zip 里最新的
- python scripts/pack_verify_entry.py <zip 路径>
- """
- from __future__ import annotations
- try:
- from app_common.app_common_guanlan.api import install_root as _install_root
- except ImportError: # 理论不可达;包结构异常时回退到按位置上跳
- from pathlib import Path as _P
- def _install_root(_f): return _P(_f).resolve().parents[4]
- import pathlib
- import subprocess
- import sys
- ROOT = _install_root(__file__)
- def newest_zip() -> pathlib.Path | None:
- """找最新的交付包: 先看安装根的父目录(打包器默认输出处), 再看安装根自己。"""
- cands: list[pathlib.Path] = []
- for d in (ROOT.parent, ROOT):
- if d.is_dir():
- cands += [p for p in d.glob('guanlan-*.zip') if p.is_file()]
- cands += [p for p in d.glob('*guanlan*v*.zip') if p.is_file()]
- cands = sorted(set(cands), key=lambda p: p.stat().st_mtime, reverse=True)
- return cands[0] if cands else None
- def main() -> int:
- arg = sys.argv[1] if len(sys.argv) > 1 else ''
- zp = pathlib.Path(arg) if arg else newest_zip()
- if zp is None or not zp.is_file():
- print('[X] 找不到交付包 zip。给一个路径: python scripts/pack_verify_entry.py <zip>')
- return 2
- print(f'[i] 开箱验证: {zp} ({zp.stat().st_size/1e6:.0f} MB)')
- if arg == '' and not str(zp).startswith(str(ROOT.parent)):
- pass
- return subprocess.call([sys.executable, str(ROOT / 'scripts' / 'pack_dist.py'), '--verify', str(zp)],
- cwd=str(ROOT))
- if __name__ == '__main__':
- sys.exit(main())
|