From 8fd8e1958de64d605cbe2a01114369bce46c7829 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 11 Mar 2016 09:15:09 -0600 Subject: [PATCH] add support for subvariants Signed-off-by: Dennis Gilmore --- ...60766b8e3882f7a947ba00c82ae59f392d80.patch | 126 ++++++++++++++++++ python-productmd.spec | 5 + 2 files changed, 131 insertions(+) create mode 100644 e0e360766b8e3882f7a947ba00c82ae59f392d80.patch diff --git a/e0e360766b8e3882f7a947ba00c82ae59f392d80.patch b/e0e360766b8e3882f7a947ba00c82ae59f392d80.patch new file mode 100644 index 0000000..6ec4aeb --- /dev/null +++ b/e0e360766b8e3882f7a947ba00c82ae59f392d80.patch @@ -0,0 +1,126 @@ +From e0e360766b8e3882f7a947ba00c82ae59f392d80 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Sun, 28 Feb 2016 12:48:42 -0800 +Subject: [PATCH] add 'subvariant' property to images + +This is to solve a problem we have with the Fedora composes. +There are 'Spins' and 'Labs' variants which produce several +live images and ARM appliances with differing content. With the +current metadata, there is no good way to tell the KDE live +image from the Xfce or LXDE live images; the only property +which indicates this is the 'path', but that has lots of other +information in it and is not trivially parseable (as image +names don't really strictly follow the naming policy you +cannot strictly tell what element of the image file name is +the 'subvariant'). + +Thus we add a 'subvariant' property which Pungi will populate as +appropriate. For many images the 'subvariant' will be the variant, +but for Spins and Labs it will indicate the actual content of +each image. + +The image metadata version should probably change with this, +but I couldn't see the right way to do that (surely I don't +just universally bump it to 1, 1 in common.py?) Pungi will +also need a few corresponding changes, I will send a Pagure +PR for those. +--- + doc/images-1.0.rst | 1 + + productmd/images.py | 7 +++++++ + tests/test_images.py | 12 +++++++----- + 3 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/doc/images-1.0.rst b/doc/images-1.0.rst +index fa04ad3..6ac36b7 100644 +--- a/doc/images-1.0.rst ++++ b/doc/images-1.0.rst +@@ -40,6 +40,7 @@ in order to read and diff images.json files easily. + "implant_md5": , # md5 checksum implanted directly on media (see implantisomd5 and checkisomd5 commands) + "mtime": , # mtime of the image stored as a decimal unix timestamp + "path": , # relative path to the image ++ "subvariant": , # image content (e.g. 'Workstation' or 'KDE') + "size": , # file size of the image + "type": , # see productmd.images.SUPPORTED_IMAGE_TYPES + "volume_id": # volume ID; null if not available/applicable +diff --git a/productmd/images.py b/productmd/images.py +index ca8fbd4..df825bb 100644 +--- a/productmd/images.py ++++ b/productmd/images.py +@@ -119,6 +119,7 @@ def __init__(self, parent): + self.checksums = {} #: (*str*) -- Release name, for example: "Fedora", "Red Hat Enterprise Linux" + self.implant_md5 = None #: (*str* or *None*) -- value of implanted md5 + self.bootable = False #: (*bool=False*) -- ++ self.subvariant = None #: (*str*) -- image contents, may be same as variant or e.g. 'KDE', 'LXDE' + + def _validate_path(self): + self._assert_type("path", list(six.string_types)) +@@ -166,6 +167,10 @@ def _validate_implant_md5(self): + def _validate_bootable(self): + self._assert_type("bootable", [bool]) + ++ def _validate_subvariant(self): ++ self._assert_type("subvariant", list(six.string_types)) ++ self._assert_not_blank("subvariant") ++ + def serialize(self, parser): + data = parser + self.validate() +@@ -182,6 +187,7 @@ def serialize(self, parser): + "checksums": self.checksums, + "implant_md5": self.implant_md5, + "bootable": self.bootable, ++ "subvariant": self.subvariant, + } + data.append(result) + +@@ -198,6 +204,7 @@ def deserialize(self, data): + self.checksums = data["checksums"] + self.implant_md5 = data["implant_md5"] + self.bootable = bool(data["bootable"]) ++ self.subvariant = data["subvariant"] + self.validate() + + def add_checksum(self, root, checksum_type, checksum_value): +diff --git a/tests/test_images.py b/tests/test_images.py +index 614ab21..603297f 100755 +--- a/tests/test_images.py ++++ b/tests/test_images.py +@@ -72,7 +72,7 @@ def test_fedora_20(self): + im.compose.respin = 0 + + i = Image(im) +- i.path = "Fedora/x86_64/iso/Fedora-20-x86_64-DVD.iso" ++ i.path = "Fedora/x86_64/iso/Fedora-Server-dvd-x86_64-20.iso" + i.mtime = 1410855216 + i.size = 4603248640 + i.arch = "x86_64" +@@ -80,7 +80,8 @@ def test_fedora_20(self): + i.format = "iso" + i.disc_number = 1 + i.disc_count = 1 +- i.volume_id = "Fedora 20 x86_64" ++ i.volume_id = "Fedora-S-dvd-x86_64-20" ++ i.subvariant = "Server" + + # checksums + i.add_checksum(root=None, checksum_type="sha256", checksum_value="f2eeed5102b8890e9e6f4b9053717fe73031e699c4b76dc7028749ab66e7f917") +@@ -98,15 +99,16 @@ def test_fedora_20(self): + im.add("Fedora", "x86_64", i) + + i = Image(im) +- i.path = "Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso" ++ i.path = "Fedora/x86_64/iso/Fedora-Server-boot-x86_64-20.iso" + i.mtime = 1410855243 + i.size = 336592896 + i.arch = "x86_64" +- i.type = "netinst" ++ i.type = "boot" + i.format = "iso" + i.disc_number = 1 + i.disc_count = 1 +- i.volume_id = "Fedora 20 x86_64" ++ i.volume_id = "Fedora-S-boot-x86_64-20" ++ i.subvariant = "Server" + + # checksums + i.add_checksum(root=None, checksum_type="sha256", checksum_value="376be7d4855ad6281cb139430606a782fd6189dcb01d7b61448e915802cc350f") diff --git a/python-productmd.spec b/python-productmd.spec index 04695d9..47a7400 100644 --- a/python-productmd.spec +++ b/python-productmd.spec @@ -23,6 +23,7 @@ License: LGPLv2+ URL: https://github.com/release-engineering/productmd Source0: productmd-%{version}.tar.bz2 Patch0: 0001-update-the-other-two-_validate_version-functions-to-.patch +Patch1: e0e360766b8e3882f7a947ba00c82ae59f392d80.patch Obsoletes: productmd <= %{version}-%{release} Provides: productmd = %{version}-%{release} @@ -57,6 +58,7 @@ and installation media. %setup -qc -n productmd-%{version} pushd productmd-%{version} %patch0 -p1 +%patch1 -p1 popd mv productmd-%{version} python2 @@ -113,6 +115,9 @@ popd %endif %changelog +* Fri Mar 11 2016 Dennis Gilmore - 1.0-13 +- add patch for supporting subvariant + * Thu Feb 18 2016 Dennis Gilmore - 1.0-12 - add a patch to make rawhide as a version consistently an option