summaryrefslogtreecommitdiffstats
path: root/meta/classes/devtool-source.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/devtool-source.bbclass')
-rw-r--r--meta/classes/devtool-source.bbclass56
1 files changed, 56 insertions, 0 deletions
diff --git a/meta/classes/devtool-source.bbclass b/meta/classes/devtool-source.bbclass
index 8f5bc86b2e..56882a41d8 100644
--- a/meta/classes/devtool-source.bbclass
+++ b/meta/classes/devtool-source.bbclass
@@ -152,9 +152,65 @@ python devtool_pre_patch() {
152} 152}
153 153
154python devtool_post_patch() { 154python devtool_post_patch() {
155 import shutil
155 tempdir = d.getVar('DEVTOOL_TEMPDIR') 156 tempdir = d.getVar('DEVTOOL_TEMPDIR')
156 with open(os.path.join(tempdir, 'srcsubdir'), 'r') as f: 157 with open(os.path.join(tempdir, 'srcsubdir'), 'r') as f:
157 srcsubdir = f.read() 158 srcsubdir = f.read()
159 with open(os.path.join(tempdir, 'initial_rev'), 'r') as f:
160 initial_rev = f.read()
161
162 def rm_patches():
163 patches_dir = os.path.join(srcsubdir, 'patches')
164 if os.path.exists(patches_dir):
165 shutil.rmtree(patches_dir)
166 # Restore any "patches" directory that was actually part of the source tree
167 try:
168 bb.process.run('git checkout -- patches', cwd=srcsubdir)
169 except bb.process.ExecutionError:
170 pass
171
172 extra_overrides = d.getVar('DEVTOOL_EXTRA_OVERRIDES')
173 if extra_overrides:
174 extra_override_list = extra_overrides.split(':')
175 devbranch = d.getVar('DEVTOOL_DEVBRANCH')
176 default_overrides = d.getVar('OVERRIDES').split(':')
177 no_overrides = []
178 # First, we may have some overrides that are referred to in the recipe set in
179 # our configuration, so we need to make a branch that excludes those
180 for override in default_overrides:
181 if override not in extra_override_list:
182 no_overrides.append(override)
183 if default_overrides != no_overrides:
184 # Some overrides are active in the current configuration, so
185 # we need to create a branch where none of the overrides are active
186 bb.process.run('git checkout %s -b devtool-no-overrides' % initial_rev, cwd=srcsubdir)
187 # Run do_patch function with the override applied
188 localdata = bb.data.createCopy(d)
189 localdata.setVar('OVERRIDES', ':'.join(no_overrides))
190 bb.build.exec_func('do_patch', localdata)
191 rm_patches()
192 # Now we need to reconcile the dev branch with the no-overrides one
193 # (otherwise we'd likely be left with identical commits that have different hashes)
194 bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
195 bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
196 else:
197 bb.process.run('git checkout %s -b devtool-no-overrides' % devbranch, cwd=srcsubdir)
198
199 for override in extra_override_list:
200 localdata = bb.data.createCopy(d)
201 if override in default_overrides:
202 bb.process.run('git branch devtool-override-%s %s' % (override, devbranch), cwd=srcsubdir)
203 else:
204 # Reset back to the initial commit on a new branch
205 bb.process.run('git checkout %s -b devtool-override-%s' % (initial_rev, override), cwd=srcsubdir)
206 # Run do_patch function with the override applied
207 localdata.appendVar('OVERRIDES', ':%s' % override)
208 bb.build.exec_func('do_patch', localdata)
209 rm_patches()
210 # Now we need to reconcile the new branch with the no-overrides one
211 # (otherwise we'd likely be left with identical commits that have different hashes)
212 bb.process.run('git rebase devtool-no-overrides', cwd=srcsubdir)
213 bb.process.run('git checkout %s' % devbranch, cwd=srcsubdir)
158 bb.process.run('git tag -f devtool-patched', cwd=srcsubdir) 214 bb.process.run('git tag -f devtool-patched', cwd=srcsubdir)
159} 215}
160 216