import os
import re
from collections import defaultdict

def extract_package_name(rpm_filename):
    """提取RPM包的基本名称（去除版本、发布号和架构信息）"""
    # 匹配RPM包命名模式：name-version-release.architecture.rpm
    pattern = r'^(.*?)-(\d+\.\d+\.\d+)-(.*?)\.(.*?)\.rpm$'
    match = re.match(pattern, rpm_filename)
    if match:
        return match.group(1)  # 返回基本包名
    return None

def find_duplicate_rpm_packages(directory):
    """查找目录中的重复RPM包（基于基本包名）"""
    package_map = defaultdict(list)
    
    # 遍历目录中的所有文件
    for filename in os.listdir(directory):
        if filename.endswith('.rpm'):
            base_name = extract_package_name(filename)
            if base_name:
                package_map[base_name].append(filename)
    
    # 筛选出有重复的包
    duplicates = {k: v for k, v in package_map.items() if len(v) > 1}
    return duplicates

def main():
    import sys
    
    if len(sys.argv) != 2:
        print("Usage: python check_rpm_duplicates.py <directory>")
        sys.exit(1)
    
    directory = sys.argv[1]
    if not os.path.isdir(directory):
        print(f"Error: {directory} is not a valid directory")
        sys.exit(1)
    
    duplicates = find_duplicate_rpm_packages(directory)
    
    if duplicates:
        print("Found duplicate RPM packages:")
        for base_name, files in duplicates.items():
            print(f"\nPackage: {base_name}")
            for file in files:
                print(f"  - {file}")
        sys.exit(1)
    else:
        print("No duplicate RPM packages found.")
        sys.exit(0)

if __name__ == "__main__":
    main()
