summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2016-02-01 09:35:36 +0000
committerRichard Hughes <richard@hughsie.com>2016-02-01 09:35:36 +0000
commitb8698dc7ce5450d95adf98e14e5b22cac272ce50 (patch)
tree89be21cfdb3637e5aa7a5182c958e5307176b523
parentbfc6783eccc7e4d67d43011fdfaf88cf5972bc83 (diff)
downloadappstream-glib-b8698dc7ce5450d95adf98e14e5b22cac272ce50.tar.gz
Use predictable sorting when outputting <provides>
-rw-r--r--libappstream-glib/as-app.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libappstream-glib/as-app.c b/libappstream-glib/as-app.c
index 2f738c3..0222567 100644
--- a/libappstream-glib/as-app.c
+++ b/libappstream-glib/as-app.c
@@ -2987,6 +2987,23 @@ as_app_releases_sort_cb (gconstpointer a, gconstpointer b)
}
/**
+ * as_app_provides_sort_cb:
+ **/
+static gint
+as_app_provides_sort_cb (gconstpointer a, gconstpointer b)
+{
+ AsProvide *prov1 = *((AsProvide **) a);
+ AsProvide *prov2 = *((AsProvide **) b);
+
+ if (as_provide_get_kind (prov1) < as_provide_get_kind (prov2))
+ return -1;
+ if (as_provide_get_kind (prov1) > as_provide_get_kind (prov2))
+ return 1;
+ return g_strcmp0 (as_provide_get_value (prov1),
+ as_provide_get_value (prov2));
+}
+
+/**
* as_app_icons_sort_cb:
**/
static gint
@@ -3285,6 +3302,7 @@ as_app_node_insert (AsApp *app, GNode *parent, AsNodeContext *ctx)
/* <provides> */
if (priv->provides->len > 0) {
AsProvide *provide;
+ g_ptr_array_sort (priv->provides, as_app_provides_sort_cb);
node_tmp = as_node_insert (node_app, "provides", NULL, 0, NULL);
for (i = 0; i < priv->provides->len; i++) {
provide = g_ptr_array_index (priv->provides, i);