diff options
Diffstat (limited to 'import-layers/yocto-poky/meta/classes/devtool-source.bbclass')
-rw-r--r-- | import-layers/yocto-poky/meta/classes/devtool-source.bbclass | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/meta/classes/devtool-source.bbclass b/import-layers/yocto-poky/meta/classes/devtool-source.bbclass index 8f5bc86b2..56882a41d 100644 --- a/import-layers/yocto-poky/meta/classes/devtool-source.bbclass +++ b/import-layers/yocto-poky/meta/classes/devtool-source.bbclass @@ -152,9 +152,65 @@ python devtool_pre_patch() { } python devtool_post_patch() { + import shutil tempdir = d.getVar('DEVTOOL_TEMPDIR') with open(os.path.join(tempdir, 'srcsubdir'), 'r') as f: srcsubdir = f.read() + with open(os.path.join(tempdir, 'initial_rev'), 'r') as f: + initial_rev = f.read() + + def rm_patches(): + patches_dir = os.path.join(srcsubdir, 'patches') + if os.path.exists(patches_dir): + shutil.rmtree(patches_dir) + # Restore any "patches" directory that was actually part of the source tree + try: + bb.process.run('git checkout -- patches', cwd=srcsubdir) + except bb.process.ExecutionError: + pass + + extra_overrides = d.getVar('DEVTOOL_EXTRA_OVERRIDES') + if extra_overrides: + extra_override_list = extra_overrides.split(':') + devbranch = d.getVar('DEVTOOL_DEVBRANCH') + default_overrides = d.getVar('OVERRIDES').split(':') + no_overrides = [] + # First, we may have some overrides that are referred to in the recipe set in + # our configuration, so we need to make a branch that excludes those + for override in default_overrides: + if override not in extra_override_list: + no_overrides.append(override) + if default_overrides != no_overrides: + # Some overrides are active in the current configuration, so + # we need to create a branch where none of the overrides are active + bb.process.run('git checkout %s -b devtool-no-overrides' % initial_rev, cwd=srcsubdir) + # Run do_patch function with the override applied + localdata = bb.data.createCopy(d) + localdata.setVar('OVERRIDES', ':'.join(no_overrides)) + bb.build.exec_func('do_patch', localdata) + rm_patches() + # Now we need to reconcile the dev branch with the no-overrides one + # (otherwise we'd likely be left with identical commits that have different hashes) + bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir) + bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir) + else: + bb.process.run('git checkout %s -b devtool-no-overrides' % devbranch, cwd=srcsubdir) + + for override in extra_override_list: + localdata = bb.data.createCopy(d) + if override in default_overrides: + bb.process.run('git branch devtool-override-%s %s' % (override, devbranch), cwd=srcsubdir) + else: + # Reset back to the initial commit on a new branch + bb.process.run('git checkout %s -b devtool-override-%s' % (initial_rev, override), cwd=srcsubdir) + # Run do_patch function with the override applied + localdata.appendVar('OVERRIDES', ':%s' % override) + bb.build.exec_func('do_patch', localdata) + rm_patches() + # Now we need to reconcile the new branch with the no-overrides one + # (otherwise we'd likely be left with identical commits that have different hashes) + bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir) + bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir) bb.process.run('git tag -f devtool-patched', cwd=srcsubdir) } |