recipetool: create: determine name/version from github/bitbucket URLs

Both BitBucket and GitHub provide "release" downloads that unfortunately
don't include the actual project name. For recipetool this means we have
to have special handling for these URLs or else the current code assumes
the name of the project is something like "v0.9.1". Borrow and adapt
some code from autospec to do this, and put it in its own function for
clarity.

(From OE-Core rev: e8435fde7f82c39cc0efe1d4bf043b29f63898e9)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2016-02-11 14:13:30 +13:00 committed by Richard Purdie
parent d94c7e367c
commit f767757b3e
1 changed files with 35 additions and 9 deletions

View File

@ -247,6 +247,35 @@ def determine_from_filename(srcfile):
pv = None
return (pn, pv)
def determine_from_url(srcuri):
"""Determine name and version from a URL"""
pn = None
pv = None
parseres = urlparse.urlparse(srcuri.lower())
if parseres.path:
if 'github.com' in parseres.netloc:
res = re.search(r'.*/(.*?)/archive/(.*)-final\.(tar|zip)', parseres.path)
if res:
pn = res.group(1).strip().replace('_', '-')
pv = res.group(2).strip().replace('_', '.')
else:
res = re.search(r'.*/(.*?)/archive/v?(.*)\.(tar|zip)', parseres.path)
if res:
pn = res.group(1).strip().replace('_', '-')
pv = res.group(2).strip().replace('_', '.')
elif 'bitbucket.org' in parseres.netloc:
res = re.search(r'.*/(.*?)/get/[a-zA-Z_-]*([0-9][0-9a-zA-Z_.]*)\.(tar|zip)', parseres.path)
if res:
pn = res.group(1).strip().replace('_', '-')
pv = res.group(2).strip().replace('_', '.')
if not pn and not pv:
srcfile = os.path.basename(parseres.path.rstrip('/'))
pn, pv = determine_from_filename(srcfile)
logger.debug('Determined from source URL: name = "%s", version = "%s"' % (pn, pv))
return (pn, pv)
def supports_srcrev(uri):
localdata = bb.data.createCopy(tinfoil.config_data)
# This is a bit sad, but if you don't have this set there can be some
@ -430,15 +459,12 @@ def create_recipe(args):
realpv = None
if srcuri and not realpv or not pn:
parseres = urlparse.urlparse(srcuri)
if parseres.path:
srcfile = os.path.basename(parseres.path.rstrip('/'))
name_pn, name_pv = determine_from_filename(srcfile)
logger.debug('Determined from filename: name = "%s", version = "%s"' % (name_pn, name_pv))
if name_pn and not pn:
pn = name_pn
if name_pv and not realpv:
realpv = name_pv
name_pn, name_pv = determine_from_url(srcuri)
if name_pn and not pn:
pn = name_pn
if name_pv and not realpv:
realpv = name_pv
if not srcuri:
lines_before.append('# No information for SRC_URI yet (only an external source tree was specified)')