1
0
mirror of https://github.com/openSUSE/libsolv.git synced 2026-02-05 12:45:46 +01:00

Enable support for new rpm's caret comparison

And add a testcase.
This commit is contained in:
Michael Schroeder
2018-11-26 12:55:20 +01:00
parent fae06e5fc3
commit ec13015627
3 changed files with 79 additions and 9 deletions

View File

@@ -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]);

View File

@@ -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 == '~')

View File

@@ -0,0 +1,70 @@
repo system 0 empty
repo available 0 testtags <inline>
#>=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 <inline>
#>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