From: Michael Schroeder Date: Mon, 26 Nov 2018 11:55:20 +0000 (+0100) Subject: Enable support for new rpm's caret comparison X-Git-Tag: 0.7.2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec13015627781e46ed6de1ef95f1c3defec20d5d;p=thirdparty%2Flibsolv.git Enable support for new rpm's caret comparison And add a testcase. --- diff --git a/ext/testcase.c b/ext/testcase.c index 6a512a00..b815c563 100644 --- a/ext/testcase.c +++ b/ext/testcase.c @@ -15,6 +15,7 @@ #include "pool.h" #include "poolarch.h" #include "poolvendor.h" +#include "evr.h" #include "repo.h" #include "repo_solv.h" #include "solver.h" @@ -2967,6 +2968,14 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res } queue_push(&autoinstq, pool_str2id(pool, pieces[2], 1)); } + else if (!strcmp(pieces[0], "evrcmp") && npieces == 3) + { + Id evr1 = pool_str2id(pool, pieces[1], 1); + Id evr2 = pool_str2id(pool, pieces[2], 1); + int r = pool_evrcmp(pool, evr1, evr2, EVRCMP_COMPARE); + r = r < 0 ? REL_LT : r > 0 ? REL_GT : REL_EQ; + queue_push2(job, SOLVER_NOOP | SOLVER_SOLVABLE_PROVIDES, pool_rel2id(pool, evr1, evr2, r, 1)); + } else { pool_error(pool, 0, "testcase_read: cannot parse command '%s'", pieces[0]); diff --git a/src/evr.c b/src/evr.c index 4a0c549b..c7d4b318 100644 --- a/src/evr.c +++ b/src/evr.c @@ -76,7 +76,6 @@ solv_vercmp_rpm(const char *s1, const char *q1, const char *s2, const char *q2) for (;;) { -#ifdef RPM_CARET_DEPS while (s1 < q1 && !(*s1 >= '0' && *s1 <= '9') && !(*s1 >= 'a' && *s1 <= 'z') && !(*s1 >= 'A' && *s1 <= 'Z') && *s1 != '~' && *s1 != '^') s1++; @@ -95,14 +94,6 @@ solv_vercmp_rpm(const char *s1, const char *q1, const char *s2, const char *q2) } if (s2 < q2 && *s2 == '^') return s1 < q1 ? 1 : -1; -#else - while (s1 < q1 && !(*s1 >= '0' && *s1 <= '9') && - !(*s1 >= 'a' && *s1 <= 'z') && !(*s1 >= 'A' && *s1 <= 'Z') && *s1 != '~') - s1++; - while (s2 < q2 && !(*s2 >= '0' && *s2 <= '9') && - !(*s2 >= 'a' && *s2 <= 'z') && !(*s2 >= 'A' && *s2 <= 'Z') && *s2 != '~') - s2++; -#endif if (s1 < q1 && *s1 == '~') { if (s2 < q2 && *s2 == '~') diff --git a/test/testcases/evrcmp/caret.t b/test/testcases/evrcmp/caret.t new file mode 100644 index 00000000..9227c73d --- /dev/null +++ b/test/testcases/evrcmp/caret.t @@ -0,0 +1,70 @@ +repo system 0 empty +repo available 0 testtags +#>=Pkg: A1 1.0 0 +#>=Pkg: A2 1.0^ 0 +system i686 rpm system + +evrcmp 1.0~rc1 1.0~rc1 +evrcmp 1.0~rc1 1.0 +evrcmp 1.0 1.0~rc1 +evrcmp 1.0~rc1 1.0~rc2 +evrcmp 1.0~rc2 1.0~rc1 +evrcmp 1.0~rc1~git123 1.0~rc1~git123 +evrcmp 1.0~rc1~git123 1.0~rc1 +evrcmp 1.0~rc1 1.0~rc1~git123 + +evrcmp 1.0^ 1.0^ +evrcmp 1.0^ 1.0 +evrcmp 1.0 1.0^ +evrcmp 1.0^git1 1.0^git1 +evrcmp 1.0^git1 1.0 +evrcmp 1.0 1.0^git1 +evrcmp 1.0^git1 1.0^git2 +evrcmp 1.0^git2 1.0^git1 +evrcmp 1.0^git1 1.01 +evrcmp 1.01 1.0^git1 +evrcmp 1.0^20160101 1.0^20160101 +evrcmp 1.0^20160101 1.0.1 +evrcmp 1.0.1 1.0^20160101 +evrcmp 1.0^20160101^git1 1.0^20160101^git1 +evrcmp 1.0^20160102 1.0^20160101^git1 +evrcmp 1.0^20160101^git1 1.0^20160102 + +evrcmp 1.0~rc1^git1 1.0~rc1^git1 +evrcmp 1.0~rc1^git1 1.0~rc1 +evrcmp 1.0~rc1 1.0~rc1^git1 +evrcmp 1.0^git1~pre 1.0^git1~pre +evrcmp 1.0^git1 1.0^git1~pre +evrcmp 1.0^git1~pre 1.0^git1 + +result jobs +#>job noop provides 1.0 < 1.0^ +#>job noop provides 1.0 < 1.0^git1 +#>job noop provides 1.0 > 1.0~rc1 +#>job noop provides 1.0.1 > 1.0^20160101 +#>job noop provides 1.01 > 1.0^git1 +#>job noop provides 1.0^ = 1.0^ +#>job noop provides 1.0^ > 1.0 +#>job noop provides 1.0^20160101 < 1.0.1 +#>job noop provides 1.0^20160101 = 1.0^20160101 +#>job noop provides 1.0^20160101^git1 < 1.0^20160102 +#>job noop provides 1.0^20160101^git1 = 1.0^20160101^git1 +#>job noop provides 1.0^20160102 > 1.0^20160101^git1 +#>job noop provides 1.0^git1 < 1.01 +#>job noop provides 1.0^git1 < 1.0^git2 +#>job noop provides 1.0^git1 = 1.0^git1 +#>job noop provides 1.0^git1 > 1.0 +#>job noop provides 1.0^git1 > 1.0^git1~pre +#>job noop provides 1.0^git1~pre < 1.0^git1 +#>job noop provides 1.0^git1~pre = 1.0^git1~pre +#>job noop provides 1.0^git2 > 1.0^git1 +#>job noop provides 1.0~rc1 < 1.0 +#>job noop provides 1.0~rc1 < 1.0~rc1^git1 +#>job noop provides 1.0~rc1 < 1.0~rc2 +#>job noop provides 1.0~rc1 = 1.0~rc1 +#>job noop provides 1.0~rc1 > 1.0~rc1~git123 +#>job noop provides 1.0~rc1^git1 = 1.0~rc1^git1 +#>job noop provides 1.0~rc1^git1 > 1.0~rc1 +#>job noop provides 1.0~rc1~git123 < 1.0~rc1 +#>job noop provides 1.0~rc1~git123 = 1.0~rc1~git123 +#>job noop provides 1.0~rc2 > 1.0~rc1