Introduce -Suu
If the user switches from unstable repo to a stable one, it is quite hard to sync its system with the new repo (the user will see many "Local is newer than stable" messages, nothing more). That's why I introduced -Suu, which treats a sync package like an upgrade, iff the package version doesn't match with the local one's. I added a new pactest (sync104.py) to test this, and I updated the documentation of -Su. Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> [Dan: slight doc reword] Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
ca6ef852f9
commit
1d19f0896c
8 changed files with 38 additions and 11 deletions
|
@ -327,7 +327,10 @@ linkman:pacman.conf[5].
|
|||
report of all packages to upgrade will be presented and the operation
|
||||
will not proceed without user confirmation. Dependencies are
|
||||
automatically resolved at this level and will be installed/upgraded if
|
||||
necessary.
|
||||
necessary. Pass this option twice to enable package downgrade; in this
|
||||
case pacman will select sync packages whose version does not match with
|
||||
the local version. This can be useful when the user switches from a testing
|
||||
repo to a stable one.
|
||||
|
||||
*-w, \--downloadonly*::
|
||||
Retrieve all packages from the server, but do not install/upgrade
|
||||
|
|
|
@ -397,7 +397,7 @@ alpm_list_t * alpm_trans_get_pkgs();
|
|||
int alpm_trans_init(pmtranstype_t type, pmtransflag_t flags,
|
||||
alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv,
|
||||
alpm_trans_cb_progress cb_progress);
|
||||
int alpm_trans_sysupgrade(void);
|
||||
int alpm_trans_sysupgrade(int enable_downgrade);
|
||||
int alpm_trans_addtarget(char *target);
|
||||
int alpm_trans_prepare(alpm_list_t **data);
|
||||
int alpm_trans_commit(alpm_list_t **data);
|
||||
|
|
|
@ -80,7 +80,7 @@ pmpkg_t SYMEXPORT *alpm_sync_newversion(pmpkg_t *pkg, alpm_list_t *dbs_sync)
|
|||
return(NULL);
|
||||
}
|
||||
|
||||
int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync)
|
||||
int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, int enable_downgrade)
|
||||
{
|
||||
alpm_list_t *i, *j, *k;
|
||||
|
||||
|
@ -116,8 +116,20 @@ int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_s
|
|||
trans->packages = alpm_list_add(trans->packages, spkg);
|
||||
}
|
||||
} else if(cmp < 0) {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
|
||||
lpkg->name, lpkg->version, sdb->treename, spkg->version);
|
||||
if(enable_downgrade) {
|
||||
/* check IgnorePkg/IgnoreGroup */
|
||||
if(_alpm_pkg_should_ignore(spkg) || _alpm_pkg_should_ignore(lpkg)) {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: ignoring package downgrade (%s => %s)\n"),
|
||||
lpkg->name, lpkg->version, spkg->version);
|
||||
} else {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: downgrading from version %s to version %s\n"),
|
||||
lpkg->name, lpkg->version, spkg->version);
|
||||
trans->packages = alpm_list_add(trans->packages, spkg);
|
||||
}
|
||||
} else {
|
||||
_alpm_log(PM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
|
||||
lpkg->name, lpkg->version, sdb->treename, spkg->version);
|
||||
}
|
||||
}
|
||||
break; /* jump to next local package */
|
||||
} else { /* 2. search for replacers in sdb */
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#include "alpm.h"
|
||||
|
||||
int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync);
|
||||
int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, int enable_downgrade);
|
||||
|
||||
int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, char *name);
|
||||
int _alpm_sync_prepare(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **data);
|
||||
|
|
|
@ -89,7 +89,7 @@ int SYMEXPORT alpm_trans_init(pmtranstype_t type, pmtransflag_t flags,
|
|||
/** Search for packages to upgrade and add them to the transaction.
|
||||
* @return 0 on success, -1 on error (pm_errno is set accordingly)
|
||||
*/
|
||||
int SYMEXPORT alpm_trans_sysupgrade()
|
||||
int SYMEXPORT alpm_trans_sysupgrade(int enable_downgrade)
|
||||
{
|
||||
pmtrans_t *trans;
|
||||
|
||||
|
@ -102,7 +102,7 @@ int SYMEXPORT alpm_trans_sysupgrade()
|
|||
ASSERT(trans->state == STATE_INITIALIZED, RET_ERR(PM_ERR_TRANS_NOT_INITIALIZED, -1));
|
||||
ASSERT(trans->type == PM_TRANS_TYPE_SYNC, RET_ERR(PM_ERR_TRANS_TYPE, -1));
|
||||
|
||||
return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync));
|
||||
return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync, enable_downgrade));
|
||||
}
|
||||
|
||||
/** Add a target to the transaction.
|
||||
|
|
12
pactest/tests/sync104.py
Normal file
12
pactest/tests/sync104.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
self.description = "-Suu"
|
||||
|
||||
sp = pmpkg("dummy", "0.9-1")
|
||||
lp = pmpkg("dummy", "1.0-1")
|
||||
|
||||
self.addpkg2db("sync", sp)
|
||||
self.addpkg2db("local", lp)
|
||||
|
||||
self.args = "-Suu"
|
||||
|
||||
self.addrule("PACMAN_RETCODE=0")
|
||||
self.addrule("PKG_VERSION=dummy|0.9-1")
|
|
@ -130,7 +130,7 @@ static void usage(int op, const char * const myname)
|
|||
printf(_(" -l, --list <repo> view a list of packages in a repo\n"));
|
||||
printf(_(" -p, --print-uris print out URIs for given packages and their dependencies\n"));
|
||||
printf(_(" -s, --search <regex> search remote repositories for matching strings\n"));
|
||||
printf(_(" -u, --sysupgrade upgrade all packages that are out of date\n"));
|
||||
printf(_(" -u, --sysupgrade upgrade all outdated packages (-uu enables downgrade)\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(_(" --needed don't reinstall up to date packages\n"));
|
||||
|
@ -508,7 +508,7 @@ static int parseargs(int argc, char *argv[])
|
|||
config->op_q_unrequired = 1;
|
||||
break;
|
||||
case 'u':
|
||||
config->op_s_upgrade = 1;
|
||||
(config->op_s_upgrade)++;
|
||||
config->op_q_upgrade = 1;
|
||||
config->flags |= PM_TRANS_FLAG_UNNEEDED;
|
||||
break;
|
||||
|
|
|
@ -563,7 +563,7 @@ static int sync_trans(alpm_list_t *targets)
|
|||
if(config->op_s_upgrade) {
|
||||
printf(_(":: Starting full system upgrade...\n"));
|
||||
alpm_logaction("starting full system upgrade\n");
|
||||
if(alpm_trans_sysupgrade() == -1) {
|
||||
if(alpm_trans_sysupgrade(config->op_s_upgrade >= 2) == -1) {
|
||||
pm_fprintf(stderr, PM_LOG_ERROR, "%s\n", alpm_strerrorlast());
|
||||
retval = 1;
|
||||
goto cleanup;
|
||||
|
|
Loading…
Add table
Reference in a new issue