diff options
Diffstat (limited to 'meta/classes/devtool-source.bbclass')
-rw-r--r-- | meta/classes/devtool-source.bbclass | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/meta/classes/devtool-source.bbclass b/meta/classes/devtool-source.bbclass index 41900e651f0..90b50fb4d5d 100644 --- a/meta/classes/devtool-source.bbclass +++ b/meta/classes/devtool-source.bbclass @@ -69,7 +69,7 @@ python devtool_post_unpack() { import shutil sys.path.insert(0, os.path.join(d.getVar('COREBASE'), 'scripts', 'lib')) import scriptutils - from devtool import setup_git_repo + from devtool import setup_git_repo, find_git_repos tempdir = d.getVar('DEVTOOL_TEMPDIR') workdir = d.getVar('WORKDIR') @@ -108,7 +108,26 @@ python devtool_post_unpack() { shutil.copy2(cfg, workdir) # Ignore local files with subdir={BP} + excludeitems = recipe_patches + list(local_files.keys()) + pthvars = ['RECIPE_SYSROOT', 'RECIPE_SYSROOT_NATIVE', 'S'] + for pthvar in pthvars: + relp = os.path.relpath(d.getVar(pthvar), d.getVar('WORKDIR')) + if not relp.startswith('..'): + excludeitems.append(relp.split(os.sep)[0]) + extradirs = [] srcabspath = os.path.abspath(srcsubdir) + if srcabspath != os.path.abspath(workdir): + for pth in os.listdir(workdir): + if pth in excludeitems: + continue + wpth = os.path.join(workdir, pth) + if os.path.isdir(wpth) and os.listdir(wpth): + extradirs.append(wpth) + + repos = find_git_repos(srcabspath) + extradirs.extend(repos) + + # Ignore local files with subdir={BP} local_files = [fname for fname in local_files if os.path.exists(os.path.join(workdir, fname)) and (srcabspath == workdir or not @@ -151,11 +170,20 @@ python devtool_post_unpack() { (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=srcsubdir) initial_rev = stdout.rstrip() + + initial_revs = {} + for extradir in extradirs: + setup_git_repo(extradir, d.getVar('PV'), devbranch, d=d) + (stdout, _) = bb.process.run('git rev-parse HEAD', cwd=extradir) + initial_revs[extradir] = stdout.rstrip() + with open(os.path.join(tempdir, 'initial_rev'), 'w') as f: f.write(initial_rev) with open(os.path.join(tempdir, 'srcsubdir'), 'w') as f: - f.write(srcsubdir) + f.write('%s\n' % srcsubdir) + for extradir in extradirs: + f.write('%s=%s\n' % (extradir, initial_revs[extradir])) } python devtool_pre_patch() { @@ -166,18 +194,25 @@ python devtool_pre_patch() { python devtool_post_patch() { import shutil tempdir = d.getVar('DEVTOOL_TEMPDIR') + + srcdirs = [] with open(os.path.join(tempdir, 'srcsubdir'), 'r') as f: - srcsubdir = f.read() + for line in f: + line = line.rstrip() + if line: + srcdirs.append(line.split('=')[0]) + srcsubdir = srcdirs[0] + 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') + def rm_patches(pth): + patches_dir = os.path.join(pth, '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) + bb.process.run('git checkout -- patches', cwd=pth) except bb.process.ExecutionError: pass @@ -201,7 +236,7 @@ python devtool_post_patch() { localdata.setVar('OVERRIDES', ':'.join(no_overrides)) localdata.setVar('FILESOVERRIDES', ':'.join(no_overrides)) bb.build.exec_func('do_patch', localdata) - rm_patches() + rm_patches(srcsubdir) # 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) @@ -220,12 +255,15 @@ python devtool_post_patch() { localdata.setVar('OVERRIDES', ':'.join(no_overrides + [override])) localdata.setVar('FILESOVERRIDES', ':'.join(no_overrides + [override])) bb.build.exec_func('do_patch', localdata) - rm_patches() + rm_patches(srcsubdir) # 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) + for srcdir in srcdirs: + bb.process.run('git tag -f devtool-patched', cwd=srcdir) + if srcdir != srcsubdir: + rm_patches(srcdir) } python devtool_post_configure() { |