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