From: Michael Schroeder Date: Mon, 26 Nov 2018 13:20:16 +0000 (+0100) Subject: Switch order of tilde and caret check in evr.c X-Git-Tag: 0.7.2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8ac0b676fa90d574d33c37c12e2bb1363d0201f;p=thirdparty%2Flibsolv.git Switch order of tilde and caret check in evr.c Tilde must come before caret, so that 1.0~1 < 1.0^1 Also add this to the testcase. --- diff --git a/src/evr.c b/src/evr.c index c7d4b318..c63878e1 100644 --- a/src/evr.c +++ b/src/evr.c @@ -82,18 +82,6 @@ solv_vercmp_rpm(const char *s1, const char *q1, const char *s2, const char *q2) while (s2 < q2 && !(*s2 >= '0' && *s2 <= '9') && !(*s2 >= 'a' && *s2 <= 'z') && !(*s2 >= 'A' && *s2 <= 'Z') && *s2 != '~' && *s2 != '^') s2++; - if (s1 < q1 && *s1 == '^') - { - if (s2 < q2 && *s2 == '^') - { - s1++; - s2++; - continue; - } - return s2 < q2 ? -1 : 1; - } - if (s2 < q2 && *s2 == '^') - return s1 < q1 ? 1 : -1; if (s1 < q1 && *s1 == '~') { if (s2 < q2 && *s2 == '~') @@ -106,6 +94,18 @@ solv_vercmp_rpm(const char *s1, const char *q1, const char *s2, const char *q2) } if (s2 < q2 && *s2 == '~') return 1; + if (s1 < q1 && *s1 == '^') + { + if (s2 < q2 && *s2 == '^') + { + s1++; + s2++; + continue; + } + return s2 < q2 ? -1 : 1; + } + if (s2 < q2 && *s2 == '^') + return s1 < q1 ? 1 : -1; if (s1 >= q1 || s2 >= q2) break; if ((*s1 >= '0' && *s1 <= '9') || (*s2 >= '0' && *s2 <= '9')) diff --git a/test/testcases/evrcmp/caret.t b/test/testcases/evrcmp/caret.t index 9227c73d..d0c3a07b 100644 --- a/test/testcases/evrcmp/caret.t +++ b/test/testcases/evrcmp/caret.t @@ -36,35 +36,39 @@ 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 +evrcmp 1.0^1 1.0~1 +evrcmp 1.0~1 1.0^1 result jobs -#>job noop provides 1.0 < 1.0^ -#>job noop provides 1.0 < 1.0^git1 +#>job noop provides 1.0~rc1 = 1.0~rc1 +#>job noop provides 1.0~rc1 < 1.0 #>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~rc1 < 1.0~rc2 +#>job noop provides 1.0~rc2 > 1.0~rc1 +#>job noop provides 1.0~rc1~git123 = 1.0~rc1~git123 +#>job noop provides 1.0~rc1~git123 < 1.0~rc1 +#>job noop provides 1.0~rc1 > 1.0~rc1~git123 #>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 < 1.0^ #>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 < 1.0^git1 +#>job noop provides 1.0^git1 < 1.0^git2 #>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^git1 < 1.01 +#>job noop provides 1.01 > 1.0^git1 +#>job noop provides 1.0^20160101 = 1.0^20160101 +#>job noop provides 1.0^20160101 < 1.0.1 +#>job noop provides 1.0.1 > 1.0^20160101 +#>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^20160101^git1 < 1.0^20160102 #>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 +#>job noop provides 1.0~rc1 < 1.0~rc1^git1 +#>job noop provides 1.0^git1~pre = 1.0^git1~pre +#>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^1 > 1.0~1 +#>job noop provides 1.0~1 < 1.0^1