recipetool: create: basic extraction of name/version from filename

Often the filename (e.g. source tarball) contains the name and version
of the software it contains.

(This isn't intended to be exhaustive, just to catch the common case.)

(From OE-Core rev: 944eacfb849ee69b41e12c9de4f264406281ac6a)

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 2015-12-22 17:03:03 +13:00 committed by Richard Purdie
parent db5f9645ad
commit ebe5f0b872
2 changed files with 40 additions and 7 deletions

View File

@ -232,15 +232,16 @@ class DevtoolTests(DevtoolBase):
self.assertIn(srcdir, result.output)
# Check recipe
recipefile = get_bb_var('FILE', testrecipe)
self.assertIn('%s.bb' % testrecipe, recipefile, 'Recipe file incorrectly named')
self.assertIn('%s_%s.bb' % (testrecipe, testver), recipefile, 'Recipe file incorrectly named')
checkvars = {}
checkvars['S'] = '${WORKDIR}/MarkupSafe-%s' % testver
checkvars['SRC_URI'] = url
checkvars['S'] = '${WORKDIR}/MarkupSafe-${PV}'
checkvars['SRC_URI'] = url.replace(testver, '${PV}')
self._test_recipe_contents(recipefile, checkvars, [])
# Try with version specified
result = runCmd('devtool reset -n %s' % testrecipe)
shutil.rmtree(srcdir)
result = runCmd('devtool add %s %s -f %s -V %s' % (testrecipe, srcdir, url, testver))
fakever = '1.9'
result = runCmd('devtool add %s %s -f %s -V %s' % (testrecipe, srcdir, url, fakever))
self.assertTrue(os.path.isfile(os.path.join(srcdir, 'setup.py')), 'Unable to find setup.py in source directory')
# Test devtool status
result = runCmd('devtool status')
@ -248,10 +249,10 @@ class DevtoolTests(DevtoolBase):
self.assertIn(srcdir, result.output)
# Check recipe
recipefile = get_bb_var('FILE', testrecipe)
self.assertIn('%s_%s.bb' % (testrecipe, testver), recipefile, 'Recipe file incorrectly named')
self.assertIn('%s_%s.bb' % (testrecipe, fakever), recipefile, 'Recipe file incorrectly named')
checkvars = {}
checkvars['S'] = '${WORKDIR}/MarkupSafe-${PV}'
checkvars['SRC_URI'] = url.replace(testver, '${PV}')
checkvars['S'] = '${WORKDIR}/MarkupSafe-%s' % testver
checkvars['SRC_URI'] = url
self._test_recipe_contents(recipefile, checkvars, [])
@testcase(1161)

View File

@ -86,6 +86,27 @@ def validate_pv(pv):
return False
return True
def determine_from_filename(srcfile):
"""Determine name and version from a filename"""
part = ''
if '.tar.' in srcfile:
namepart = srcfile.split('.tar.')[0]
else:
namepart = os.path.splitext(srcfile)[0]
splitval = namepart.rsplit('_', 1)
if len(splitval) == 1:
splitval = namepart.rsplit('-', 1)
pn = splitval[0].replace('_', '-')
if len(splitval) > 1:
if splitval[1][0] in '0123456789':
pv = splitval[1]
else:
pn = '-'.join(splitval).replace('_', '-')
pv = None
else:
pv = None
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
@ -234,6 +255,17 @@ def create_recipe(args):
else:
realpv = None
if srcuri and not realpv or not pn:
parseres = urlparse.urlparse(srcuri)
if parseres.path:
srcfile = os.path.basename(parseres.path)
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
if not srcuri:
lines_before.append('# No information for SRC_URI yet (only an external source tree was specified)')
lines_before.append('SRC_URI = "%s"' % srcuri)