diff --git a/pkgcrap/outdated_check.py b/pkgcrap/outdated_check.py index 919e8a0..122e8af 100644 --- a/pkgcrap/outdated_check.py +++ b/pkgcrap/outdated_check.py @@ -35,9 +35,11 @@ def repos_from_metadata(pkg): remotes.append(('pypi', remote[1])) return remotes -def repo_from_egit_uri(pkg): +def repo_from_repo_uri(pkg): if 'EGIT_REPO_URI' in pkg.ebuilds[0].vars: return ('git', pkg.ebuilds[0].vars['EGIT_REPO_URI'].replace('${PN}', pkg.name)) + if 'EHG_REPO_URI' in pkg.ebuilds[0].vars: + return ('hg', pkg.ebuilds[0].vars['EHG_REPO_URI'].replace('${PN}', pkg.name)) def repo_from_src_uri(pkg): for eb in pkg.ebuilds: @@ -52,7 +54,7 @@ def repo_from_homepage(pkg): def repos_from_pkg(pkg): repos = [] repos += repos_from_metadata(pkg) - repos.append(repo_from_egit_uri(pkg)) + repos.append(repo_from_repo_uri(pkg)) repos.append(repo_from_src_uri(pkg)) repos.append(repo_from_homepage(pkg)) return [repo for repo in repos if repo != None] @@ -91,6 +93,28 @@ def repo_get_latest_git(uri, pkg, verbose): return None return latest +def repo_get_latest_hg(uri, pkg, verbose): + global blacklisted_tags + forges = [ + ('https://hg.sr.ht/', '/raw/'), + ] + raw_path = '/raw-file/tip/' + for forge in forges: + if uri.startswith(forge[0]): + raw_path = forge[1] + try: + r = urllib.request.urlopen(uri+raw_path+'.hgtags') + except urllib.error.HTTPError: + if verbose: + print(pkg.full_name+':', 'Invalid repo!', uri) + return None + for line in r.read().decode('utf-8').split("\n"): + tag = line[41:] + if line[:40] in blacklisted_tags or tag in blacklisted_tags: + continue + latest = tag + return latest + def repo_get_latest_pypi(uri, pkg, verbose): try: r = urllib.request.urlopen('https://pypi.org/pypi/'+uri+'/json') @@ -103,6 +127,8 @@ def repo_get_latest_pypi(uri, pkg, verbose): def repo_get_latest(repo, pkg, verbose): if repo[0] == 'git': return repo_get_latest_git(repo[1], pkg, verbose) + if repo[0] == 'hg': + return repo_get_latest_hg(repo[1], pkg, verbose) if repo[0] == 'pypi': return repo_get_latest_pypi(repo[1], pkg, verbose) return None