summaryrefslogtreecommitdiffstats
path: root/scripts/lib/recipetool
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/recipetool')
-rw-r--r--scripts/lib/recipetool/create.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 2c3a58a143..8d59e65a8f 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -422,6 +422,7 @@ def create_recipe(args):
422 source = args.source 422 source = args.source
423 srcsubdir = '' 423 srcsubdir = ''
424 srcrev = '${AUTOREV}' 424 srcrev = '${AUTOREV}'
425 srcbranch = ''
425 426
426 if os.path.isfile(source): 427 if os.path.isfile(source):
427 source = 'file://%s' % os.path.abspath(source) 428 source = 'file://%s' % os.path.abspath(source)
@@ -440,6 +441,19 @@ def create_recipe(args):
440 srcrev = res.group(1) 441 srcrev = res.group(1)
441 srcuri = rev_re.sub('', srcuri) 442 srcuri = rev_re.sub('', srcuri)
442 443
444 # Check whether users provides any branch info in fetchuri.
445 # If true, we will skip all branch checking process to honor all user's input.
446 scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(fetchuri)
447 srcbranch = params.get('branch')
448 nobranch = params.get('nobranch')
449 if not srcbranch and not nobranch and srcrev != '${AUTOREV}':
450 # Append nobranch=1 in the following conditions:
451 # 1. User did not set 'branch=' in srcuri, and
452 # 2. User did not set 'nobranch=1' in srcuri, and
453 # 3. Source revision is not '${AUTOREV}'
454 params['nobranch'] = '1'
455 fetchuri = bb.fetch2.encodeurl((scheme, network, path, user, passwd, params))
456
443 tmpparent = tinfoil.config_data.getVar('BASE_WORKDIR') 457 tmpparent = tinfoil.config_data.getVar('BASE_WORKDIR')
444 bb.utils.mkdirhier(tmpparent) 458 bb.utils.mkdirhier(tmpparent)
445 tempsrc = tempfile.mkdtemp(prefix='recipetool-', dir=tmpparent) 459 tempsrc = tempfile.mkdtemp(prefix='recipetool-', dir=tmpparent)
@@ -475,6 +489,40 @@ def create_recipe(args):
475 logger.error('URL %s resulted in an empty source tree' % fetchuri) 489 logger.error('URL %s resulted in an empty source tree' % fetchuri)
476 sys.exit(1) 490 sys.exit(1)
477 491
492 # We need this checking mechanism to improve the recipe created by recipetool and devtool
493 # is able to parse and build by bitbake.
494 # If there is no input for branch name, then check for branch name with SRCREV provided.
495 if not srcbranch and not nobranch and srcrev and (srcrev != '${AUTOREV}'):
496 try:
497 cmd = 'git branch -r --contains'
498 check_branch, check_branch_err = bb.process.run('%s %s' % (cmd, srcrev), cwd=srctree)
499 except bb.process.ExecutionError as err:
500 logger.error(str(err))
501 sys.exit(1)
502 get_branch = [x.strip() for x in check_branch.splitlines()]
503 # Remove HEAD reference point and drop remote prefix
504 get_branch = [x.split('/', 1)[1] for x in get_branch if not x.startswith('origin/HEAD')]
505 if 'master' in get_branch:
506 # If it is master, we do not need to append 'branch=master' as this is default.
507 # Even with the case where get_branch has multiple objects, if 'master' is one
508 # of them, we should default take from 'master'
509 srcbranch = ''
510 elif len(get_branch) == 1:
511 # If 'master' isn't in get_branch and get_branch contains only ONE object, then store result into 'srcbranch'
512 srcbranch = get_branch[0]
513 else:
514 # If get_branch contains more than one objects, then display error and exit.
515 mbrch = '\n ' + '\n '.join(get_branch)
516 logger.error('Revision %s was found on multiple branches: %s\nPlease provide the correct branch in the source URL with ;branch=<branch> (and ensure you use quotes around the URL to avoid the shell interpreting the ";")' % (srcrev, mbrch))
517 sys.exit(1)
518
519 # Since we might have a value in srcbranch, we need to
520 # recontruct the srcuri to include 'branch' in params.
521 if srcbranch:
522 scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(srcuri)
523 params['branch'] = srcbranch
524 srcuri = bb.fetch2.encodeurl((scheme, network, path, user, passwd, params))
525
478 if os.path.exists(os.path.join(srctree, '.gitmodules')) and srcuri.startswith('git://'): 526 if os.path.exists(os.path.join(srctree, '.gitmodules')) and srcuri.startswith('git://'):
479 srcuri = 'gitsm://' + srcuri[6:] 527 srcuri = 'gitsm://' + srcuri[6:]
480 logger.info('Fetching submodules...') 528 logger.info('Fetching submodules...')