diff --git a/pkgcrap/cli.py b/pkgcrap/cli.py index 37fc97b..816c4c8 100644 --- a/pkgcrap/cli.py +++ b/pkgcrap/cli.py @@ -5,11 +5,13 @@ from sys import argv from pkgcrap.list_update import main as update from pkgcrap.list_update import maintlist as maintlist from pkgcrap.outdated_check import main as outdated +from pkgcrap.forge_scan import main as forgescan options = { 'update': update, 'outdated': outdated, 'maintlist': maintlist, + 'forgescan': forgescan, } def main(): diff --git a/pkgcrap/forge_scan.py b/pkgcrap/forge_scan.py new file mode 100644 index 0000000..0a0e078 --- /dev/null +++ b/pkgcrap/forge_scan.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from pkgcrap.util import conf_file_path +import pkgcrap.parse as parse +from urllib.parse import urlparse + +def main(args): + repos = parse.repos() + repos.load() + checked = 0 + failed = 0 + forges = {} + for repo in repos.repos.values(): + repo.load() + print('Scanning', repo.name) + for cat in repo.categories.values(): + cat.load() + for pkg in cat.packages.values(): + pkg.load() + if len(pkg.ebuilds) == 0 or 'EGIT_REPO_URI' not in pkg.ebuilds[0].vars: + failed += 1 + continue + eb = pkg.ebuilds[0] + repo = pkg.ebuilds[0].vars['EGIT_REPO_URI'].replace('${PN}', pkg.name) + if 'HOMEPAGE' in pkg.ebuilds[0].vars: + repo = repo.replace('${HOMEPAGE}', eb.vars['HOMEPAGE']) + if 'EGO_PN' in pkg.ebuilds[0].vars: + repo = repo.replace('${EGO_PN}', eb.vars['EGO_PN']) + if 'MY_REPO_URI' in pkg.ebuilds[0].vars: + repo = repo.replace('${MY_REPO_URI}', eb.vars['MY_REPO_URI']) + forge = urlparse(repo).netloc + if forge == '' or forge.startswith('${'): + failed += 1 + continue + if forge not in forges: + forges[forge] = 0 + forges[forge] += 1 + checked += 1 + print('Found git URI in '+str(checked)+' packages') + print('Failed to find git URI in '+str(failed)+' packages') + for forge in dict(reversed(sorted(forges.items(), key=lambda item: item[1]))): + c = forges[forge] + p = float(c)/checked*100 + print(forge+': '+str(c)+f' ({p:.2f}%)')