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>
This commit is contained in:
parent
e760c4f478
commit
5b51dbb11e
5 changed files with 43 additions and 30 deletions
|
@ -308,7 +308,7 @@ linkman:pacman.conf[5].
|
||||||
to date.
|
to date.
|
||||||
|
|
||||||
*\--needed*::
|
*\--needed*::
|
||||||
Only install the targets that are not already installed and up-to-date.
|
Don't reinstall the targets that are already up-to-date.
|
||||||
|
|
||||||
*\--ignore* <'package'>::
|
*\--ignore* <'package'>::
|
||||||
Directs pacman to ignore upgrades of package even if there is one
|
Directs pacman to ignore upgrades of package even if there is one
|
||||||
|
|
|
@ -224,6 +224,7 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size,
|
||||||
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
|
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
|
||||||
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
|
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
|
||||||
unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
|
unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
|
||||||
|
unsigned short alpm_pkg_has_force(pmpkg_t *pkg);
|
||||||
|
|
||||||
off_t alpm_pkg_download_size(pmpkg_t *newpkg);
|
off_t alpm_pkg_download_size(pmpkg_t *newpkg);
|
||||||
|
|
||||||
|
|
|
@ -295,6 +295,20 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
|
||||||
return pkg->groups;
|
return pkg->groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned short SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
|
||||||
|
{
|
||||||
|
ALPM_LOG_FUNC;
|
||||||
|
|
||||||
|
/* Sanity checks */
|
||||||
|
ASSERT(handle != NULL, return(-1));
|
||||||
|
ASSERT(pkg != NULL, return(-1));
|
||||||
|
|
||||||
|
if(pkg->origin == PKG_FROM_CACHE && !(pkg->infolevel & INFRQ_DESC)) {
|
||||||
|
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
||||||
|
}
|
||||||
|
return pkg->force;
|
||||||
|
}
|
||||||
|
|
||||||
alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
|
alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
|
||||||
{
|
{
|
||||||
ALPM_LOG_FUNC;
|
ALPM_LOG_FUNC;
|
||||||
|
@ -827,32 +841,18 @@ void _alpm_pkg_free(pmpkg_t *pkg)
|
||||||
FREE(pkg);
|
FREE(pkg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Is pkgB an upgrade for pkgA ? */
|
/* Is spkg an upgrade for locapkg? */
|
||||||
int _alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
|
int _alpm_pkg_compare_versions(pmpkg_t *spkg, pmpkg_t *localpkg)
|
||||||
{
|
{
|
||||||
int cmp = 0;
|
int cmp = 0;
|
||||||
|
|
||||||
ALPM_LOG_FUNC;
|
ALPM_LOG_FUNC;
|
||||||
|
|
||||||
if(pkg->origin == PKG_FROM_CACHE) {
|
cmp = alpm_pkg_vercmp(alpm_pkg_get_version(spkg),
|
||||||
/* ensure we have the /desc file, which contains the 'force' option */
|
alpm_pkg_get_version(localpkg));
|
||||||
_alpm_db_read(pkg->origin_data.db, pkg, INFRQ_DESC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* compare versions and see if we need to upgrade */
|
if(cmp < 0 && alpm_pkg_has_force(spkg)) {
|
||||||
cmp = alpm_pkg_vercmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg));
|
|
||||||
|
|
||||||
if(cmp != 0 && pkg->force) {
|
|
||||||
cmp = 1;
|
cmp = 1;
|
||||||
_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s\n"),
|
|
||||||
alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
|
|
||||||
} else if(cmp < 0) {
|
|
||||||
/* local version is newer */
|
|
||||||
pmdb_t *db = pkg->origin_data.db;
|
|
||||||
_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
|
|
||||||
alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg),
|
|
||||||
alpm_db_get_name(db), alpm_pkg_get_version(pkg));
|
|
||||||
cmp = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return(cmp);
|
return(cmp);
|
||||||
|
|
|
@ -170,6 +170,7 @@ pmpkg_t SYMEXPORT *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync)
|
||||||
{
|
{
|
||||||
alpm_list_t *i;
|
alpm_list_t *i;
|
||||||
pmpkg_t *spkg = NULL;
|
pmpkg_t *spkg = NULL;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
for(i = dbs_sync; !spkg && i; i = i->next) {
|
for(i = dbs_sync; !spkg && i; i = i->next) {
|
||||||
spkg = _alpm_db_get_pkgfromcache(i->data, alpm_pkg_get_name(pkg));
|
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 */
|
/* 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_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_name(pkg), alpm_pkg_get_version(pkg),
|
||||||
alpm_pkg_get_version(spkg));
|
alpm_pkg_get_version(spkg));
|
||||||
return(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
|
/** 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));
|
local = _alpm_db_get_pkgfromcache(db_local, alpm_pkg_get_name(spkg));
|
||||||
if(local) {
|
if(local) {
|
||||||
if(_alpm_pkg_compare_versions(local, spkg) == 0) {
|
int cmp = _alpm_pkg_compare_versions(spkg, local);
|
||||||
/* spkg is NOT an upgrade */
|
if(cmp == 0) {
|
||||||
if(trans->flags & PM_TRANS_FLAG_NEEDED) {
|
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_log(PM_LOG_WARNING, _("%s-%s is up to date -- skipping\n"),
|
||||||
alpm_pkg_get_name(local), alpm_pkg_get_version(local));
|
alpm_pkg_get_name(local), alpm_pkg_get_version(local));
|
||||||
return(0);
|
return(0);
|
||||||
} else {
|
} else {
|
||||||
if(!(trans->flags & PM_TRANS_FLAG_DOWNLOADONLY)) {
|
|
||||||
_alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- reinstalling\n"),
|
_alpm_log(PM_LOG_WARNING, _("%s-%s is up to date -- reinstalling\n"),
|
||||||
alpm_pkg_get_name(local), alpm_pkg_get_version(local));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ static void usage(int op, const char * const myname)
|
||||||
printf(_(" -u, --sysupgrade upgrade all packages that are out of date\n"));
|
printf(_(" -u, --sysupgrade upgrade all packages that are out of date\n"));
|
||||||
printf(_(" -w, --downloadonly download packages but do not install/upgrade anything\n"));
|
printf(_(" -w, --downloadonly download packages but do not install/upgrade anything\n"));
|
||||||
printf(_(" -y, --refresh download fresh package databases from the server\n"));
|
printf(_(" -y, --refresh download fresh package databases from the server\n"));
|
||||||
printf(_(" --needed only upgrade outdated or not yet installed packages\n"));
|
printf(_(" --needed don't reinstall up to date packages\n"));
|
||||||
printf(_(" --ignore <pkg> ignore a package upgrade (can be used more than once)\n"));
|
printf(_(" --ignore <pkg> ignore a package upgrade (can be used more than once)\n"));
|
||||||
printf(_(" --ignoregroup <grp>\n"
|
printf(_(" --ignoregroup <grp>\n"
|
||||||
" ignore a group upgrade (can be used more than once)\n"));
|
" ignore a group upgrade (can be used more than once)\n"));
|
||||||
|
|
Loading…
Add table
Reference in a new issue