diff options
author | Bertrand SIMONNET <bsimonnet@chromium.org> | 2015-04-22 10:57:56 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-04-23 20:03:55 +0000 |
commit | 0d2140d976f20f0e6c21713055e9ed44dd39da89 (patch) | |
tree | da9227de6bdad3d61a17e345e52e2ec4db17ca7e | |
parent | e86504e0664fc2bc0e13255b9b30e8808f9e1a6c (diff) | |
download | chromite-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.py | 10 | ||||
-rw-r--r-- | lib/blueprint_lib_unittest.py | 20 | ||||
-rw-r--r-- | lib/chroot_util.py | 5 |
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()) |