diff options
| author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-11-23 12:22:09 +1300 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-12-01 21:32:03 +0000 |
| commit | f79cc4d9c37cc8b08b51491f335119b8caf84671 (patch) | |
| tree | fb2b5eb0ff2b67b8f8d268aac5deaec8b35e8f5f /scripts/lib/devtool/upgrade.py | |
| parent | b4d4d2116a90eedfc86dfae5ec0d282b62d1d292 (diff) | |
| download | poky-f79cc4d9c37cc8b08b51491f335119b8caf84671.tar.gz | |
devtool: upgrade: provide a means to update the source branch
If you're upgrading a git recipe to a revision on a release branch
that's different to the branch for the current revision, then you'll
need to update the branch parameter in SRC_URI, so add a --srcbranch/-B
command-line parameter to let you do that easily. It handles both when
the branch is stated verbatim in the recipe, and when a reference to
another variable is used (a common convention is to use a SRCBRANCH
variable for this, though the code doesn't care what variable is used
if any).
(From OE-Core rev: e49a66fd898dd44e54c77a838ebef3d983ed2a03)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool/upgrade.py')
| -rw-r--r-- | scripts/lib/devtool/upgrade.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index 13e3096325..86d1214908 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py | |||
| @@ -255,7 +255,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, branch, keep_temp, tin | |||
| 255 | 255 | ||
| 256 | return (rev, md5, sha256) | 256 | return (rev, md5, sha256) |
| 257 | 257 | ||
| 258 | def _create_new_recipe(newpv, md5, sha256, srcrev, workspace, tinfoil, rd): | 258 | def _create_new_recipe(newpv, md5, sha256, srcrev, srcbranch, workspace, tinfoil, rd): |
| 259 | """Creates the new recipe under workspace""" | 259 | """Creates the new recipe under workspace""" |
| 260 | crd = rd.createCopy() | 260 | crd = rd.createCopy() |
| 261 | 261 | ||
| @@ -276,6 +276,31 @@ def _create_new_recipe(newpv, md5, sha256, srcrev, workspace, tinfoil, rd): | |||
| 276 | if srcrev: | 276 | if srcrev: |
| 277 | newvalues['SRCREV'] = srcrev | 277 | newvalues['SRCREV'] = srcrev |
| 278 | 278 | ||
| 279 | if srcbranch: | ||
| 280 | src_uri = oe.recipeutils.split_var_value(rd.getVar('SRC_URI', False) or '') | ||
| 281 | changed = False | ||
| 282 | replacing = True | ||
| 283 | new_src_uri = [] | ||
| 284 | for entry in src_uri: | ||
| 285 | scheme, network, path, user, passwd, params = bb.fetch2.decodeurl(entry) | ||
| 286 | if replacing and scheme in ['git', 'gitsm']: | ||
| 287 | branch = params.get('branch', 'master') | ||
| 288 | if rd.expand(branch) != srcbranch: | ||
| 289 | # Handle case where branch is set through a variable | ||
| 290 | res = re.match(r'\$\{([^}@]+)\}', branch) | ||
| 291 | if res: | ||
| 292 | newvalues[res.group(1)] = srcbranch | ||
| 293 | # We know we won't change SRC_URI now, so break out | ||
| 294 | break | ||
| 295 | else: | ||
| 296 | params['branch'] = srcbranch | ||
| 297 | entry = bb.fetch2.encodeurl((scheme, network, path, user, passwd, params)) | ||
| 298 | changed = True | ||
| 299 | replacing = False | ||
| 300 | new_src_uri.append(entry) | ||
| 301 | if changed: | ||
| 302 | newvalues['SRC_URI'] = ' '.join(new_src_uri) | ||
| 303 | |||
| 279 | if newvalues: | 304 | if newvalues: |
| 280 | rd = oe.recipeutils.parse_recipe(fullpath, None, tinfoil.config_data) | 305 | rd = oe.recipeutils.parse_recipe(fullpath, None, tinfoil.config_data) |
| 281 | oe.recipeutils.patch_recipe(rd, fullpath, newvalues) | 306 | oe.recipeutils.patch_recipe(rd, fullpath, newvalues) |
| @@ -295,6 +320,8 @@ def upgrade(args, config, basepath, workspace): | |||
| 295 | raise DevtoolError("recipe %s is already in your workspace" % args.recipename) | 320 | raise DevtoolError("recipe %s is already in your workspace" % args.recipename) |
| 296 | if not args.version and not args.srcrev: | 321 | if not args.version and not args.srcrev: |
| 297 | raise DevtoolError("You must provide a version using the --version/-V option, or for recipes that fetch from an SCM such as git, the --srcrev/-S option") | 322 | raise DevtoolError("You must provide a version using the --version/-V option, or for recipes that fetch from an SCM such as git, the --srcrev/-S option") |
| 323 | if args.srcbranch and not args.srcrev: | ||
| 324 | raise DevtoolError("If you specify --srcbranch/-B then you must use --srcrev/-S to specify the revision" % args.recipename) | ||
| 298 | 325 | ||
| 299 | reason = oe.recipeutils.validate_pn(args.recipename) | 326 | reason = oe.recipeutils.validate_pn(args.recipename) |
| 300 | if reason: | 327 | if reason: |
| @@ -322,7 +349,7 @@ def upgrade(args, config, basepath, workspace): | |||
| 322 | rev2, md5, sha256 = _extract_new_source(args.version, args.srctree, args.no_patch, | 349 | rev2, md5, sha256 = _extract_new_source(args.version, args.srctree, args.no_patch, |
| 323 | args.srcrev, args.branch, args.keep_temp, | 350 | args.srcrev, args.branch, args.keep_temp, |
| 324 | tinfoil, rd) | 351 | tinfoil, rd) |
| 325 | rf = _create_new_recipe(args.version, md5, sha256, args.srcrev, config.workspace_path, tinfoil, rd) | 352 | rf = _create_new_recipe(args.version, md5, sha256, args.srcrev, args.srcbranch, config.workspace_path, tinfoil, rd) |
| 326 | except bb.process.CmdError as e: | 353 | except bb.process.CmdError as e: |
| 327 | _upgrade_error(e, rf, args.srctree) | 354 | _upgrade_error(e, rf, args.srctree) |
| 328 | except DevtoolError as e: | 355 | except DevtoolError as e: |
| @@ -343,6 +370,7 @@ def register_commands(subparsers, context): | |||
| 343 | parser_upgrade.add_argument('srctree', help='Path to where to extract the source tree') | 370 | parser_upgrade.add_argument('srctree', help='Path to where to extract the source tree') |
| 344 | parser_upgrade.add_argument('--version', '-V', help='Version to upgrade to (PV)') | 371 | parser_upgrade.add_argument('--version', '-V', help='Version to upgrade to (PV)') |
| 345 | parser_upgrade.add_argument('--srcrev', '-S', help='Source revision to upgrade to (if fetching from an SCM such as git)') | 372 | parser_upgrade.add_argument('--srcrev', '-S', help='Source revision to upgrade to (if fetching from an SCM such as git)') |
| 373 | parser_upgrade.add_argument('--srcbranch', '-B', help='Branch in source repository containing the revision to use (if fetching from an SCM such as git)') | ||
| 346 | parser_upgrade.add_argument('--branch', '-b', default="devtool", help='Name for new development branch to checkout (default "%(default)s")') | 374 | parser_upgrade.add_argument('--branch', '-b', default="devtool", help='Name for new development branch to checkout (default "%(default)s")') |
| 347 | parser_upgrade.add_argument('--no-patch', action="store_true", help='Do not apply patches from the recipe to the new source code') | 375 | parser_upgrade.add_argument('--no-patch', action="store_true", help='Do not apply patches from the recipe to the new source code') |
| 348 | group = parser_upgrade.add_mutually_exclusive_group() | 376 | group = parser_upgrade.add_mutually_exclusive_group() |
