return 0;
if (r1 && r2)
{
- if (s1 != ++r1 && s2 != ++r2)
+ if (mode != EVRCMP_MATCH || (s1 != ++r1 && s2 != ++r2))
r = solv_vercmp(r1, s1, r2, s2);
}
+ else if (mode == EVRCMP_MATCH_RELEASE)
+ {
+ if (!r1 && r2)
+ return -2;
+ if (r1 && !r2)
+ return 2;
+ }
return r;
}
if (!pool_match_nevr(pool, s, name))
return 0;
if (evr == s->evr)
- return flags & 2 ? 1 : 0;
+ return (flags & REL_EQ) ? 1 : 0;
if (!flags)
return 0;
if (flags == 7)
return 1;
- if (flags != 2 && flags != 5)
- flags ^= 5;
- if ((flags & (1 << (1 + pool_evrcmp(pool, s->evr, evr, EVRCMP_DEPCMP)))) != 0)
- return 1;
+ switch (pool_evrcmp(pool, s->evr, evr, EVRCMP_DEPCMP))
+ {
+ case -2:
+ return 1;
+ case -1:
+ return (flags & REL_LT) ? 1 : 0;
+ case 0:
+ return (flags & REL_EQ) ? 1 : 0;
+ case 1:
+ return (flags & REL_GT) ? 1 : 0;
+ case 2:
+ return (flags & REL_EQ) ? 1 : 0;
+ default:
+ break;
+ }
return 0;
}
return 0;
if (flags == 7 || pflags == 7)
return 1; /* rel provides every version */
- if ((pflags & flags & 5) != 0)
+ if ((pflags & flags & (REL_LT | REL_GT)) != 0)
return 1; /* both rels show in the same direction */
if (pevr == evr)
+ return (flags & pflags & REL_EQ) ? 1 : 0;
+ switch (pool_evrcmp(pool, pevr, evr, EVRCMP_DEPCMP))
{
- if ((pflags & flags & 2) != 0)
- return 1; /* both have '=', match */
- }
- else
- {
- int f = flags == 5 ? 5 : flags == 2 ? pflags : (flags ^ 5) & (pflags | 5);
- if ((f & (1 << (1 + pool_evrcmp(pool, pevr, evr, EVRCMP_DEPCMP)))) != 0)
- return 1;
+ case -2:
+ return (pflags & REL_EQ) ? 1 : 0;
+ case -1:
+ return (flags & REL_LT) || (pflags & REL_GT) ? 1 : 0;
+ case 0:
+ return (flags & pflags & REL_EQ) ? 1 : 0;
+ case 1:
+ return (flags & REL_GT) || (pflags & REL_LT) ? 1 : 0;
+ case 2:
+ return (flags & REL_EQ) ? 1 : 0;
+ default:
+ break;
}
return 0;
}