diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2015-03-04 15:52:01 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-03-16 17:44:07 +0000 |
commit | cca517056bd2a195f33a7f2945df38af1a17abdd (patch) | |
tree | ef7f280631b923cedd9e8d9d5bc1fac5389caf5c | |
parent | 42d1b65d1543cbb334e776bf0193ea9a8a14799e (diff) | |
download | poky-cca517056bd2a195f33a7f2945df38af1a17abdd.tar.gz |
bitbake: toasterui: identify proper layer in build mode
In build mode, instead of creating our own layer objects,
we identify the layer objects that the build system set up.
[YOCTO #7378]
(Bitbake rev: 22962b540ace6868cb357c0fd13f01ffd24449c4)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 23 | ||||
-rw-r--r-- | bitbake/lib/toaster/bldcontrol/localhostbecontroller.py | 4 | ||||
-rw-r--r-- | bitbake/lib/toaster/orm/models.py | 10 |
3 files changed, 22 insertions, 15 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index 19ddd8e029..ae2ac9fee5 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
@@ -270,15 +270,28 @@ class ORMWrapper(object): | |||
270 | else: | 270 | else: |
271 | # we are under managed mode; we must match the layer used in the Project Layer | 271 | # we are under managed mode; we must match the layer used in the Project Layer |
272 | from bldcontrol.models import BuildEnvironment, BuildRequest | 272 | from bldcontrol.models import BuildEnvironment, BuildRequest |
273 | br, be = brbe.split(":") | 273 | br_id, be_id = brbe.split(":") |
274 | 274 | ||
275 | buildrequest = BuildRequest.objects.get(pk = br) | 275 | # find layer by checkout path; |
276 | from bldcontrol import bbcontroller | ||
277 | bc = bbcontroller.getBuildEnvironmentController(pk = be_id) | ||
276 | 278 | ||
277 | # we might have a race condition here, as the project layers may change between the build trigger and the actual build execution | 279 | # we might have a race condition here, as the project layers may change between the build trigger and the actual build execution |
278 | # but we can only match on the layer name, so the worst thing can happen is a mis-identification of the layer, not a total failure | 280 | # but we can only match on the layer name, so the worst thing can happen is a mis-identification of the layer, not a total failure |
279 | layer_object = buildrequest.project.projectlayer_set.get(layercommit__layer__name=layer_information['name']).layercommit.layer | ||
280 | 281 | ||
281 | return layer_object | 282 | from pprint import pformat |
283 | # note that this is different | ||
284 | buildrequest = BuildRequest.objects.get(pk = br_id) | ||
285 | for brl in buildrequest.brlayer_set.all(): | ||
286 | localdirname = os.path.join(bc.getGitCloneDirectory(brl.giturl, brl.commit), brl.dirpath) | ||
287 | logger.warn("Matched %s to BRlayer %s" % (pformat(layer_information["local_path"]), localdirname)) | ||
288 | if localdirname.startswith(layer_information['local_path']): | ||
289 | # we matched the BRLayer, but we need the layer_version that generated this BR; reverse of the Project.schedule_build() | ||
290 | for pl in buildrequest.project.projectlayer_set.filter(layercommit__layer__name = brl.name): | ||
291 | if pl.layercommit.layer.vcs_url == brl.giturl : | ||
292 | return pl.layercommit.layer | ||
293 | |||
294 | raise Exception("Unidentified layer %s" % pformat(layer_information)) | ||
282 | 295 | ||
283 | 296 | ||
284 | def save_target_file_information(self, build_obj, target_obj, filedata): | 297 | def save_target_file_information(self, build_obj, target_obj, filedata): |
@@ -683,7 +696,7 @@ class BuildInfoHelper(object): | |||
683 | 696 | ||
684 | # Heuristics: we match the path to where the layers have been checked out | 697 | # Heuristics: we match the path to where the layers have been checked out |
685 | for brl in sorted(BuildRequest.objects.get(pk = br_id).brlayer_set.all(), reverse = True, key = _slkey_managed): | 698 | for brl in sorted(BuildRequest.objects.get(pk = br_id).brlayer_set.all(), reverse = True, key = _slkey_managed): |
686 | localdirname = os.path.join(os.path.join(bc.be.sourcedir, bc.getGitCloneDirectory(brl.giturl, brl.commit)), brl.dirpath) | 699 | localdirname = os.path.join(bc.getGitCloneDirectory(brl.giturl, brl.commit), brl.dirpath) |
687 | if path.startswith(localdirname): | 700 | if path.startswith(localdirname): |
688 | #logger.warn("-- managed: matched path %s with layer %s " % (path, localdirname)) | 701 | #logger.warn("-- managed: matched path %s with layer %s " % (path, localdirname)) |
689 | # we matched the BRLayer, but we need the layer_version that generated this br | 702 | # we matched the BRLayer, but we need the layer_version that generated this br |
diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py index 25ce0522b5..aef9b60cba 100644 --- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py +++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py | |||
@@ -180,7 +180,7 @@ class LocalhostBEController(BuildEnvironmentController): | |||
180 | base = components[-2] if components[-1] == "git" else components[-1] | 180 | base = components[-2] if components[-1] == "git" else components[-1] |
181 | 181 | ||
182 | if branch != "HEAD": | 182 | if branch != "HEAD": |
183 | return "_%s_%s.toaster_cloned" % (base, branch) | 183 | return os.path.join(self.be.sourcedir, "_%s_%s.toaster_cloned" % (base, branch)) |
184 | 184 | ||
185 | 185 | ||
186 | # word of attention; this is a localhost-specific issue; only on the localhost we expect to have "HEAD" releases | 186 | # word of attention; this is a localhost-specific issue; only on the localhost we expect to have "HEAD" releases |
@@ -239,7 +239,7 @@ class LocalhostBEController(BuildEnvironmentController): | |||
239 | 239 | ||
240 | # 3. checkout the repositories | 240 | # 3. checkout the repositories |
241 | for giturl, commit in gitrepos.keys(): | 241 | for giturl, commit in gitrepos.keys(): |
242 | localdirname = os.path.join(self.be.sourcedir, self.getGitCloneDirectory(giturl, commit)) | 242 | localdirname = self.getGitCloneDirectory(giturl, commit) |
243 | logger.debug("localhostbecontroller: giturl %s:%s checking out in current directory %s" % (giturl, commit, localdirname)) | 243 | logger.debug("localhostbecontroller: giturl %s:%s checking out in current directory %s" % (giturl, commit, localdirname)) |
244 | 244 | ||
245 | # make sure our directory is a git repository | 245 | # make sure our directory is a git repository |
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 4d1dcbc9f3..80e6d9288c 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
@@ -195,14 +195,8 @@ class Project(models.Model): | |||
195 | dirpath = self.bitbake_version.dirpath) | 195 | dirpath = self.bitbake_version.dirpath) |
196 | 196 | ||
197 | for l in self.projectlayer_set.all().order_by("pk"): | 197 | for l in self.projectlayer_set.all().order_by("pk"): |
198 | commit = l.layercommit.commit | 198 | commit = l.layercommit.get_vcs_reference() |
199 | print("ii Building layer ", l.layercommit.layer.name, " at commit ", commit) | 199 | print("ii Building layer ", l.layercommit.layer.name, " at vcs point ", commit) |
200 | if l.layercommit.up_branch: | ||
201 | commit = l.layercommit.up_branch.name | ||
202 | print("ii Building layer ", l.layercommit.layer.name, " at upbranch ", commit) | ||
203 | if l.layercommit.branch: | ||
204 | commit = l.layercommit.branch | ||
205 | print("ii Building layer ", l.layercommit.layer.name, " at actual_branch ", commit) | ||
206 | BRLayer.objects.create(req = br, name = l.layercommit.layer.name, giturl = l.layercommit.layer.vcs_url, commit = commit, dirpath = l.layercommit.dirpath) | 200 | BRLayer.objects.create(req = br, name = l.layercommit.layer.name, giturl = l.layercommit.layer.vcs_url, commit = commit, dirpath = l.layercommit.dirpath) |
207 | for t in self.projecttarget_set.all(): | 201 | for t in self.projecttarget_set.all(): |
208 | BRTarget.objects.create(req = br, target = t.target, task = t.task) | 202 | BRTarget.objects.create(req = br, target = t.target, task = t.task) |