|
Igor Gnatenko |
0bd7f8d |
From 849f65b2466cf15042596119a2703cc6eac67e8c Mon Sep 17 00:00:00 2001
|
|
Igor Gnatenko |
0bd7f8d |
From: Igor Gnatenko <ignatenko@redhat.com>
|
|
Igor Gnatenko |
0bd7f8d |
Date: Thu, 9 Mar 2017 07:39:49 +0100
|
|
Igor Gnatenko |
0bd7f8d |
Subject: [PATCH 2/3] always allocate memory for reldep
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
Currently if we try to create reldep from "foo = 1" and foo is
|
|
Igor Gnatenko |
0bd7f8d |
not in sack, it would say that it can't create it. But this is wrong,
|
|
Igor Gnatenko |
0bd7f8d |
because reldep is something abstract and we should check that it doesn't
|
|
Igor Gnatenko |
0bd7f8d |
match anything in query/selector rather than just try to find it immediately.
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
When we process rich deps, we blindly allocate memory for reldep
|
|
Igor Gnatenko |
0bd7f8d |
because we don't know in advance whether it exists or not.
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
Libsolv doesn't have any function to validate correctness of name, so we can't
|
|
Igor Gnatenko |
0bd7f8d |
do much (it takes care of parsing rpm-md, so it doesn't check there).
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
Closes: #266
|
|
Igor Gnatenko |
0bd7f8d |
Approved by: j-mracek
|
|
Igor Gnatenko |
0bd7f8d |
---
|
|
Igor Gnatenko |
0bd7f8d |
src/python/reldep-py.c | 4 ----
|
|
Igor Gnatenko |
0bd7f8d |
src/reldep.c | 6 +-----
|
|
Igor Gnatenko |
0bd7f8d |
tests/python/tests/test_reldep.py | 23 +++++++++--------------
|
|
Igor Gnatenko |
0bd7f8d |
tests/test_selector.c | 7 +++++--
|
|
Igor Gnatenko |
0bd7f8d |
4 files changed, 15 insertions(+), 25 deletions(-)
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
diff --git a/src/python/reldep-py.c b/src/python/reldep-py.c
|
|
Igor Gnatenko |
0bd7f8d |
index 08229f3..c22a1b8 100644
|
|
Igor Gnatenko |
0bd7f8d |
--- a/src/python/reldep-py.c
|
|
Igor Gnatenko |
0bd7f8d |
+++ b/src/python/reldep-py.c
|
|
Igor Gnatenko |
0bd7f8d |
@@ -134,10 +134,6 @@ reldep_init(_ReldepObject *self, PyObject *args, PyObject *kwds)
|
|
Igor Gnatenko |
0bd7f8d |
solv_free(name);
|
|
Igor Gnatenko |
0bd7f8d |
solv_free(evr);
|
|
Igor Gnatenko |
0bd7f8d |
Py_XDECREF(tmp_py_str);
|
|
Igor Gnatenko |
0bd7f8d |
- if (self->reldep == NULL) {
|
|
Igor Gnatenko |
0bd7f8d |
- PyErr_Format(HyExc_Value, "No such reldep: %s", reldep_str);
|
|
Igor Gnatenko |
0bd7f8d |
- return -1;
|
|
Igor Gnatenko |
0bd7f8d |
- }
|
|
Igor Gnatenko |
0bd7f8d |
return 0;
|
|
Igor Gnatenko |
0bd7f8d |
}
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
diff --git a/src/reldep.c b/src/reldep.c
|
|
Igor Gnatenko |
0bd7f8d |
index d354f00..0784367 100644
|
|
Igor Gnatenko |
0bd7f8d |
--- a/src/reldep.c
|
|
Igor Gnatenko |
0bd7f8d |
+++ b/src/reldep.c
|
|
Igor Gnatenko |
0bd7f8d |
@@ -73,11 +73,7 @@ HyReldep
|
|
Igor Gnatenko |
0bd7f8d |
hy_reldep_create(HySack sack, const char *name, int cmp_type, const char *evr)
|
|
Igor Gnatenko |
0bd7f8d |
{
|
|
Igor Gnatenko |
0bd7f8d |
Pool *pool = sack_pool(sack);
|
|
Igor Gnatenko |
0bd7f8d |
- Id id = pool_str2id(pool, name, 0);
|
|
Igor Gnatenko |
0bd7f8d |
-
|
|
Igor Gnatenko |
0bd7f8d |
- if (id == STRID_NULL || id == STRID_EMPTY)
|
|
Igor Gnatenko |
0bd7f8d |
- // stop right there, this will never match anything.
|
|
Igor Gnatenko |
0bd7f8d |
- return NULL;
|
|
Igor Gnatenko |
0bd7f8d |
+ Id id = pool_str2id(pool, name, 1);
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
if (evr) {
|
|
Igor Gnatenko |
0bd7f8d |
assert(cmp_type);
|
|
Igor Gnatenko |
0bd7f8d |
diff --git a/tests/python/tests/test_reldep.py b/tests/python/tests/test_reldep.py
|
|
Igor Gnatenko |
0bd7f8d |
index 2232d4c..f0bb1a9 100644
|
|
Igor Gnatenko |
0bd7f8d |
--- a/tests/python/tests/test_reldep.py
|
|
Igor Gnatenko |
0bd7f8d |
+++ b/tests/python/tests/test_reldep.py
|
|
Igor Gnatenko |
0bd7f8d |
@@ -35,20 +35,15 @@ class Reldep(base.TestCase):
|
|
Igor Gnatenko |
0bd7f8d |
reldep = requires[0]
|
|
Igor Gnatenko |
0bd7f8d |
self.assertEqual(str(reldep), "P-lib >= 3")
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
- def test_unicode(self):
|
|
Igor Gnatenko |
0bd7f8d |
- reldep_str = u"\u0159 >= 3"
|
|
Igor Gnatenko |
0bd7f8d |
- self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
|
|
Igor Gnatenko |
0bd7f8d |
- reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
-
|
|
Igor Gnatenko |
0bd7f8d |
def test_custom_creation(self):
|
|
Igor Gnatenko |
0bd7f8d |
reldep_str = "P-lib >= 3"
|
|
Igor Gnatenko |
0bd7f8d |
reldep = hawkey.Reldep(self.sack, reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
self.assertEqual(reldep_str, str(reldep))
|
|
Igor Gnatenko |
0bd7f8d |
+ reldep_str = "lane = 4"
|
|
Igor Gnatenko |
0bd7f8d |
+ reldep = hawkey.Reldep(self.sack, reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
+ self.assertEqual(reldep_str, str(reldep))
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
def test_custom_creation_fail(self):
|
|
Igor Gnatenko |
0bd7f8d |
- reldep_str = "lane = 4"
|
|
Igor Gnatenko |
0bd7f8d |
- self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
|
|
Igor Gnatenko |
0bd7f8d |
- reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
reldep_str = "P-lib >="
|
|
Igor Gnatenko |
0bd7f8d |
self.assertRaises(hawkey.ValueException, hawkey.Reldep, self.sack,
|
|
Igor Gnatenko |
0bd7f8d |
reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
@@ -63,6 +58,12 @@ class Reldep(base.TestCase):
|
|
Igor Gnatenko |
0bd7f8d |
reldep = hawkey.Reldep(self.sack, "P-lib < 3-3")
|
|
Igor Gnatenko |
0bd7f8d |
q = hawkey.Query(self.sack).filter(provides=reldep)
|
|
Igor Gnatenko |
0bd7f8d |
self.assertLength(q, 0)
|
|
Igor Gnatenko |
0bd7f8d |
+ reldep = hawkey.Reldep(self.sack, u"\u0159 >= 3")
|
|
Igor Gnatenko |
0bd7f8d |
+ q = hawkey.Query(self.sack).filter(provides=reldep)
|
|
Igor Gnatenko |
0bd7f8d |
+ self.assertLength(q, 0)
|
|
Igor Gnatenko |
0bd7f8d |
+ reldep = hawkey.Reldep(self.sack, "foo >= 1.0-1.fc20")
|
|
Igor Gnatenko |
0bd7f8d |
+ q = hawkey.Query(self.sack).filter(provides=reldep)
|
|
Igor Gnatenko |
0bd7f8d |
+ self.assertLength(q, 0)
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
def test_query_name_only(self):
|
|
Igor Gnatenko |
0bd7f8d |
reldep_str = "P-lib"
|
|
Igor Gnatenko |
0bd7f8d |
@@ -74,9 +75,3 @@ class Reldep(base.TestCase):
|
|
Igor Gnatenko |
0bd7f8d |
|
|
Igor Gnatenko |
0bd7f8d |
def test_not_crash(self):
|
|
Igor Gnatenko |
0bd7f8d |
self.assertRaises(ValueError, hawkey.Reldep)
|
|
Igor Gnatenko |
0bd7f8d |
-
|
|
Igor Gnatenko |
0bd7f8d |
- def test_non_num_version(self):
|
|
Igor Gnatenko |
0bd7f8d |
- reldep_str = 'foo >= 1.0-1.fc20'
|
|
Igor Gnatenko |
0bd7f8d |
- with self.assertRaises(hawkey.ValueException) as ctx:
|
|
Igor Gnatenko |
0bd7f8d |
- hawkey.Reldep(self.sack, reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
- self.assertEqual(ctx.exception.args[0], "No such reldep: %s" % reldep_str)
|
|
Igor Gnatenko |
0bd7f8d |
diff --git a/tests/test_selector.c b/tests/test_selector.c
|
|
Igor Gnatenko |
0bd7f8d |
index 42915ab..8287546 100644
|
|
Igor Gnatenko |
0bd7f8d |
--- a/tests/test_selector.c
|
|
Igor Gnatenko |
0bd7f8d |
+++ b/tests/test_selector.c
|
|
Igor Gnatenko |
0bd7f8d |
@@ -41,8 +41,11 @@ END_TEST
|
|
Igor Gnatenko |
0bd7f8d |
START_TEST(test_sltr_provides)
|
|
Igor Gnatenko |
0bd7f8d |
{
|
|
Igor Gnatenko |
0bd7f8d |
HySelector sltr = hy_selector_create(test_globals.sack);
|
|
Igor Gnatenko |
0bd7f8d |
- ck_assert_int_eq(hy_selector_set(sltr, HY_PKG_PROVIDES, HY_EQ, "*"),
|
|
Igor Gnatenko |
0bd7f8d |
- HY_E_SELECTOR);
|
|
Igor Gnatenko |
0bd7f8d |
+ fail_if(hy_selector_set(sltr, HY_PKG_PROVIDES, HY_EQ, "*"));
|
|
Igor Gnatenko |
0bd7f8d |
+ HyPackageList plist = hy_selector_matches(sltr);
|
|
Igor Gnatenko |
0bd7f8d |
+ fail_unless(hy_packagelist_count(plist) == 0);
|
|
Igor Gnatenko |
0bd7f8d |
+
|
|
Igor Gnatenko |
0bd7f8d |
+ hy_packagelist_free(plist);
|
|
Igor Gnatenko |
0bd7f8d |
hy_selector_free(sltr);
|
|
Igor Gnatenko |
0bd7f8d |
}
|
|
Igor Gnatenko |
0bd7f8d |
END_TEST
|
|
Igor Gnatenko |
0bd7f8d |
--
|
|
Igor Gnatenko |
0bd7f8d |
2.12.1
|
|
Igor Gnatenko |
0bd7f8d |
|