From: Tomas Mlcoch Date: Fri, 22 May 2015 11:34:59 +0000 (+0200) Subject: mergerepo_c: Use better version comparison algorithm X-Git-Tag: upstream/0.10.0~49 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0b0f4434a136073d5ebdd005d38a82578ebe1cca;p=services%2Fcreaterepo_c.git mergerepo_c: Use better version comparison algorithm --- diff --git a/src/mergerepo_c.c b/src/mergerepo_c.c index 0f1b87c..39fb68d 100644 --- a/src/mergerepo_c.c +++ b/src/mergerepo_c.c @@ -860,11 +860,11 @@ add_package(cr_Package *pkg, // NVR merge method } else if (merge_method == MM_NVR) { - int cmp_res = cr_cmp_version_str(pkg->version, c_pkg->version); - long pkg_release = (pkg->release) ? strtol(pkg->release, NULL, 10) : 0; - long c_pkg_release = (c_pkg->release) ? strtol(c_pkg->release, NULL, 10) : 0; - if (cmp_res == 1 || (cmp_res == 0 && pkg_release > c_pkg_release)) { + if ((cr_cmp_version_str(pkg->epoch, c_pkg->epoch) == 1) + || (cr_cmp_version_str(pkg->version, c_pkg->version) == 1) + || (cr_cmp_version_str(pkg->release, c_pkg->release) == 1)) + { // Remove older package cr_package_free(c_pkg); // Replace package in element @@ -873,32 +873,32 @@ add_package(cr_Package *pkg, element->data = pkg; return 2; } else { - g_debug("Newer version of package %s (%s) already exists", - pkg->name, pkg->arch); + g_debug("Same version of package %s.%s " + "(epoch: %s) (ver: %s) (rel: %s) already exists", + pkg->name, pkg->arch, + pkg->epoch ? pkg->epoch : "0", + pkg->version ? pkg->version : "N/A", + pkg->release ? pkg->release : "N/A"); return 0; } } - } else { // Two packages has same name and arch but all param is used // We want to check if two packages are the same. // We already know that name and arch matches. - // We need to check version and release, but we - // don't need any sophisticated methods, we can - // use plain string comparison. - if (!g_strcmp0(pkg->version ? pkg->version : "", - c_pkg->version ? c_pkg->version : "") - && !g_strcmp0(pkg->release ? pkg->release : "", - c_pkg->release ? c_pkg->release: "")) + // We need to check version and release + if ((cr_cmp_version_str(pkg->epoch, c_pkg->epoch) == 0) + || (cr_cmp_version_str(pkg->version, c_pkg->version) == 0) + || (cr_cmp_version_str(pkg->release, c_pkg->release) == 0)) { - // Both packages are the same (at least by NVRA values) - g_debug("Same version of package %s (ver: %s) (rel: %s) " - "(arch: %s) already exists", - pkg->name, + // Both packages are the same (at least by NEVRA values) + g_debug("Same version of package %s.%s " + "(epoch: %s) (ver: %s) (rel: %s) already exists", + pkg->name, pkg->arch, + pkg->epoch ? pkg->epoch : "0", pkg->version ? pkg->version : "N/A", - pkg->release ? pkg->release : "N/A", - pkg->arch); + pkg->release ? pkg->release : "N/A"); return 0; } }