// Groups
struct json_object* groups = pakfire_archive_metadata_get_object(archive, "groups", NULL);
- if (groups && json_object_is_type(groups, json_type_array)) {
- const size_t length = json_object_array_length(groups);
- for (unsigned int i = 0; i < length; i++) {
- struct json_object* item = json_object_array_get_idx(groups, i);
- if (!item)
- continue;
+ if (groups) {
+ if (json_object_is_type(groups, json_type_array)) {
+ const size_t length = json_object_array_length(groups);
- const char* group = json_object_get_string(item);
- if (!group)
- continue;
+ for (unsigned int i = 0; i < length; i++) {
+ struct json_object* item = json_object_array_get_idx(groups, i);
+ if (!item)
+ continue;
- r = pakfire_package_add_string(pkg, PAKFIRE_PKG_GROUPS, group);
- if (r)
+ const char* group = json_object_get_string(item);
+ if (!group)
+ continue;
+
+ r = pakfire_package_add_string(pkg, PAKFIRE_PKG_GROUPS, group);
+ if (r)
+ goto ERROR;
+ }
+
+ // Compatibility code for when groups where stored as a simple string
+ } else if (json_object_is_type(groups, json_type_string)) {
+ r = pakfire_package_add_string(pkg,
+ PAKFIRE_PKG_GROUPS, json_object_get_string(groups));
+ if (r < 0)
goto ERROR;
}
}
self.assertEqual(p.license, "GPLv2+")
self.assertEqual(p.vendor, "IPFire Project")
self.assertEqual(p.distribution, "ipfire3")
- self.assertEqual(p.groups, "Applications/System")
+ self.assertEqual(p.groups, ["Applications/System"])
self.assertEqual(p.uuid, "a20dddff-d8e8-4544-aaee-8bab618b0b3f")
self.assertIsNone(p.packager)