On 09/10/10 01:02, Dan McGee wrote:
<snip>

-/* Is spkg an upgrade for locapkg? */
+/* Is spkg an upgrade for localpkg? */
  int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
  {
-       int cmp = 0;
+       int spkg_epoch, localpkg_epoch;

        ALPM_LOG_FUNC;

-       cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
-                       alpm_pkg_get_version(localpkg));
+       spkg_epoch = alpm_pkg_get_epoch(spkg);
+       localpkg_epoch = alpm_pkg_get_epoch(localpkg);

-       if(cmp<  0&&  alpm_pkg_has_force(spkg)) {
-               cmp = 1;
+       if(spkg_epoch>  localpkg_epoch) {
+               return(1);
+       } else if(spkg_epoch<  localpkg_epoch) {
+               return(-1);
        }

-       return(cmp);
+       /* equal epoch values, move on to version comparison */
+       return alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
+                       alpm_pkg_get_version(localpkg));
  }


How about:

/* Is spkg an upgrade for localpkg? */
int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
{
        int cmp, spkg_epoch, localpkg_epoch;

        ALPM_LOG_FUNC;

        cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
                        alpm_pkg_get_version(localpkg));

        spkg_epoch = alpm_pkg_get_epoch(spkg);
        localpkg_epoch = alpm_pkg_get_epoch(localpkg);

        if(spkg_epoch > localpkg_epoch && cmp != 0) {
                return(1);
        } else if(spkg_epoch < localpkg_epoch) {
                return(-1);
        }

        return(cmp);
}


So, when 'force' option is in effect, spkg_epoch = INT_MAX, localpkg_epoch = 0, but the versions are the same so we ignore it.

Allan

Reply via email to