Blame SOURCES/as_utils_vercmp_full.patch

0785d5
From d651281e77120ce4c7431364e4787f08189666b6 Mon Sep 17 00:00:00 2001
0785d5
From: Richard Hughes <richard@hughsie.com>
0785d5
Date: Wed, 24 Oct 2018 10:15:00 +0100
0785d5
Subject: [PATCH 1/2] Add as_utils_vercmp_full() for gnome-software
0785d5
0785d5
Sometimes we don't want to do the firmware-style heuristics.
0785d5
---
0785d5
 libappstream-glib/as-utils.c | 42 ++++++++++++++++++++++++++++--------
0785d5
 libappstream-glib/as-utils.h | 14 ++++++++++++
0785d5
 2 files changed, 47 insertions(+), 9 deletions(-)
0785d5
0785d5
diff --git a/libappstream-glib/as-utils.c b/libappstream-glib/as-utils.c
0785d5
index 29f1637..62d411a 100644
0785d5
--- a/libappstream-glib/as-utils.c
0785d5
+++ b/libappstream-glib/as-utils.c
0785d5
@@ -1388,22 +1388,23 @@ as_utils_vercmp_chunk (const gchar *str1, const gchar *str2)
0785d5
 }
0785d5
 
0785d5
 /**
0785d5
- * as_utils_vercmp:
0785d5
+ * as_utils_vercmp_full:
0785d5
  * @version_a: the release version, e.g. 1.2.3
0785d5
  * @version_b: the release version, e.g. 1.2.3.1
0785d5
+ * @flags: some #AsVersionCompareFlag
0785d5
  *
0785d5
  * Compares version numbers for sorting.
0785d5
  *
0785d5
  * Returns: -1 if a < b, +1 if a > b, 0 if they are equal, and %G_MAXINT on error
0785d5
  *
0785d5
- * Since: 0.3.5
0785d5
+ * Since: 0.7.14
0785d5
  */
0785d5
 gint
