Example #1
0
File: vercmp.c Project: ajlill/core
VersionCmpResult CompareVersions(EvalContext *ctx, const char *v1, const char *v2, Attributes a,
                                 const Promise *pp, PromiseResult *result)
{
    VersionCmpResult cmp_result;
    const char *cmp_operator = "";
    switch (a.packages.package_select)
    {
    case PACKAGE_VERSION_COMPARATOR_EQ:
    case PACKAGE_VERSION_COMPARATOR_NONE:
        cmp_result = CompareVersionsEqual(ctx, v1, v2, a, pp, result);
        cmp_operator = "==";
        break;
    case PACKAGE_VERSION_COMPARATOR_NEQ:
        cmp_result = InvertResult(CompareVersionsEqual(ctx, v1, v2, a, pp, result));
        cmp_operator = "!=";
        break;
    case PACKAGE_VERSION_COMPARATOR_LT:
        cmp_result = CompareVersionsLess(ctx, v1, v2, a, pp, result);
        cmp_operator = "<";
        break;
    case PACKAGE_VERSION_COMPARATOR_GT:
        cmp_result = CompareVersionsLess(ctx, v2, v1, a, pp, result);
        cmp_operator = ">";
        break;
    case PACKAGE_VERSION_COMPARATOR_GE:
        cmp_result = InvertResult(CompareVersionsLess(ctx, v1, v2, a, pp, result));
        cmp_operator = ">=";
        break;
    case PACKAGE_VERSION_COMPARATOR_LE:
        cmp_result = InvertResult(CompareVersionsLess(ctx, v2, v1, a, pp, result));
        cmp_operator = "<=";
        break;
    default:
        ProgrammingError("Unexpected comparison value: %d", a.packages.package_select);
        break;
    }

    const char *text_result;
    switch (cmp_result)
    {
    case VERCMP_NO_MATCH:
        text_result = "no";
        break;
    case VERCMP_MATCH:
        text_result = "yes";
        break;
    default:
        text_result = "Incompatible version format. Can't decide";
        break;
    }

    Log(LOG_LEVEL_VERBOSE, "Checking whether package version %s %s %s: %s", v1, cmp_operator, v2, text_result);

    return cmp_result;
}
Example #2
0
VersionCmpResult CompareVersions(const char *v1, const char *v2, Attributes a, Promise *pp)
{
    switch (a.packages.package_select)
    {
    case cfa_eq:
    case cfa_cmp_none: return CompareVersionsEqual(v1, v2, a, pp);
    case cfa_neq: return InvertResult(CompareVersionsEqual(v1, v2, a, pp));
    case cfa_lt: return CompareVersionsLess(v1, v2, a, pp);
    case cfa_gt: return CompareVersionsLess(v2, v1, a, pp);
    case cfa_ge: return InvertResult(CompareVersionsLess(v1, v2, a, pp));
    case cfa_le: return InvertResult(CompareVersionsLess(v2, v1, a, pp));
    default: FatalError("Unexpected comparison value: %d", a.packages.package_select);
    }
}
Example #3
0
static VersionCmpResult CompareVersionsEqual(EvalContext *ctx, const char *v1, const char *v2, Attributes a, Promise *pp)
{
    if (a.packages.package_version_equal_command)
    {
        return RunCmpCommand(ctx, a.packages.package_version_equal_command, v1, v2, a, pp);
    }
    else if (a.packages.package_version_less_command)
    {
        /* emulate v1 == v2 by !(v1 < v2) && !(v2 < v1)  */
        return AndResults(InvertResult(CompareVersionsLess(ctx, v1, v2, a, pp)),
                          InvertResult(CompareVersionsLess(ctx, v2, v1, a, pp)));
    }
    else
    {
        /* Built-in fallback */
        return ComparePackageVersionsInternal(v1, v2, PACKAGE_VERSION_COMPARATOR_EQ);
    }
}
Example #4
0
static VersionCmpResult CompareVersionsEqual(const char *v1, const char *v2, Attributes a, Promise *pp)
{
    if (a.packages.package_version_equal_command)
    {
        return RunCmpCommand(a.packages.package_version_equal_command, v1, v2, a, pp);
    }
    else if (a.packages.package_version_less_command)
    {
        /* emulate v1 == v2 by !(v1 < v2) && !(v2 < v1)  */
        return AndResults(InvertResult(CompareVersionsLess(v1, v2, a, pp)),
                          InvertResult(CompareVersionsLess(v2, v1, a, pp)));
    }
    else
    {
        /* Built-in fallback */
        return ComparePackageVersionsInternal(v1, v2, cfa_eq);
    }
}
Example #5
0
VersionCmpResult CompareVersions(EvalContext *ctx, const char *v1, const char *v2, Attributes a, Promise *pp)
{
    switch (a.packages.package_select)
    {
    case PACKAGE_VERSION_COMPARATOR_EQ:
    case PACKAGE_VERSION_COMPARATOR_NONE:
        return CompareVersionsEqual(ctx, v1, v2, a, pp);
    case PACKAGE_VERSION_COMPARATOR_NEQ:
        return InvertResult(CompareVersionsEqual(ctx, v1, v2, a, pp));
    case PACKAGE_VERSION_COMPARATOR_LT:
        return CompareVersionsLess(ctx, v1, v2, a, pp);
    case PACKAGE_VERSION_COMPARATOR_GT:
        return CompareVersionsLess(ctx, v2, v1, a, pp);
    case PACKAGE_VERSION_COMPARATOR_GE:
        return InvertResult(CompareVersionsLess(ctx, v1, v2, a, pp));
    case PACKAGE_VERSION_COMPARATOR_LE:
        return InvertResult(CompareVersionsLess(ctx, v2, v1, a, pp));
    default:
        ProgrammingError("Unexpected comparison value: %d", a.packages.package_select);
    }
}