diff options
-rw-r--r-- | scripts/lib/recipetool/create.py | 44 |
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): | |||
247 | pv = None | 247 | pv = None |
248 | return (pn, pv) | 248 | return (pn, pv) |
249 | 249 | ||
250 | def determine_from_url(srcuri): | ||
251 | """Determine name and version from a URL""" | ||
252 | pn = None | ||
253 | pv = None | ||
254 | parseres = urlparse.urlparse(srcuri.lower()) | ||
255 | if parseres.path: | ||
256 | if 'github.com' in parseres.netloc: | ||
257 | res = re.search(r'.*/(.*?)/archive/(.*)-final\.(tar|zip)', parseres.path) | ||
258 | if res: | ||
259 | pn = res.group(1).strip().replace('_', '-') | ||
260 | pv = res.group(2).strip().replace('_', '.') | ||
261 | else: | ||
262 | res = re.search(r'.*/(.*?)/archive/v?(.*)\.(tar|zip)', parseres.path) | ||
263 | if res: | ||
264 | pn = res.group(1).strip().replace('_', '-') | ||
265 | pv = res.group(2).strip().replace('_', '.') | ||
266 | elif 'bitbucket.org' in parseres.netloc: | ||
267 | res = re.search(r'.*/(.*?)/get/[a-zA-Z_-]*([0-9][0-9a-zA-Z_.]*)\.(tar|zip)', parseres.path) | ||
268 | if res: | ||
269 | pn = res.group(1).strip().replace('_', '-') | ||
270 | pv = res.group(2).strip().replace('_', '.') | ||
271 | |||
272 | if not pn and not pv: | ||
273 | srcfile = os.path.basename(parseres.path.rstrip('/')) | ||
274 | pn, pv = determine_from_filename(srcfile) | ||
275 | |||
276 | logger.debug('Determined from source URL: name = "%s", version = "%s"' % (pn, pv)) | ||
277 | return (pn, pv) | ||
278 | |||
250 | def supports_srcrev(uri): | 279 | def supports_srcrev(uri): |
251 | localdata = bb.data.createCopy(tinfoil.config_data) | 280 | localdata = bb.data.createCopy(tinfoil.config_data) |
252 | # This is a bit sad, but if you don't have this set there can be some | 281 | # 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): | |||
430 | realpv = None | 459 | realpv = None |
431 | 460 | ||
432 | if srcuri and not realpv or not pn: | 461 | if srcuri and not realpv or not pn: |
433 | parseres = urlparse.urlparse(srcuri) | 462 | name_pn, name_pv = determine_from_url(srcuri) |
434 | if parseres.path: | 463 | if name_pn and not pn: |
435 | srcfile = os.path.basename(parseres.path.rstrip('/')) | 464 | pn = name_pn |
436 | name_pn, name_pv = determine_from_filename(srcfile) | 465 | if name_pv and not realpv: |
437 | logger.debug('Determined from filename: name = "%s", version = "%s"' % (name_pn, name_pv)) | 466 | realpv = name_pv |
438 | if name_pn and not pn: | 467 | |
439 | pn = name_pn | ||
440 | if name_pv and not realpv: | ||
441 | realpv = name_pv | ||
442 | 468 | ||
443 | if not srcuri: | 469 | if not srcuri: |
444 | lines_before.append('# No information for SRC_URI yet (only an external source tree was specified)') | 470 | lines_before.append('# No information for SRC_URI yet (only an external source tree was specified)') |