0785d5
-as_utils_vercmp (const gchar *version_a, const gchar *version_b)
0785d5
+as_utils_vercmp_full (const gchar *version_a,
0785d5
+		      const gchar *version_b,
0785d5
+		      AsVersionCompareFlag flags)
0785d5
 {
0785d5
 	guint longest_split;
0785d5
-	g_autofree gchar *str_a = NULL;
0785d5
-	g_autofree gchar *str_b = NULL;
0785d5
 	g_auto(GStrv) split_a = NULL;
0785d5
 	g_auto(GStrv) split_b = NULL;
0785d5
 
0785d5
@@ -1416,10 +1417,15 @@ as_utils_vercmp (const gchar *version_a, const gchar *version_b)
0785d5
 		return 0;
0785d5
 
0785d5
 	/* split into sections, and try to parse */
0785d5
-	str_a = as_utils_version_parse (version_a);
0785d5
-	str_b = as_utils_version_parse (version_b);
0785d5
-	split_a = g_strsplit (str_a, ".", -1);
0785d5
-	split_b = g_strsplit (str_b, ".", -1);
0785d5
+	if (flags & AS_VERSION_COMPARE_FLAG_USE_HEURISTICS) {
0785d5
+		g_autofree gchar *str_a = as_utils_version_parse (version_a);
0785d5
+		g_autofree gchar *str_b = as_utils_version_parse (version_b);
0785d5
+		split_a = g_strsplit (str_a, ".", -1);
0785d5
+		split_b = g_strsplit (str_b, ".", -1);
0785d5
+	} else {
0785d5
+		split_a = g_strsplit (version_a, ".", -1);
0785d5
+		split_b = g_strsplit (version_b, ".", -1);
0785d5
+	}
0785d5
 	longest_split = MAX (g_strv_length (split_a), g_strv_length (split_b));
0785d5
 	for (guint i = 0; i < longest_split; i++) {
0785d5
 		gchar *endptr_a = NULL;
0785d5
@@ -1456,6 +1462,24 @@ as_utils_vercmp (const gchar *version_a, const gchar *version_b)
0785d5
 	return 0;
0785d5
 }
0785d5
 
0785d5
+/**
0785d5
+ * as_utils_vercmp:
0785d5
+ * @version_a: the release version, e.g. 1.2.3
0785d5
+ * @version_b: the release version, e.g. 1.2.3.1
0785d5
+ *
0785d5
+ * Compares version numbers for sorting.
0785d5
+ *
0785d5
+ * Returns: -1 if a < b, +1 if a > b, 0 if they are equal, and %G_MAXINT on error
0785d5
+ *
0785d5
+ * Since: 0.3.5
0785d5
+ */
0785d5
+gint
0785d5
+as_utils_vercmp (const gchar *version_a, const gchar *version_b)
0785d5
+{
0785d5
+	return as_utils_vercmp_full (version_a, version_b,
0785d5
+				     AS_VERSION_COMPARE_FLAG_USE_HEURISTICS);
0785d5
+}
0785d5
+
0785d5
 /**
0785d5
  * as_ptr_array_find_string:
0785d5
  * @array: gchar* array
0785d5
diff --git a/libappstream-glib/as-utils.h b/libappstream-glib/as-utils.h
0785d5
index ecb7cdd..8401df8 100644
0785d5
--- a/libappstream-glib/as-utils.h
0785d5
+++ b/libappstream-glib/as-utils.h
0785d5
@@ -95,6 +95,20 @@ typedef enum {
0785d5
 	AS_VERSION_PARSE_FLAG_LAST
0785d5
 } AsVersionParseFlag;
0785d5
 
0785d5
+/**
0785d5
+ * AsVersionCompareFlag:
0785d5
+ * @AS_VERSION_COMPARE_FLAG_NONE:		No flags set
0785d5
+ * @AS_VERSION_COMPARE_FLAG_USE_HEURISTICS:	Use a heuristic to parse version numbers
0785d5
+ *
0785d5
+ * The flags used when comparing version numbers.
0785d5
+ **/
0785d5
+typedef enum {
0785d5
+	AS_VERSION_COMPARE_FLAG_NONE		= 0,
0785d5
+	AS_VERSION_COMPARE_FLAG_USE_HEURISTICS	= 1 << 0,
0785d5
+	/*< private >*/
0785d5
+	AS_VERSION_COMPARE_FLAG_LAST
0785d5
+} AsVersionCompareFlag;
0785d5
+
0785d5
 /**
0785d5
  * AsUniqueIdMatchFlags:
0785d5
  * @AS_UNIQUE_ID_MATCH_FLAG_NONE:		No flags set
0785d5
-- 
0785d5
2.19.1
0785d5
0785d5
0785d5
From d8f67b1a9be9707c04ed4f1f71eb5365c09c275d Mon Sep 17 00:00:00 2001
0785d5
From: Kalev Lember <klember@redhat.com>
0785d5
Date: Wed, 24 Oct 2018 11:45:56 +0200
0785d5
Subject: [PATCH 2/2] trivial: Add missing prototype for as_utils_vercmp_full
0785d5
0785d5
---
0785d5
 libappstream-glib/as-utils.h | 3 +++
0785d5
 1 file changed, 3 insertions(+)
0785d5
0785d5
diff --git a/libappstream-glib/as-utils.h b/libappstream-glib/as-utils.h
0785d5
index 8401df8..2fa5199 100644
0785d5
--- a/libappstream-glib/as-utils.h
0785d5
+++ b/libappstream-glib/as-utils.h
0785d5
@@ -160,6 +160,9 @@ gboolean	 as_utils_install_filename	(AsUtilsLocation location,
0785d5
 						 GError		**error);
0785d5
 gboolean	 as_utils_search_token_valid	(const gchar	*token);
0785d5
 gchar		**as_utils_search_tokenize	(const gchar	*search);
0785d5
+gint		 as_utils_vercmp_full		(const gchar	*version_a,
0785d5
+						 const gchar	*version_b,
0785d5
+						 AsVersionCompareFlag flags);
0785d5
 gint		 as_utils_vercmp		(const gchar	*version_a,
0785d5
 						 const gchar	*version_b);
0785d5
 gboolean	 as_utils_guid_is_valid		(const gchar	*guid);
0785d5
-- 
0785d5
2.19.1
0785d5