]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Enable support for new rpm's caret comparison
authorMichael Schroeder <mls@suse.de>
Mon, 26 Nov 2018 11:55:20 +0000 (12:55 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 26 Nov 2018 11:55:20 +0000 (12:55 +0100)
And add a testcase.

ext/testcase.c
src/evr.c
test/testcases/evrcmp/caret.t [new file with mode: 0644]

index 6a512a0075df2c34fe47746b9ceb95fa8566ee1c..b815c563d9e8cd1ebd1835e423eafe9346028451 100644 (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]);
index 4a0c549b6a90fe0b3be6208f99063ffa72885912..c7d4b3181ec157f7d6a1eb37f5e1ecb2d290cc61 100644 (file)
--- 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 (file)
index 0000000..9227c73
--- /dev/null
@@ -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