Support checking versoins from Android SDK

This commit is contained in:
Yen Chi Hsuan 2017-10-11 02:58:47 +08:00
parent 3083ef6a1f
commit 02601c0b58
2 changed files with 45 additions and 1 deletions

View File

@ -11,7 +11,7 @@ handler_precedence = (
'gems', 'pacman',
'cmd', 'bitbucket', 'regex', 'manual', 'vcs',
'cratesio', 'npm', 'hackage', 'cpan', 'gitlab', 'packagist',
'anitya',
'anitya', 'android_sdk',
)
def substitute_version(version, name, conf):

View File

@ -0,0 +1,44 @@
# MIT licensed
# Copyright (c) 2013-2017 lilydjwg <lilydjwg@gmail.com>, et al.
import os
import re
from xml.etree import ElementTree
from . import session
ANDROID_REPO_MANIFESTS = {
'addon': 'https://dl.google.com/android/repository/addon2-1.xml',
'package': 'https://dl.google.com/android/repository/repository2-1.xml',
}
async def get_version(name, conf):
repo_xml_url = ANDROID_REPO_MANIFESTS[conf['repo']]
pkg_path_prefix = conf['android_sdk']
async with session.get(repo_xml_url) as res:
data = (await res.read()).decode('utf-8')
repo_manifest = ElementTree.fromstring(data)
for pkg in repo_manifest.findall('.//remotePackage'):
if not pkg.attrib['path'].startswith(pkg_path_prefix):
continue
for archive in pkg.findall('./archives/archive'):
host_os = archive.find('./host-os')
if host_os and host_os.text != 'linux':
continue
archive_url = archive.find('./complete/url').text
# revision
rev = pkg.find('./revision')
rev_strs = []
for part in ('major', 'minor', 'micro'):
part_node = rev.find('./' + part)
if part_node is not None:
rev_strs.append(part_node.text)
# release number
filename, ext = os.path.splitext(archive_url)
rel_str = filename.rsplit('-')[-1]
mobj = re.match(r'r\d+', rel_str)
if mobj:
rev_strs.append(rel_str)
return '.'.join(rev_strs)