compate name and version
authorAnas Nashif <anas.nashif@intel.com>
Thu, 11 Oct 2012 19:31:15 +0000 (12:31 -0700)
committerAnas Nashif <anas.nashif@intel.com>
Sun, 3 Feb 2013 00:44:14 +0000 (16:44 -0800)
Also compare the name and not only the version when checking if
two packages are the same. rh#104066

lib/depends.c

index 6539396..fa11725 100644 (file)
@@ -144,6 +144,24 @@ static int skipColor(rpm_color_t tscolor, rpm_color_t color, rpm_color_t ocolor)
     return tscolor && color && ocolor && !(color & ocolor);
 }
 
+static int rpmNameVersionCompare(Header first, Header second)
+{
+    const char * one, * two;
+    int rc;
+
+    one = headerGetString(first, RPMTAG_NAME);
+    two = headerGetString(second, RPMTAG_NAME);
+    rc = strcmp(one, two);
+    if (rc)
+       return rc;
+    one = headerGetString(first, RPMTAG_ARCH);
+    two = headerGetString(second, RPMTAG_ARCH);
+    rc = strcmp(one, two);
+    if (rc)
+       return rc;
+    return rpmVersionCompare(first, second);
+}
+
 /* Add erase elements for older packages of same color (if any). */
 static int addUpgradeErasures(rpmts ts, rpm_color_t tscolor,
                                rpmte p, rpm_color_t hcolor, Header h)
@@ -157,8 +175,8 @@ static int addUpgradeErasures(rpmts ts, rpm_color_t tscolor,
        if (skipColor(tscolor, hcolor, headerGetNumber(oh, RPMTAG_HEADERCOLOR)))
            continue;
 
-       /* Skip packages that contain identical NEVR. */
-       if (rpmVersionCompare(h, oh) == 0)
+       /* Skip packages that contain identical NEVRA. */
+       if (rpmNameVersionCompare(h, oh) == 0)
            continue;
 
        if (removePackage(ts, oh, p)) {