aboutsummaryrefslogtreecommitdiff
path: root/hwpack
diff options
context:
space:
mode:
authorMichael Hudson <michael.hudson@linaro.org>2010-12-10 16:56:44 +1300
committerMichael Hudson <michael.hudson@linaro.org>2010-12-10 16:56:44 +1300
commit89a1b8c0e5ce1410d526ac5b73c8981979ad20da (patch)
tree7c80833aa497c131b83107ace79f5cb90f2bd99d /hwpack
parenta2704b88ce77b578ff9df0a1a928e7a099b27af4 (diff)
have the generated packages break/replace each other
Diffstat (limited to 'hwpack')
-rw-r--r--hwpack/hardwarepack.py40
-rw-r--r--hwpack/tests/test_hardwarepack.py12
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):