aboutsummaryrefslogtreecommitdiff
path: root/hwpack
diff options
context:
space:
mode:
authorMichael Hudson <michael.hudson@linaro.org>2010-12-10 13:50:31 +1300
committerMichael Hudson <michael.hudson@linaro.org>2010-12-10 13:50:31 +1300
commit8cae55af6be8f6eed720587890e9cd1ee675d595 (patch)
treeb2d0bd354ad1ba29d0168d122b87bb3442f85bb0 /hwpack
parentac25e497b1f16f2cad9d54035fb89017ee1506e9 (diff)
create two dependency packages, one which depends on the contents of the hwpack, one which depends on the spec
Diffstat (limited to 'hwpack')
-rw-r--r--hwpack/builder.py2
-rw-r--r--hwpack/hardwarepack.py19
-rw-r--r--hwpack/testing.py33
-rw-r--r--hwpack/tests/test_hardwarepack.py122
4 files changed, 126 insertions, 50 deletions
diff --git a/hwpack/builder.py b/hwpack/builder.py
index f37a83c..774afee 100644
--- a/hwpack/builder.py
+++ b/hwpack/builder.py
@@ -41,6 +41,6 @@ class HardwarePackBuilder(object):
self.config.packages,
download_content=self.config.include_debs)
hwpack.add_packages(packages)
- hwpack.add_dependency_package(self.config.packages)
+ hwpack.add_dependency_packages(self.config.packages)
with open(hwpack.filename(), 'w') as f:
hwpack.to_file(f)
diff --git a/hwpack/hardwarepack.py b/hwpack/hardwarepack.py
index 1e5ced6..62d4870 100644
--- a/hwpack/hardwarepack.py
+++ b/hwpack/hardwarepack.py
@@ -163,8 +163,8 @@ class HardwarePack(object):
"""
self.packages += packages
- def add_dependency_package(self, packages_spec):
- """Add a packge that depends on packages_spec to the hardware pack.
+ def add_dependency_packages(self, packages_spec):
+ """XXX Add a package that depends on packages_spec to the hardware pack.
The added package will share the name, version and architecture of the
hardware pack itself.
@@ -173,8 +173,9 @@ class HardwarePack(object):
e.g. ``['foo', 'bar (>= 1.2)']``.
"""
with PackageMaker() as maker:
- if packages_spec:
- relationships = {'Depends': ', '.join(packages_spec)}
+ deps = ['%s (= %s)'%(p.name, p.version) for p in self.packages]
+ if deps:
+ relationships = {'Depends': ', '.join(deps)}
else:
relationships = {}
deb_file_path = maker.make_package(
@@ -182,6 +183,16 @@ class HardwarePack(object):
relationships, self.metadata.architecture)
self.packages.append(FetchedPackage.from_deb(deb_file_path))
+ if packages_spec:
+ relationships = {'Depends': ', '.join(packages_spec)}
+ else:
+ relationships = {}
+ deb_file_path = maker.make_package(
+ 'hwpack-' + self.metadata.name + '-latest',
+ self.metadata.version, relationships,
+ self.metadata.architecture)
+ self.packages.append(FetchedPackage.from_deb(deb_file_path))
+
def to_file(self, fileobj):
"""Write the hwpack to a file object.
diff --git a/hwpack/testing.py b/hwpack/testing.py
index b49f41d..1d74c54 100644
--- a/hwpack/testing.py
+++ b/hwpack/testing.py
@@ -347,6 +347,10 @@ class IsHardwarePack(Matcher):
manifest_lines.append(
"%s=%s" % (
'hwpack-' + self.metadata.name, self.metadata.version))
+ manifest_lines.append(
+ "%s=%s" % (
+ 'hwpack-' + self.metadata.name + '-latest',
+ self.metadata.version))
matchers.append(
HardwarePackHasFile(
"manifest",
@@ -362,13 +366,22 @@ class IsHardwarePack(Matcher):
content=package.content.read()))
package_matchers = [
MatchesPackage(p) for p in packages_with_content]
+ dep_package_depedencies_matchers = [
+ Equals('%s (= %s)' % (p.name, p.version)) for p in self.packages]
dep_package_matcher = MatchesStructure(
- name=Equals('hwpack-' + self.metadata.name),
- version=Equals(self.metadata.version),
- architecture=Equals(self.metadata.architecture))
- if self.package_spec:
- dep_package_matcher.update(depends=self.package_spec)
+ name=Equals('hwpack-' + self.metadata.name),
+ version=Equals(self.metadata.version),
+ architecture=Equals(self.metadata.architecture),
+ depends=MatchesPackageRelationshipList(
+ dep_package_depedencies_matchers))
package_matchers.append(dep_package_matcher)
+ latest_dep_package_matcher = MatchesStructure(
+ name=Equals('hwpack-' + self.metadata.name + '-latest'),
+ version=Equals(self.metadata.version),
+ architecture=Equals(self.metadata.architecture))
+ if self.package_spec:
+ latest_dep_package_matcher.update(depends=self.package_spec)
+ package_matchers.append(latest_dep_package_matcher)
matchers.append(HardwarePackHasFile(
"pkgs/Packages",
content_matcher=MatchesAsPackagesFile(
@@ -593,3 +606,13 @@ def MatchesAsPackageContent(package_matcher):
finally:
os.remove(path)
return AfterPreproccessing(load_from_disk, package_matcher)
+
+
+def MatchesPackageRelationshipList(relationship_matchers):
+ """XXX"""
+ def process(relationships):
+ if relationships is None:
+ return []
+ return [rel.strip() for rel in relationships.split(',')]
+ return AfterPreproccessing(
+ process, MatchesSetwise(*relationship_matchers))
diff --git a/hwpack/tests/test_hardwarepack.py b/hwpack/tests/test_hardwarepack.py
index e90f620..e86041e 100644
--- a/hwpack/tests/test_hardwarepack.py
+++ b/hwpack/tests/test_hardwarepack.py
@@ -10,8 +10,11 @@ from hwpack.packages import get_packages_file
from hwpack.testing import (
DummyFetchedPackage,
HardwarePackHasFile,
+ MatchesAll,
MatchesAsPackagesFile,
MatchesAsPackageContent,
+ MatchesPackage,
+ MatchesPackageRelationshipList,
MatchesStructure,
Not,
)
@@ -226,54 +229,93 @@ class HardwarePackTests(TestCase):
tf,
Not(HardwarePackHasFile("pkgs/%s" % package1.filename)))
- def test_add_dependency_package_adds_package(self):
+ def matcher_for_dependency_package(self, metadata, packages):
+ if packages == []:
+ dep_matcher = Equals(None)
+ else:
+ dep_matcher = MatchesPackageRelationshipList(
+ [Equals('%s (= %s)' % (p.name, p.version)) for p in packages])
+ return MatchesStructure(
+ name=Equals('hwpack-' + self.metadata.name),
+ architecture=Equals(self.metadata.architecture),
+ depends=dep_matcher,
+ version=Equals(self.metadata.version))
+
+ def matcher_for_latest_dependency_package(self, metadata, package_spec):
+ if package_spec == []:
+ dep_matcher = Equals(None)
+ else:
+ dep_matcher = MatchesPackageRelationshipList(
+ [Equals(p) for p in package_spec])
+ return MatchesStructure(
+ name=Equals('hwpack-' + metadata.name + '-latest'),
+ architecture=Equals(metadata.architecture),
+ depends=dep_matcher,
+ version=Equals(metadata.version))
+
+ def test_add_dependency_package_adds_packages(self):
hwpack = HardwarePack(self.metadata)
- hwpack.add_dependency_package([])
+ hwpack.add_dependency_packages([])
tf = self.get_tarfile(hwpack)
+ dep_package_matcher = self.matcher_for_dependency_package(
+ self.metadata, [])
+ latest_dep_package_matcher = self.matcher_for_latest_dependency_package(
+ self.metadata, [])
self.assertThat(
tf,
- HardwarePackHasFile(
- "pkgs/%s_%s_%s.deb" % (
- 'hwpack-' + self.metadata.name, self.metadata.version,
- self.metadata.architecture),
- content_matcher=MatchesAsPackageContent(
- MatchesStructure(
- name=Equals('hwpack-' + self.metadata.name),
- architecture=Equals(self.metadata.architecture),
- depends=Equals(None),
- version=Equals(self.metadata.version)))))
-
- def test_add_dependency_package_adds_package_with_dependency(self):
- hwpack = HardwarePack(self.metadata)
- hwpack.add_dependency_package(["foo", "bar (= 1.0)"])
- tf = self.get_tarfile(hwpack)
- self.assertThat(
- tf,
- HardwarePackHasFile(
- "pkgs/%s_%s_%s.deb" % (
- 'hwpack-' + self.metadata.name, self.metadata.version,
- self.metadata.architecture),
- content_matcher=MatchesAsPackageContent(
- MatchesStructure(
- name=Equals('hwpack-' + self.metadata.name),
- architecture=Equals(self.metadata.architecture),
- depends=Equals("foo, bar (= 1.0)"),
- version=Equals(self.metadata.version)))))
-
- def test_add_dependency_package_adds_package_to_Packages(self):
+ MatchesAll(
+ HardwarePackHasFile(
+ "pkgs/%s_%s_%s.deb" % (
+ 'hwpack-' + self.metadata.name, self.metadata.version,
+ self.metadata.architecture),
+ content_matcher=MatchesAsPackageContent(
+ dep_package_matcher)),
+ HardwarePackHasFile(
+ "pkgs/%s_%s_%s.deb" % (
+ 'hwpack-' + self.metadata.name + '-latest',
+ self.metadata.version, self.metadata.architecture),
+ content_matcher=MatchesAsPackageContent(
+ latest_dep_package_matcher)),
+ HardwarePackHasFile(
+ "pkgs/Packages",
+ content_matcher=MatchesAsPackagesFile(
+ dep_package_matcher,
+ latest_dep_package_matcher))))
+
+
+ def test_add_dependency_package_adds_packages_with_dependency(self):
hwpack = HardwarePack(self.metadata)
- hwpack.add_dependency_package(["foo", "bar (= 1.0)"])
+ packages = [DummyFetchedPackage("foo", '2.0'),
+ DummyFetchedPackage("bar", '1.0')]
+ hwpack.add_packages(packages)
+ hwpack.add_dependency_packages(["foo", "bar (= 1.0)"])
tf = self.get_tarfile(hwpack)
+ dep_package_matcher = self.matcher_for_dependency_package(
+ self.metadata, packages)
+ latest_dep_package_matcher = self.matcher_for_latest_dependency_package(
+ self.metadata, ["foo", "bar (= 1.0)"])
self.assertThat(
tf,
- HardwarePackHasFile(
- "pkgs/Packages",
- content_matcher=MatchesAsPackagesFile(
- MatchesStructure(
- name=Equals('hwpack-' + self.metadata.name),
- architecture=Equals(self.metadata.architecture),
- depends=Equals("foo, bar (= 1.0)"),
- version=Equals(self.metadata.version)))))
+ MatchesAll(
+ HardwarePackHasFile(
+ "pkgs/%s_%s_%s.deb" % (
+ 'hwpack-' + self.metadata.name, self.metadata.version,
+ self.metadata.architecture),
+ content_matcher=MatchesAsPackageContent(
+ dep_package_matcher)),
+ HardwarePackHasFile(
+ "pkgs/%s_%s_%s.deb" % (
+ 'hwpack-' + self.metadata.name + '-latest',
+ self.metadata.version, self.metadata.architecture),
+ content_matcher=MatchesAsPackageContent(
+ latest_dep_package_matcher)),
+ HardwarePackHasFile(
+ "pkgs/Packages",
+ content_matcher=MatchesAsPackagesFile(
+ dep_package_matcher,
+ latest_dep_package_matcher,
+ *map(MatchesPackage, packages))),
+ ))
def test_creates_Packages_file(self):
hwpack = HardwarePack(self.metadata)