summaryrefslogtreecommitdiff
path: root/scripts/lib/recipetool
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2016-02-11 14:13:30 +1300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-11 12:32:55 +0000
commite8435fde7f82c39cc0efe1d4bf043b29f63898e9 (patch)
tree79485d8485456289f2754a1df4d06a9166f5dd55 /scripts/lib/recipetool
parentd0265bc67f797ee4b7760cf37335994133809abf (diff)
downloadopenembedded-core-e8435fde7f82c39cc0efe1d4bf043b29f63898e9.tar.gz
openembedded-core-e8435fde7f82c39cc0efe1d4bf043b29f63898e9.tar.bz2
openembedded-core-e8435fde7f82c39cc0efe1d4bf043b29f63898e9.zip
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. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/recipetool')
-rw-r--r--scripts/lib/recipetool/create.py44
1 files changed, 35 insertions, 9 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 5f90b10353..ee27f8de85 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -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)')