75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding:utf-8 -*-
|
|
# 主执行文件
|
|
|
|
import os
|
|
import sys
|
|
import argparse
|
|
import platform
|
|
import logging
|
|
|
|
from common.logger import get_logger
|
|
from common.config import ConfigManager, DEFAULT_REPO_CONFIGS
|
|
from repodata.checker import RepoChecker
|
|
|
|
logger = get_logger("main")
|
|
|
|
def detect_system_version():
|
|
# 示例:根据实际需求完善
|
|
sys_info = platform.uname()
|
|
# 假设根据发行版和版本号拼接配置文件名
|
|
distro = getattr(sys_info, "system", "unknown").lower()
|
|
version = getattr(sys_info, "release", "unknown")
|
|
config_path = f"config/{distro}_{version}.json"
|
|
if os.path.exists(config_path):
|
|
return config_path
|
|
# 默认配置
|
|
return "config/repo_configs.json"
|
|
|
|
def parse_arguments():
|
|
parser = argparse.ArgumentParser(description='仓库测试检查工具')
|
|
parser.add_argument('--config', type=str, help='配置文件路径')
|
|
parser.add_argument('--output-dir', type=str, default='./results', help='输出目录')
|
|
parser.add_argument('--max-workers', type=int, default=5, help='最大并行检查线程数')
|
|
parser.add_argument('--product', type=str, help='仅检查指定产品')
|
|
parser.add_argument('--arch', type=str, help='仅检查指定架构')
|
|
parser.add_argument('--diff', nargs=2, metavar=('A', 'B'), help='对比两个仓库(名称或链接)')
|
|
parser.add_argument('--verbose', action='store_true', help='显示详细日志')
|
|
return parser.parse_args()
|
|
|
|
def main():
|
|
args = parse_arguments()
|
|
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
|
|
|
|
# 配置文件选择逻辑
|
|
if args.config:
|
|
config_path = args.config
|
|
else:
|
|
config_path = detect_system_version()
|
|
logger.info(f"自动检测配置文件: {config_path}")
|
|
|
|
# 加载配置
|
|
if os.path.exists(config_path):
|
|
repo_configs = ConfigManager.load_json_config(config_path)
|
|
else:
|
|
logger.warning("未找到配置文件,使用默认配置")
|
|
repo_configs = DEFAULT_REPO_CONFIGS
|
|
|
|
# 过滤配置
|
|
# ...根据 args.product 和 args.arch 过滤 repo_configs...
|
|
|
|
# diff 模式
|
|
if args.diff:
|
|
repo_a, repo_b = args.diff
|
|
# ...实现仓库对比逻辑...
|
|
logger.info(f"对比仓库: {repo_a} vs {repo_b}")
|
|
# diff 结果输出
|
|
return 0
|
|
|
|
# 常规检查模式
|
|
checker = RepoChecker(args.output_dir)
|
|
# ...执行检查逻辑...
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |