summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand SIMONNET <bsimonnet@chromium.org>2015-04-22 10:57:56 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-04-23 20:03:55 +0000
commit0d2140d976f20f0e6c21713055e9ed44dd39da89 (patch)
treeda9227de6bdad3d61a17e345e52e2ec4db17ca7e
parente86504e0664fc2bc0e13255b9b30e8808f9e1a6c (diff)
downloadchromite-0d2140d976f20f0e6c21713055e9ed44dd39da89.tar.gz
brillo build: Regenerate all bricks used.
At the beginning of every build, regenerate the portage configuration of all the bricks used. BUG=brillo:914 TEST=Unittests. TEST=Manual: build a blueprint, all the bricks are setup correctly. Change-Id: I52af4463e56dbf10946c21acac5e754b91437078 Reviewed-on: https://chromium-review.googlesource.com/266911 Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org> Trybot-Ready: Bertrand Simonnet <bsimonnet@chromium.org> Tested-by: Bertrand Simonnet <bsimonnet@chromium.org> Commit-Queue: Bertrand Simonnet <bsimonnet@chromium.org>
-rw-r--r--lib/blueprint_lib.py10
-rw-r--r--lib/blueprint_lib_unittest.py20
-rw-r--r--lib/chroot_util.py5
3 files changed, 32 insertions, 3 deletions
diff --git a/lib/blueprint_lib.py b/lib/blueprint_lib.py
index 7a5f281dd..0c7f5fc47 100644
--- a/lib/blueprint_lib.py
+++ b/lib/blueprint_lib.py
@@ -9,6 +9,7 @@ from __future__ import print_function
import json
import os
+from chromite.lib import brick_lib
from chromite.lib import osutils
from chromite.lib import workspace_lib
@@ -59,3 +60,12 @@ class Blueprint(object):
def FriendlyName(self):
"""Returns the friendly name for this blueprint."""
return workspace_lib.LocatorToFriendlyName(self._locator)
+
+ def GetUsedBricks(self):
+ """Returns the set of bricks used by this blueprint."""
+ brick_map = {}
+ for top_brick in self.GetBricks() + [self.GetBSP()]:
+ for b in brick_lib.Brick(top_brick).BrickStack():
+ brick_map[b.brick_locator] = b
+
+ return brick_map.values()
diff --git a/lib/blueprint_lib_unittest.py b/lib/blueprint_lib_unittest.py
index 5177f8c03..c08efb487 100644
--- a/lib/blueprint_lib_unittest.py
+++ b/lib/blueprint_lib_unittest.py
@@ -6,6 +6,7 @@
from __future__ import print_function
+from chromite.lib import brick_lib
from chromite.lib import cros_test_lib
@@ -18,6 +19,7 @@ class BlueprintLibTest(cros_test_lib.MockTempDirTestCase,
self.SetupFakeWorkspace()
def testBlueprint(self):
+ """Tests getting the basic blueprint getters."""
bricks = ['//foo', '//bar', '//baz']
blueprint = self.CreateBlueprint(bricks=bricks, bsp='//bsp',
main_package='virtual/target-os')
@@ -26,8 +28,26 @@ class BlueprintLibTest(cros_test_lib.MockTempDirTestCase,
self.assertEqual(blueprint.GetMainPackage(), 'virtual/target-os')
def testBlueprintNoBricks(self):
+ """Tests that blueprints without bricks return reasonable defaults."""
blueprint = self.CreateBlueprint(bsp='//bsp2',
main_package='virtual/target-os-dev')
self.assertEqual(blueprint.GetBricks(), [])
self.assertEqual(blueprint.GetBSP(), '//bsp2')
self.assertEqual(blueprint.GetMainPackage(), 'virtual/target-os-dev')
+
+ def testGetUsedBricks(self):
+ """Tests that we can list all the bricks used."""
+ brick_lib.Brick('//a', initial_config={'name':'a'})
+ brick_b = brick_lib.Brick('//b', initial_config={'name':'b'})
+ brick_c = brick_lib.Brick('//c',
+ initial_config={'name':'c',
+ 'dependencies': ['//b']})
+
+ blueprint = self.CreateBlueprint(bsp='//a', bricks=[brick_c.brick_locator])
+ self.assertEqual(3, len(blueprint.GetUsedBricks()))
+
+ # We sort out duplicates: c depends on b and b is explicitly listed in
+ # bricks too.
+ blueprint = self.CreateBlueprint(bsp='//a', bricks=[brick_c.brick_locator,
+ brick_b.brick_locator])
+ self.assertEqual(3, len(blueprint.GetUsedBricks()))
diff --git a/lib/chroot_util.py b/lib/chroot_util.py
index 4d6b6757d..b3fe5f355 100644
--- a/lib/chroot_util.py
+++ b/lib/chroot_util.py
@@ -173,9 +173,8 @@ def InitializeSysroots(blueprint):
bricks = [brick_lib.Brick(b) for b in blueprint.GetBricks()]
# Regenerate the portage configuration for all bricks used by this blueprint.
- for b in bricks + [bsp]:
- for dep in b.BrickStack():
- dep.GeneratePortageConfig()
+ for b in blueprint.GetUsedBricks():
+ b.GeneratePortageConfig()
sysroot_path = cros_build_lib.GetSysroot(blueprint.FriendlyName())