Add multiversion support to packages api
This CL is the second installment in the
add-multiversion-uprev-support-to-pupr series. For the series finale,
we will be modifying the generator recipe to generate CLs using
the revised api. Stay tuned!
BUG=chromium:985035
TEST=unittest
Change-Id: I4665a1f08edb2e9368e308504797afd5831a16cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1796566
Tested-by: Yaakov Shaul <yshaul@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
diff --git a/service/packages.py b/service/packages.py
index b9eedcb..a689856 100644
--- a/service/packages.py
+++ b/service/packages.py
@@ -7,10 +7,12 @@
from __future__ import print_function
+import collections
import functools
import json
import os
+
from chromite.lib import constants
from chromite.lib import cros_build_lib
from chromite.lib import cros_logging as logging
@@ -55,16 +57,30 @@
"""Error when running ebuild manifest."""
-class UprevVersionedPackageResult(object):
- """Result data object for uprev_versioned_package."""
+UprevVersionedPackageModifications = collections.namedtuple(
+ 'UprevVersionedPackageModifications', ('new_version', 'files'))
- def __init__(self, new_version=None, modified_ebuilds=None):
- self.new_version = new_version
- self.modified_ebuilds = modified_ebuilds or []
+
+class UprevVersionedPackageResult(object):
+ """Data object for uprev_versioned_package."""
+
+ def __init__(self):
+ self.modified = []
+
+ def add_result(self, new_version, modified_files):
+ """Adds version/ebuilds tuple to result.
+
+ Args:
+ new_version: New version number of package.
+ modified_files: List of files modified for the given version.
+ """
+ result = UprevVersionedPackageModifications(new_version, modified_files)
+ self.modified.append(result)
+ return self
@property
def uprevved(self):
- return bool(self.new_version)
+ return bool(self.modified)
def uprevs_versioned_package(package):
@@ -230,7 +246,7 @@
for repo in ('general-sandbox', 'merge-sandbox')
]
- return UprevVersionedPackageResult('1.2.3', paths)
+ return UprevVersionedPackageResult().add_result('1.2.3', paths)
@uprevs_versioned_package('afdo/kernel-profiles')
@@ -248,7 +264,7 @@
with open(path, 'r') as f:
versions = json.load(f)
- paths = []
+ result = UprevVersionedPackageResult()
for version, version_info in versions.items():
path = os.path.join('src', 'third_party', 'chromiumos-overlay',
'sys-kernel', version)
@@ -256,16 +272,12 @@
'%s-9999.ebuild' % version)
chroot_ebuild_path = os.path.join(constants.CHROOT_SOURCE_ROOT, path,
'%s-9999.ebuild' % version)
-
+ afdo_profile_version = version_info['name']
portage_util.EBuild.UpdateEBuild(
- ebuild_path,
- dict(AFDO_PROFILE_VERSION=version_info['name']),
- make_stable=False)
- paths.append(ebuild_path)
-
- cmd = ['ebuild', chroot_ebuild_path, 'manifest', '--force']
+ ebuild_path, dict(AFDO_PROFILE_VERSION=afdo_profile_version))
try:
+ cmd = ['ebuild', chroot_ebuild_path, 'manifest', '--force']
cros_build_lib.RunCommand(cmd, enter_chroot=True)
except cros_build_lib.RunCommandError as e:
raise EbuildManifestError(
@@ -273,9 +285,10 @@
% (chroot_ebuild_path, e), e)
manifest_path = os.path.join(constants.SOURCE_ROOT, path, 'Manifest')
- paths.append(manifest_path)
- return UprevVersionedPackageResult('test version', paths)
+ result.add_result(afdo_profile_version, [ebuild_path, manifest_path])
+
+ return result
@uprevs_versioned_package(constants.CHROME_CP)
@@ -299,8 +312,8 @@
for package in constants.OTHER_CHROME_PACKAGES:
uprev_manager.uprev(package)
- return UprevVersionedPackageResult(chrome_version,
- uprev_manager.modified_ebuilds)
+ return UprevVersionedPackageResult().add_result(
+ chrome_version, uprev_manager.modified_ebuilds)
def get_best_visible(atom, build_target=None):