#!/usr/bin/python3 import re import sys from collections import defaultdict import pathlib REs = { 'deb': r'(?P[\w-]*)_(?P[\d.]*)-(?P\d)(?P\w*)_(?P[\w\d]*)\.deb', 'rpm': r'(?P.+)-(?P[^-]+)-(?P[^.]+)\.(?P[^.]+)\.(?P[^.]+)\.rpm', } tests = [ 'python3-ceph-common-20.1.0-0.el9.aarch64.rpm', 'ceph-20.1.0-0.el9.aarch64.rpm', 'rbd-nbd-20.1.0-0.el9.x86_64.rpm', 'ceph-20.1.0-0.el9.x86_64.rpm', 'cephadm-20.1.0-0.el9.noarch.rpm', 'cephfs-top-20.1.0-0.el9.noarch.rpm', 'python3-rados_20.1.0-1jammy_amd64.deb', 'python3-rados_20.1.0-1jammy_arm64.deb', 'python3-rados_20.1.0-1noble_amd64.deb', 'python3-rados_20.1.0-1noble_arm64.deb', 'python3-rados-dbg_20.1.0-1jammy_amd64.deb', 'python3-rados-dbg_20.1.0-1jammy_arm64.deb', 'python3-rados-dbg_20.1.0-1noble_amd64.deb', 'python3-rados-dbg_20.1.0-1noble_arm64.deb', 'python3-rbd_20.1.0-1jammy_amd64.deb', 'python3-rbd_20.1.0-1jammy_arm64.deb', 'python3-rbd_20.1.0-1noble_amd64.deb', 'python3-rbd_20.1.0-1noble_arm64.deb', ] def main(): dists = defaultdict(set) archs = defaultdict(set) allpkgs = defaultdict(list) count = 0 for p in pathlib.Path('.').rglob('*'): if not (p.is_file() and p.suffix in ['.deb', '.rpm']): continue ext = p.suffix[1:] p = p.name # print(f'{p} {ext}') match = re.match(REs[ext], p) if match is None: print(f'can\'t match {p} as pkgname', file=sys.stderr) continue if ext == 'deb': name, version, subver, dist, arch = match.groups() elif ext == 'rpm': name, version, relver, dist, arch = match.groups() # print(f'{p} {ext} {name} {version} {dist} {arch}') dists[ext].add(dist) archs[ext].add(arch) allpkgs[ext, dist, arch].append(p) count += 1 print(f'total pkgs: {count}') for ext in ['rpm', 'deb']: for dist in dists[ext]: for arch in archs[ext]: print(f'{dist}/{arch}: {len(allpkgs[ext, dist, arch])}') if __name__ == "__main__": sys.exit(main())