diff options
author | Michael Hudson <michael.hudson@linaro.org> | 2010-12-10 13:50:31 +1300 |
---|---|---|
committer | Michael Hudson <michael.hudson@linaro.org> | 2010-12-10 13:50:31 +1300 |
commit | 8cae55af6be8f6eed720587890e9cd1ee675d595 (patch) | |
tree | b2d0bd354ad1ba29d0168d122b87bb3442f85bb0 /hwpack | |
parent | ac25e497b1f16f2cad9d54035fb89017ee1506e9 (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.py | 2 | ||||
-rw-r--r-- | hwpack/hardwarepack.py | 19 | ||||
-rw-r--r-- | hwpack/testing.py | 33 | ||||
-rw-r--r-- | hwpack/tests/test_hardwarepack.py | 122 |
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) |