make sure releases start numeric for haiku
authorMichael Schroeder <mls@suse.de>
Wed, 17 Apr 2013 09:32:14 +0000 (11:32 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 17 Apr 2013 11:52:14 +0000 (13:52 +0200)
otherwise a pre_release might be interpreted as a revision

ext/testcase.c
src/evr.c

index 72f9dc8..6c699e1 100644 (file)
@@ -981,6 +981,9 @@ testcase_write_testtags(Repo *repo, FILE *fp)
       evr = pool_id2str(pool, s->evr);
       arch = pool_id2str(pool, s->arch);
       release = strrchr(evr, '-');
+      /* haikus releases start numeric */
+      if (release && pool->disttype == DISTTYPE_HAIKU && (release[1] < '0' || release[1] > '9'))
+       release = evr + strlen(evr);
       if (!release)
        release = evr + strlen(evr);
       fprintf(fp, "=Pkg: %s %.*s %s %s\n", name, (int)(release - evr), evr, *release && release[1] ? release + 1 : "-", arch);
index 30dacfb..4351a6f 100644 (file)
--- a/src/evr.c
+++ b/src/evr.c
@@ -390,7 +390,14 @@ pool_evrcmp_str(const Pool *pool, const char *evr1, const char *evr2, int mode)
   for (s2 = evr2, r2 = 0; *s2; s2++)
     if (*s2 == '-')
       r2 = s2;
-
+  if (pool->disttype == DISTTYPE_HAIKU)
+    {
+      /* make sure it's really a release, releases always are numeric */
+      if (r1 && (r1[1] < '0' || r1[1] > '9'))
+       r1 = 0;
+      if (r2 && (r2[1] < '0' || r2[1] > '9'))
+       r2 = 0;
+    }
   r = 0;
   if (mode != EVRCMP_MATCH || (evr1 != (r1 ? r1 : s1) && evr2 != (r2 ? r2 : s2)))
     r = solv_vercmp(evr1, r1 ? r1 : s1, evr2, r2 ? r2 : s2);
@@ -490,6 +497,12 @@ pool_evrmatch(const Pool *pool, Id evrid, const char *epoch, const char *version
   for (s1 = evr1, r1 = 0; *s1; s1++)
     if (*s1 == '-')
       r1 = s1;
+  if (pool->disttype == DISTTYPE_HAIKU)
+    {
+      /* make sure it's really a release, releases always are numeric */
+      if (r1 && (r1[1] < '0' || r1[1] > '9'))
+       r1 = 0;
+    }
   if (version)
     {
       r = solv_vercmp(evr1, r1 ? r1 : s1, version, version + strlen(version));