summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2015-03-04 15:52:01 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-03-16 17:44:07 +0000
commitcca517056bd2a195f33a7f2945df38af1a17abdd (patch)
treeef7f280631b923cedd9e8d9d5bc1fac5389caf5c
parent42d1b65d1543cbb334e776bf0193ea9a8a14799e (diff)
downloadpoky-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.py23
-rw-r--r--bitbake/lib/toaster/bldcontrol/localhostbecontroller.py4
-rw-r--r--bitbake/lib/toaster/orm/models.py10
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)