Blob Blame History Raw
From ef3bd2cd6904ef4882b9ce0c7a1cdff861afc0dc Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <ignatenko@redhat.com>
Date: Thu, 23 Feb 2017 16:44:59 +0100
Subject: [PATCH 1/3] reldep_from_str: add support for rich deps

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>

Closes: #266
Approved by: j-mracek
---
 src/iutil.c | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/iutil.c b/src/iutil.c
index 2a20e2c..b1bc509 100644
--- a/src/iutil.c
+++ b/src/iutil.c
@@ -39,6 +39,7 @@
 #include <solv/solver.h>
 #include <solv/solverdebug.h>
 #include <solv/util.h>
+#include <solv/pool_parserpmrichdep.h>
 
 // hawkey
 #include "errno_internal.h"
@@ -47,6 +48,7 @@
 #include "packageset_internal.h"
 #include "query.h"
 #include "reldep.h"
+#include "reldep_internal.h"
 #include "sack_internal.h"
 
 #define BUF_BLOCK 4096
@@ -788,14 +790,23 @@ parse_reldep_str(const char *reldep_str, char **name, char **evr,
 HyReldep
 reldep_from_str(HySack sack, const char *reldep_str)
 {
-    char *name, *evr = NULL;
-    int cmp_type = 0;
-    if (parse_reldep_str(reldep_str, &name, &evr, &cmp_type) == -1)
-	return NULL;
-    HyReldep reldep = hy_reldep_create(sack, name, cmp_type, evr);
-    solv_free(name);
-    solv_free(evr);
-    return reldep;
+    if (reldep_str[0] == '(') {
+        /* Rich dependency */
+        Pool *pool = sack_pool(sack);
+        Id id = pool_parserpmrichdep(pool, reldep_str);
+        if (!id)
+            return NULL;
+        return reldep_create(pool, id);
+    } else {
+        char *name, *evr = NULL;
+        int cmp_type = 0;
+        if (parse_reldep_str(reldep_str, &name, &evr, &cmp_type) == -1)
+            return NULL;
+        HyReldep reldep = hy_reldep_create(sack, name, cmp_type, evr);
+        solv_free(name);
+        solv_free(evr);
+        return reldep;
+    }
 }
 
 HyReldepList
-- 
2.12.1