Support some Mercurial hosts

This will need updating from the hardcoded list at some point.
This commit is contained in:
Ryan Fox 2021-09-17 09:00:28 -07:00
parent bb152b2112
commit 51c58c1899
Signed by: flewkey
GPG Key ID: 94F56ADFD848851E
1 changed files with 28 additions and 2 deletions

View File

@ -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