diff options
author | Xavier Chantry <shiningxc@gmail.com> | 2008-05-31 15:06:30 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-08-23 08:47:07 -0500 |
commit | 5b51dbb11e2087e1055be24b486502be806b5e13 (patch) | |
tree | a2938506c96ba529361a55d6f92d8a29724667f2 /lib/libalpm/sync.c | |
parent | e760c4f4784c7e7b59717cd10c56dac04f175b73 (diff) | |
download | pacman-5b51dbb11e2087e1055be24b486502be806b5e13.tar.xz |
Cleanup of _alpm_pkg_compare_versions.
* Change the return values to be more informative.
It was previously boolean, only indicating if a sync package was newer than
a local package.
Now it is a simple wrapper to vercmp, handling the force flag.
* Remove the verbose output from _alpm_pkg_compare_versions.
The "force" message is not so useful.
The "package : local (v1) is newer than repo (v2)" message can be moved to
-Su operation.
For the -S operation, it is better to have something like :
"downgrading package from v1 to v2"
* Don't display the "up to date -- skipping" and "up to date -- reinstalling"
messages, when the local version is newer than the sync one.
* Fix the behavior of --needed option to not skip a target when the local
version is newer, and clarify its description.
* Add a new alpm_pkg_has_force function
This allows us to access the pkg->force field like any other package fields.
Signed-off-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/sync.c')
-rw-r--r-- | lib/libalpm/sync.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 7a577a12..4a705b57 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -170,6 +170,7 @@ pmpkg_t SYMEXPORT *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync) { alpm_list_t *i; pmpkg_t *spkg = NULL; + int cmp; for(i = dbs_sync; !spkg && i; i = i->next) { spkg = _alpm_db_get_pkgfromcache(i->data, alpm_pkg_get_name(pkg)); @@ -182,14 +183,20 @@ pmpkg_t SYMEXPORT *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync) } /* compare versions and see if spkg is an upgrade */ - if(_alpm_pkg_compare_versions(pkg, spkg)) { + cmp = _alpm_pkg_compare_versions(spkg, pkg); + if(cmp > 0) { _alpm_log(PM_LOG_DEBUG, "new version of '%s' found (%s => %s)\n", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg), alpm_pkg_get_version(spkg)); return(spkg); - } else { - return(NULL); } + if (cmp < 0) { + pmdb_t *db = spkg->origin_data.db; + _alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"), + alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg), + alpm_db_get_name(db), alpm_pkg_get_version(spkg)); + } + return(NULL); } /** Get a list of upgradable packages on the current system @@ -326,18 +333,23 @@ int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sy local = _alpm_db_get_pkgfromcache(db_local, alpm_pkg_get_name(spkg)); if(local) { - if(_alpm_pkg_compare_versions(local, spkg) == 0) { - /* spkg is NOT an upgrade */ + int cmp = _alpm_pkg_compare_versions(spkg, local); + if(cmp == 0) { if(trans->flags & PM_TRANS_FLAG_NEEDED) { + /* with the NEEDED flag, packages up to date are not reinstalled */ _alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- skipping\n"), alpm_pkg_get_name(local), alpm_pkg_get_version(local)); return(0); } else { - if(!(trans->flags & PM_TRANS_FLAG_DOWNLOADONLY)) { - _alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- reinstalling\n"), - alpm_pkg_get_name(local), alpm_pkg_get_version(local)); - } + _alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- reinstalling\n"), + alpm_pkg_get_name(local), alpm_pkg_get_version(local)); + } + } else if(cmp < 0) { + /* local version is newer */ + _alpm_log(PM_LOG_WARNING, _("downgrading package %s (%s => %s)\n"), + alpm_pkg_get_name(local), alpm_pkg_get_version(local), + alpm_pkg_get_version(spkg)); } } |