89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
|
|
from sync_core import (
|
|
FileLogger,
|
|
copy_unc_missing_assets,
|
|
import_disk_assets_to_server,
|
|
normalize_path,
|
|
parse_path_list,
|
|
scan_assets,
|
|
stamp_text,
|
|
write_inventory,
|
|
)
|
|
|
|
|
|
def add_common(parser: argparse.ArgumentParser) -> None:
|
|
parser.add_argument("--report-dir", required=True)
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="LT1 asset transfer tool")
|
|
sub = parser.add_subparsers(dest="command", required=True)
|
|
|
|
scan = sub.add_parser("scan-server", help="Scan server asset paths and write a JSON inventory")
|
|
add_common(scan)
|
|
scan.add_argument("--server-roots", required=True, help="Server asset paths separated by semicolon/newline")
|
|
scan.add_argument("--output-json", required=True)
|
|
|
|
copy = sub.add_parser("copy-unc", help="Copy UNC assets that are missing from server inventory")
|
|
add_common(copy)
|
|
copy.add_argument("--server-json", required=True)
|
|
copy.add_argument("--unc-roots", required=True, help="UNC source paths separated by semicolon/newline")
|
|
copy.add_argument("--targets", required=True, help="Copy target paths separated by semicolon/newline")
|
|
copy.add_argument("--execute", action="store_true")
|
|
|
|
imp = sub.add_parser("import-disk", help="Copy or move disk assets into server asset paths")
|
|
add_common(imp)
|
|
imp.add_argument("--disk-roots", required=True, help="Disk asset paths separated by semicolon/newline")
|
|
imp.add_argument("--server-roots", required=True, help="Server asset paths separated by semicolon/newline")
|
|
imp.add_argument("--execute", action="store_true")
|
|
imp.add_argument("--move", action="store_true")
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
report_dir = normalize_path(args.report_dir)
|
|
logger = FileLogger(report_dir / "logs" / f"cli_{stamp_text()}.log", print)
|
|
|
|
if args.command == "scan-server":
|
|
roots = parse_path_list(args.server_roots)
|
|
assets = scan_assets(roots, log=logger)
|
|
write_inventory(normalize_path(args.output_json), assets, [str(root) for root in roots])
|
|
logger(f"服务器资产 JSON 已生成:{args.output_json},资产 {len(assets)} 个")
|
|
return 0
|
|
|
|
if args.command == "copy-unc":
|
|
report = copy_unc_missing_assets(
|
|
parse_path_list(args.unc_roots),
|
|
normalize_path(args.server_json),
|
|
parse_path_list(args.targets),
|
|
report_dir / "reports",
|
|
execute=args.execute,
|
|
log=logger,
|
|
)
|
|
failed = sum(1 for item in report if item.action == "failed")
|
|
return 1 if failed else 0
|
|
|
|
if args.command == "import-disk":
|
|
report = import_disk_assets_to_server(
|
|
parse_path_list(args.disk_roots),
|
|
parse_path_list(args.server_roots),
|
|
report_dir / "reports",
|
|
execute=args.execute,
|
|
move=args.move,
|
|
log=logger,
|
|
)
|
|
failed = sum(1 for item in report if item.action == "failed")
|
|
logger("导入后请重新执行 scan-server,生成新的随身 JSON。")
|
|
return 1 if failed else 0
|
|
|
|
raise ValueError(f"Unsupported command: {args.command}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|