summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-08-18 06:39:41 +0200
committerDan McGee <dan@archlinux.org>2011-08-18 17:47:41 +0200
commit231d6cc1e4083e5e49063b22fe6e5b0318b85328 (patch)
tree6bf2f64de7bfe10248cbda2ca170fcfcce412227 /lib
parent5d291d050ebd714851c6bd85efd49a03d88414f0 (diff)
downloadpacman-231d6cc1e4083e5e49063b22fe6e5b0318b85328.tar.gz
pacman-231d6cc1e4083e5e49063b22fe6e5b0318b85328.tar.xz
Replacements refactor: extract check_literal()
This moves code that was inline in alpm_sync_sysupgrade() to its own method. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/libalpm/sync.c79
1 files changed, 46 insertions, 33 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index b9cb1fbe..09800d4a 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -81,6 +81,45 @@ alpm_pkg_t SYMEXPORT *alpm_sync_newversion(alpm_pkg_t *pkg, alpm_list_t *dbs_syn
return NULL;
}
+static int check_literal(alpm_handle_t *handle, alpm_pkg_t *lpkg,
+ alpm_pkg_t *spkg, int enable_downgrade)
+{
+ /* 1. literal was found in sdb */
+ int cmp = _alpm_pkg_compare_versions(spkg, lpkg);
+ if(cmp > 0) {
+ _alpm_log(handle, ALPM_LOG_DEBUG, "new version of '%s' found (%s => %s)\n",
+ lpkg->name, lpkg->version, spkg->version);
+ /* check IgnorePkg/IgnoreGroup */
+ if(_alpm_pkg_should_ignore(handle, spkg)
+ || _alpm_pkg_should_ignore(handle, lpkg)) {
+ _alpm_log(handle, ALPM_LOG_WARNING, _("%s: ignoring package upgrade (%s => %s)\n"),
+ lpkg->name, lpkg->version, spkg->version);
+ } else {
+ _alpm_log(handle, ALPM_LOG_DEBUG, "adding package %s-%s to the transaction targets\n",
+ spkg->name, spkg->version);
+ return 1;
+ }
+ } else if(cmp < 0) {
+ if(enable_downgrade) {
+ /* check IgnorePkg/IgnoreGroup */
+ if(_alpm_pkg_should_ignore(handle, spkg)
+ || _alpm_pkg_should_ignore(handle, lpkg)) {
+ _alpm_log(handle, ALPM_LOG_WARNING, _("%s: ignoring package downgrade (%s => %s)\n"),
+ lpkg->name, lpkg->version, spkg->version);
+ } else {
+ _alpm_log(handle, ALPM_LOG_WARNING, _("%s: downgrading from version %s to version %s\n"),
+ lpkg->name, lpkg->version, spkg->version);
+ return 1;
+ }
+ } else {
+ alpm_db_t *sdb = alpm_pkg_get_db(spkg);
+ _alpm_log(handle, ALPM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
+ lpkg->name, lpkg->version, sdb->treename, spkg->version);
+ }
+ }
+ return 0;
+}
+
/** Search for packages to upgrade and add them to the transaction. */
int SYMEXPORT alpm_sync_sysupgrade(alpm_handle_t *handle, int enable_downgrade)
{
@@ -101,50 +140,24 @@ int SYMEXPORT alpm_sync_sysupgrade(alpm_handle_t *handle, int enable_downgrade)
continue;
}
- /* Search for literal then replacers in each sync database.
- * If found, don't check other databases */
+ /* Search for literal then replacers in each sync database. */
for(j = handle->dbs_sync; j; j = j->next) {
alpm_db_t *sdb = j->data;
/* Check sdb */
alpm_pkg_t *spkg = _alpm_db_get_pkgfromcache(sdb, lpkg->name);
+ int literal_upgrade = 0;
if(spkg) {
- /* 1. literal was found in sdb */
- int cmp = _alpm_pkg_compare_versions(spkg, lpkg);
- if(cmp > 0) {
- _alpm_log(handle, ALPM_LOG_DEBUG, "new version of '%s' found (%s => %s)\n",
- lpkg->name, lpkg->version, spkg->version);
- /* check IgnorePkg/IgnoreGroup */
- if(_alpm_pkg_should_ignore(handle, spkg)
- || _alpm_pkg_should_ignore(handle, lpkg)) {
- _alpm_log(handle, ALPM_LOG_WARNING, _("%s: ignoring package upgrade (%s => %s)\n"),
- lpkg->name, lpkg->version, spkg->version);
- } else {
- _alpm_log(handle, ALPM_LOG_DEBUG, "adding package %s-%s to the transaction targets\n",
- spkg->name, spkg->version);
- trans->add = alpm_list_add(trans->add, spkg);
- }
- } else if(cmp < 0) {
- if(enable_downgrade) {
- /* check IgnorePkg/IgnoreGroup */
- if(_alpm_pkg_should_ignore(handle, spkg)
- || _alpm_pkg_should_ignore(handle, lpkg)) {
- _alpm_log(handle, ALPM_LOG_WARNING, _("%s: ignoring package downgrade (%s => %s)\n"),
- lpkg->name, lpkg->version, spkg->version);
- } else {
- _alpm_log(handle, ALPM_LOG_WARNING, _("%s: downgrading from version %s to version %s\n"),
- lpkg->name, lpkg->version, spkg->version);
- trans->add = alpm_list_add(trans->add, spkg);
- }
- } else {
- _alpm_log(handle, ALPM_LOG_WARNING, _("%s: local (%s) is newer than %s (%s)\n"),
- lpkg->name, lpkg->version, sdb->treename, spkg->version);
- }
+ literal_upgrade = check_literal(handle, lpkg, spkg, enable_downgrade);
+ if(literal_upgrade) {
+ trans->add = alpm_list_add(trans->add, spkg);
}
/* jump to next local package */
break;
} else {
/* 2. search for replacers in sdb */
alpm_list_t *k, *l;
+ _alpm_log(handle, ALPM_LOG_DEBUG,
+ "searching for replacements for %s\n", lpkg->name);
for(k = _alpm_db_get_pkgcache(sdb); k; k = k->next) {
int found = 0;
spkg = k->data;