diff options
author | Michael Hudson <michael.hudson@linaro.org> | 2010-12-10 16:56:44 +1300 |
---|---|---|
committer | Michael Hudson <michael.hudson@linaro.org> | 2010-12-10 16:56:44 +1300 |
commit | 89a1b8c0e5ce1410d526ac5b73c8981979ad20da (patch) | |
tree | 7c80833aa497c131b83107ace79f5cb90f2bd99d /hwpack | |
parent | a2704b88ce77b578ff9df0a1a928e7a099b27af4 (diff) |
have the generated packages break/replace each other
Diffstat (limited to 'hwpack')
-rw-r--r-- | hwpack/hardwarepack.py | 40 | ||||
-rw-r--r-- | hwpack/tests/test_hardwarepack.py | 12 |
2 files changed, 36 insertions, 16 deletions
diff --git a/hwpack/hardwarepack.py b/hwpack/hardwarepack.py index 53cbf0c..64f559e 100644 --- a/hwpack/hardwarepack.py +++ b/hwpack/hardwarepack.py @@ -164,33 +164,45 @@ class HardwarePack(object): self.packages += packages def add_dependency_packages(self, packages_spec): - """XXX Add a package that depends on packages_spec to the hardware pack. + """Add package that depends on those already present to the pack. - The added package will share the name, version and architecture of the - hardware pack itself. + This method will add two packages. One will be called 'hwpack-' + the + name of the pack and will depend on the exact versions of every + package in the hwpack. The other will have -latest appended to the + name and will depend on `package_spec`, which is assumed to be the + package specification the hardware pack was built with. + + The added packages will share version and architecture of the hardware + pack itself and will Replace/Break each other. :param packages_spec: A list of apt package specifications, e.g. ``['foo', 'bar (>= 1.2)']``. """ with PackageMaker() as maker: + dep_package_name = 'hwpack-' + self.metadata.name + latest_dep_package_name = dep_package_name + '-latest' + + dep_relationships = { + 'Replaces': latest_dep_package_name, + 'Breaks': latest_dep_package_name + } deps = ['%s (= %s)'%(p.name, p.version) for p in self.packages] if deps: - relationships = {'Depends': ', '.join(deps)} - else: - relationships = {} + dep_relationships['Depends'] = ', '.join(deps) deb_file_path = maker.make_package( - 'hwpack-' + self.metadata.name, self.metadata.version, - relationships, self.metadata.architecture) + dep_package_name, self.metadata.version, + dep_relationships, self.metadata.architecture) self.packages.append(FetchedPackage.from_deb(deb_file_path)) + latest_dep_relationships = { + 'Replaces': dep_package_name, + 'Breaks': dep_package_name + } if packages_spec: - relationships = {'Depends': ', '.join(packages_spec)} - else: - relationships = {} + latest_dep_relationships['Depends'] = ', '.join(packages_spec) deb_file_path = maker.make_package( - 'hwpack-' + self.metadata.name + '-latest', - self.metadata.version, relationships, - self.metadata.architecture) + latest_dep_package_name, self.metadata.version, + latest_dep_relationships, self.metadata.architecture) self.packages.append(FetchedPackage.from_deb(deb_file_path)) def to_file(self, fileobj): diff --git a/hwpack/tests/test_hardwarepack.py b/hwpack/tests/test_hardwarepack.py index 5b3faed..ddca484 100644 --- a/hwpack/tests/test_hardwarepack.py +++ b/hwpack/tests/test_hardwarepack.py @@ -230,27 +230,35 @@ class HardwarePackTests(TestCase): Not(HardwarePackHasFile("pkgs/%s" % package1.filename))) def matcher_for_dependency_package(self, metadata, packages): + dep_package_name = 'hwpack-%s' % metadata.name + latest_dep_package_name = 'hwpack-%s-latest' % metadata.name 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), + name=Equals(dep_package_name), architecture=Equals(self.metadata.architecture), + breaks=Equals(latest_dep_package_name), + replaces=Equals(latest_dep_package_name), depends=dep_matcher, version=Equals(self.metadata.version)) def matcher_for_latest_dependency_package(self, metadata, package_spec): + dep_package_name = 'hwpack-%s' % metadata.name + latest_dep_package_name = 'hwpack-%s-latest' % metadata.name 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'), + name=Equals(latest_dep_package_name), architecture=Equals(metadata.architecture), depends=dep_matcher, + breaks=Equals(dep_package_name), + replaces=Equals(dep_package_name), version=Equals(metadata.version)) def test_add_dependency_package_adds_packages(self): |