[pacman-dev] crappy version of -Qu (query upgrades)

Xavier shiningxc at gmail.com
Mon Aug 27 11:28:05 EDT 2007


On Mon, Aug 27, 2007 at 04:30:49PM +0200, Xavier wrote:

Here is an updated patch, with all the suggestions :


>From 135d7facdd491d314960ba45a4c393dadebdd522 Mon Sep 17 00:00:00 2001
From: Chantry Xavier <shiningxc at gmail.com>
Date: Sat, 25 Aug 2007 00:10:40 +0200
Subject: [PATCH] Remove duplicated get_upgrades function, use sysupgrade instead.

The alpm_get_upgrades was exactly the same as _alpm_sync_sysupgrade,
except that it didn't ask for confirmation.
There are two kind of questions asked :
%s is in IgnorePkg. Install anyway? [Y/n]
Replace %s with %s/%s? [Y/n]

The first question was actually never asked, because alpm_pkg_compare_versions
already ignored the packages in IgnorePkg.
I removed the IgnorePkg handling from alpm_pkg_compare_versions, but kept the same behavior
with _alpm_sync_sysupgrade, that is ignore packages automatically, without confirmation.

The replace question is asked in find_replacements.
This question can be skipped by using a NULL trans argument, so that we get
the same behavior as with alpm_get_upgrades.

alpm_db_get_upgrades() can now be replaced by :
alpm_sync_sysupgrade(db_local, syncdbs).

Signed-off-by: Chantry Xavier <shiningxc at gmail.com>
---
 lib/libalpm/alpm.h    |    4 +-
 lib/libalpm/db.c      |  141 -------------------------------
 lib/libalpm/package.c |   10 --
 lib/libalpm/sync.c    |  225 ++++++++++++++++++++++++++++---------------------
 lib/libalpm/sync.h    |    4 +-
 lib/libalpm/trans.c   |    3 +-
 src/pacman/query.c    |    8 ++-
 7 files changed, 143 insertions(+), 252 deletions(-)

diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 844d9bf..54bc44c 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -163,8 +163,6 @@ alpm_list_t *alpm_db_getgrpcache(pmdb_t *db);
 alpm_list_t *alpm_db_test(pmdb_t *db);
 alpm_list_t *alpm_db_search(pmdb_t *db, const alpm_list_t* needles);
 
-alpm_list_t *alpm_db_get_upgrades(void);
-
 /*
  * Packages
  */
@@ -237,6 +235,8 @@ typedef enum _pmsynctype_t {
 pmsynctype_t alpm_sync_get_type(const pmsyncpkg_t *sync);
 pmpkg_t *alpm_sync_get_pkg(const pmsyncpkg_t *sync);
 void *alpm_sync_get_data(const pmsyncpkg_t *sync);
+int alpm_sync_sysupgrade(pmdb_t *db_local,
+		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs);
 
 /*
  * Transactions
diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c
index e79aad8..90c5f0b 100644
--- a/lib/libalpm/db.c
+++ b/lib/libalpm/db.c
@@ -46,8 +46,6 @@
 #include "cache.h"
 #include "alpm.h"
 
-#include "sync.h" /* alpm_db_get_upgrades() */
-
 /** \addtogroup alpm_databases Database Functions
  * @brief Functions to query and manipulate the database of libalpm
  * @{
@@ -440,145 +438,6 @@ alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db, const alpm_list_t* needles)
 	return(_alpm_db_search(db, needles));
 }
 
-/* This function is mostly the same as sync.c find_replacements and sysupgrade
- * functions, and we should be able to combine them - this is an interim
- * solution made for -Qu operation */
-/** Get a list of upgradable packages on the current system
- * @return a pmsyncpkg_t list of packages that are out of date
- */
-alpm_list_t SYMEXPORT *alpm_db_get_upgrades(void)
-{
-	alpm_list_t *syncpkgs = NULL;
-	const alpm_list_t *i, *j, *k, *m;
-
-	ALPM_LOG_FUNC;
-
-	/* TODO holy nested loops, Batman! */
-	/* check for "recommended" package replacements */
-	_alpm_log(PM_LOG_DEBUG, "checking for package replacements\n");
-	for(i = handle->dbs_sync; i; i = i->next) {
-		for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {
-			pmpkg_t *spkg = j->data;
-
-			for(k = alpm_pkg_get_replaces(spkg); k; k = k->next) {
-
-				for(m = _alpm_db_get_pkgcache(handle->db_local); m; m = m->next) {
-					pmpkg_t *lpkg = m->data;
-
-					if(strcmp(k->data, alpm_pkg_get_name(lpkg)) == 0) {
-						_alpm_log(PM_LOG_DEBUG, "checking replacement '%s' for package '%s'\n",
-								k->data, alpm_pkg_get_name(spkg));
-						if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(lpkg))) {
-							_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (to be replaced by %s-%s)\n"),
-												alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg),
-												alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
-						} else {
-							/* assume all replaces=() packages are accepted */
-							pmsyncpkg_t *sync = NULL;
-							pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL);
-							if(dummy == NULL) {
-								pm_errno = PM_ERR_MEMORY;
-								goto error;
-							}
-							dummy->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(lpkg));
-
-							pmsyncpkg_t *syncpkg;
-							syncpkg = _alpm_sync_find(syncpkgs, alpm_pkg_get_name(spkg));
-
-							if(syncpkg) {
-								/* found it -- just append to the replaces list */
-								sync->data = alpm_list_add(sync->data, dummy);
-							} else {
-								/* none found -- enter pkg into the final sync list */
-								sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL);
-								if(sync == NULL) {
-									_alpm_pkg_free(dummy);
-									pm_errno = PM_ERR_MEMORY;
-									goto error;
-								}
-								sync->data = alpm_list_add(NULL, dummy);
-								syncpkgs = alpm_list_add(syncpkgs, sync);
-							}
-							_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (to be replaced by %s-%s)\n",
-												alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg),
-												alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
-						}
-						break;
-					}
-				}
-			}
-		}
-	}
-
-	/* now do normal upgrades */
-	for(i = _alpm_db_get_pkgcache(handle->db_local); i; i = i->next) {
-		int replace=0;
-		pmpkg_t *local = i->data;
-		pmpkg_t *spkg = NULL;
-		pmsyncpkg_t *sync;
-
-		for(j = handle->dbs_sync; !spkg && j; j = j->next) {
-			spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local));
-		}
-		if(spkg == NULL) {
-			_alpm_log(PM_LOG_DEBUG, "'%s' not found in sync db -- skipping\n",
-					alpm_pkg_get_name(local));
-			continue;
-		}
-
-		/* we don't care about a to-be-replaced package's newer version */
-		for(j = syncpkgs; j && !replace; j=j->next) {
-			sync = j->data;
-			if(sync->type == PM_SYNC_TYPE_REPLACE) {
-				if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) {
-					replace=1;
-				}
-			}
-		}
-		if(replace) {
-			_alpm_log(PM_LOG_DEBUG, "'%s' is already elected for removal -- skipping\n",
-								alpm_pkg_get_name(local));
-			continue;
-		}
-
-		if(alpm_pkg_compare_versions(local, spkg)) {
-			_alpm_log(PM_LOG_DEBUG, "%s elected for upgrade (%s => %s)\n",
-								alpm_pkg_get_name(local), alpm_pkg_get_version(local),
-								alpm_pkg_get_version(spkg));
-
-			pmsyncpkg_t *syncpkg;
-			syncpkg	= _alpm_sync_find(syncpkgs, alpm_pkg_get_name(local));
-
-			if(!syncpkg) {
-				pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(local),
-																			 alpm_pkg_get_version(local));
-				if(dummy == NULL) {
-					goto error;
-				}
-				sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, dummy);
-				if(sync == NULL) {
-					_alpm_pkg_free(dummy);
-					goto error;
-				}
-				syncpkgs = alpm_list_add(syncpkgs, sync);
-			}
-		}
-	}
-
-	return(syncpkgs);
-error:
-	if(syncpkgs) {
-		alpm_list_t *tmp;
-		for(tmp = syncpkgs; tmp; tmp = alpm_list_next(tmp)) {
-			if(tmp->data) {
-				_alpm_sync_free(tmp->data);
-			}
-		}
-		alpm_list_free(syncpkgs);
-	}
-	return(NULL);
-}
-
 /** @} */
 
 pmdb_t *_alpm_db_new(const char *dbpath, const char *treename)
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index e171d69..395504d 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -727,16 +727,6 @@ int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
 	/* compare versions and see if we need to upgrade */
 	cmp = _alpm_versioncmp(alpm_pkg_get_version(pkg), alpm_pkg_get_version(local_pkg));
 
-	if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(pkg))) {
-		/* package should be ignored (IgnorePkg) */
-		if(cmp > 0) {
-			_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (%s)\n"),
-								alpm_pkg_get_name(local_pkg), alpm_pkg_get_version(local_pkg),
-								alpm_pkg_get_version(pkg));
-		}
-		return(0);
-	}
-
 	if(cmp != 0 && pkg->force) {
 		cmp = 1;
 		_alpm_log(PM_LOG_WARNING, _("%s: forcing upgrade to version %s\n"),
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index f21f7d3..9ca29d6 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -90,16 +90,33 @@ void _alpm_sync_free(pmsyncpkg_t *sync)
 	FREE(sync);
 }
 
+static void synclist_free(alpm_list_t *syncpkgs)
+{
+	if(syncpkgs) {
+		alpm_list_t *tmp;
+		for(tmp = syncpkgs; tmp; tmp = alpm_list_next(tmp)) {
+			if(tmp->data) {
+				_alpm_sync_free(tmp->data);
+			}
+		}
+		alpm_list_free(syncpkgs);
+	}
+
+}
+
 /* Find recommended replacements for packages during a sync.
- * (refactored from _alpm_sync_prepare)
  */
 static int find_replacements(pmtrans_t *trans, pmdb_t *db_local,
-														 alpm_list_t *dbs_sync)
+		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs)
 {
 	alpm_list_t *i, *j, *k; /* wow */
 
 	ALPM_LOG_FUNC;
 
+	if(syncpkgs == NULL) {
+		return(-1);
+	}
+
 	/* check for "recommended" package replacements */
 	_alpm_log(PM_LOG_DEBUG, "checking for package replacements\n");
 	for(i = dbs_sync; i; i = i->next) {
@@ -127,124 +144,142 @@ static int find_replacements(pmtrans_t *trans, pmdb_t *db_local,
 										alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
 				} else {
 					/* get confirmation for the replacement */
-					int doreplace = 0;
-					QUESTION(trans, PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, db->treename, &doreplace);
+					if(trans) {
+						int doreplace = 0;
+						QUESTION(trans, PM_TRANS_CONV_REPLACE_PKG, lpkg, spkg, db->treename, &doreplace);
+						if(!doreplace) {
+							continue;
+						}
+					}
 
-					if(doreplace) {
-						/* if confirmed, add this to the 'final' list, designating 'lpkg' as
-						 * the package to replace.
-						 */
-						pmsyncpkg_t *sync;
-						pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL);
-						if(dummy == NULL) {
+					/* if confirmed, add this to the 'final' list, designating 'lpkg' as
+					 * the package to replace.
+					 */
+					pmsyncpkg_t *sync;
+					pmpkg_t *dummy = _alpm_pkg_new(alpm_pkg_get_name(lpkg), NULL);
+					if(dummy == NULL) {
+						pm_errno = PM_ERR_MEMORY;
+						synclist_free(*syncpkgs);
+						return(-1);
+					}
+					dummy->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(lpkg));
+					/* check if spkg->name is already in the packages list. */
+					sync = _alpm_sync_find(*syncpkgs, alpm_pkg_get_name(spkg));
+					if(sync) {
+						/* found it -- just append to the replaces list */
+						sync->data = alpm_list_add(sync->data, dummy);
+					} else {
+						/* none found -- enter pkg into the final sync list */
+						sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL);
+						if(sync == NULL) {
+							_alpm_pkg_free(dummy);
 							pm_errno = PM_ERR_MEMORY;
-							goto error;
+							synclist_free(*syncpkgs);
+							return(-1);
 						}
-						dummy->requiredby = alpm_list_strdup(alpm_pkg_get_requiredby(lpkg));
-						/* check if spkg->name is already in the packages list. */
-						sync = _alpm_sync_find(trans->packages, alpm_pkg_get_name(spkg));
-						if(sync) {
-							/* found it -- just append to the replaces list */
-							sync->data = alpm_list_add(sync->data, dummy);
-						} else {
-							/* none found -- enter pkg into the final sync list */
-							sync = _alpm_sync_new(PM_SYNC_TYPE_REPLACE, spkg, NULL);
-							if(sync == NULL) {
-								_alpm_pkg_free(dummy);
-								pm_errno = PM_ERR_MEMORY;
-								goto error;
-							}
-							sync->data = alpm_list_add(NULL, dummy);
-							trans->packages = alpm_list_add(trans->packages, sync);
-						}
-						_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (to be replaced by %s-%s)\n",
-											alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg),
-											alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
+						sync->data = alpm_list_add(NULL, dummy);
+						*syncpkgs = alpm_list_add(*syncpkgs, sync);
 					}
+					_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (to be replaced by %s-%s)\n",
+							alpm_pkg_get_name(lpkg), alpm_pkg_get_version(lpkg),
+							alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
 				}
 			}
 		}
 	}
 	return(0);
-error:
-	return(-1);
 }
 
-/* TODO reimplement this in terms of alpm_get_upgrades */
-int _alpm_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync)
+/** Get a list of upgradable packages on the current system
+ * Adds out of date packages to *list.
+ * @arg list pointer to a list of pmsyncpkg_t.
+ */
+int SYMEXPORT alpm_sync_sysupgrade(pmdb_t *db_local,
+		alpm_list_t *dbs_sync, alpm_list_t **syncpkgs)
+{
+	return(_alpm_sync_sysupgrade(NULL, db_local, dbs_sync, syncpkgs));
+}
+
+int _alpm_sync_sysupgrade(pmtrans_t *trans,
+		pmdb_t *db_local, alpm_list_t *dbs_sync, alpm_list_t **syncpkgs)
 {
 	alpm_list_t *i, *j;
 
 	ALPM_LOG_FUNC;
 
+	if(syncpkgs == NULL) {
+		return(-1);
+	}
 	/* check for "recommended" package replacements */
-	if(find_replacements(trans, db_local, dbs_sync) == 0) {
-		/* match installed packages with the sync dbs and compare versions */
-		_alpm_log(PM_LOG_DEBUG, "checking for package upgrades\n");
-		for(i = _alpm_db_get_pkgcache(db_local); i; i = i->next) {
-			int replace=0;
-			pmpkg_t *local = i->data;
-			pmpkg_t *spkg = NULL;
-			pmsyncpkg_t *sync;
-
-			for(j = dbs_sync; !spkg && j; j = j->next) {
-				spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local));
-			}
-			if(spkg == NULL) {
-				_alpm_log(PM_LOG_DEBUG, "'%s' not found in sync db -- skipping\n",
-						alpm_pkg_get_name(local));
-				continue;
-			}
+	if(find_replacements(trans, db_local, dbs_sync, syncpkgs)) {
+		return(-1);
+	}
 
-			/* we don't care about a to-be-replaced package's newer version */
-			for(j = trans->packages; j && !replace; j=j->next) {
-				sync = j->data;
-				if(sync->type == PM_SYNC_TYPE_REPLACE) {
-					if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) {
-						replace=1;
-					}
+	/* match installed packages with the sync dbs and compare versions */
+	_alpm_log(PM_LOG_DEBUG, "checking for package upgrades\n");
+	for(i = _alpm_db_get_pkgcache(db_local); i; i = i->next) {
+		int replace = 0;
+		pmpkg_t *local = i->data;
+		pmpkg_t *spkg = NULL;
+		pmsyncpkg_t *sync;
+
+		for(j = dbs_sync; !spkg && j; j = j->next) {
+			spkg = _alpm_db_get_pkgfromcache(j->data, alpm_pkg_get_name(local));
+		}
+		if(spkg == NULL) {
+			_alpm_log(PM_LOG_DEBUG, "'%s' not found in sync db -- skipping\n",
+					alpm_pkg_get_name(local));
+			continue;
+		}
+
+		/* we don't care about a to-be-replaced package's newer version */
+		for(j = *syncpkgs; j && !replace; j=j->next) {
+			sync = j->data;
+			if(sync->type == PM_SYNC_TYPE_REPLACE) {
+				if(_alpm_pkg_find(alpm_pkg_get_name(spkg), sync->data)) {
+					replace = 1;
 				}
 			}
-			if(replace) {
-				_alpm_log(PM_LOG_DEBUG, "'%s' is already elected for removal -- skipping\n",
-									alpm_pkg_get_name(local));
-				continue;
-			}
+		}
+		if(replace) {
+			_alpm_log(PM_LOG_DEBUG, "'%s' is already elected for removal -- skipping\n",
+					alpm_pkg_get_name(local));
+			continue;
+		}
 
-			/* compare versions and see if we need to upgrade */
-			if(alpm_pkg_compare_versions(local, spkg)) {
-				_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (%s => %s)\n",
-									alpm_pkg_get_name(local), alpm_pkg_get_version(local),
-									alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
-				if(!_alpm_sync_find(trans->packages, alpm_pkg_get_name(spkg))) {
-					/* If package is in the ignorepkg list, ask before we add it to
-					 * the transaction */
-					if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(local))) {
-						int resp = 0;
-						QUESTION(trans, PM_TRANS_CONV_INSTALL_IGNOREPKG, local, NULL, NULL, &resp);
-						if(!resp) {
-							continue;
-						}
-					}
-					pmpkg_t *tmp = _alpm_pkg_dup(local);
-					if(tmp == NULL) {
-						goto error;
-					}
-					sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, tmp);
-					if(sync == NULL) {
-						_alpm_pkg_free(tmp);
-						goto error;
-					}
-					trans->packages = alpm_list_add(trans->packages, sync);
+		/* compare versions and see if we need to upgrade */
+		if(alpm_pkg_compare_versions(local, spkg)) {
+			_alpm_log(PM_LOG_DEBUG, "%s-%s elected for upgrade (%s => %s)\n",
+					alpm_pkg_get_name(local), alpm_pkg_get_version(local),
+					alpm_pkg_get_name(spkg), alpm_pkg_get_version(spkg));
+			if(!_alpm_sync_find(*syncpkgs, alpm_pkg_get_name(spkg))) {
+				/* If package is in the ignorepkg list, skip it */
+				if(alpm_list_find_str(handle->ignorepkg, alpm_pkg_get_name(local))) {
+					_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (%s)\n"),
+							alpm_pkg_get_name(local), alpm_pkg_get_version(local),
+							alpm_pkg_get_version(spkg));
+					continue;
+				}
+
+				pmpkg_t *tmp = _alpm_pkg_dup(local);
+				if(tmp == NULL) {
+					pm_errno = PM_ERR_MEMORY;
+					synclist_free(*syncpkgs);
+					return(-1);
+				}
+				sync = _alpm_sync_new(PM_SYNC_TYPE_UPGRADE, spkg, tmp);
+				if(sync == NULL) {
+					_alpm_pkg_free(tmp);
+					pm_errno = PM_ERR_MEMORY;
+					synclist_free(*syncpkgs);
+					return(-1);
 				}
+				*syncpkgs = alpm_list_add(*syncpkgs, sync);
 			}
 		}
-
-		return(0);
 	}
-error:
-	/* if we're here, it's an error */
-	return(-1);
+
+	return(0);
 }
 
 int _alpm_sync_addtarget(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t *dbs_sync, char *name)
diff --git a/lib/libalpm/sync.h b/lib/libalpm/sync.h
index ef094b5..6e4d009 100644
--- a/lib/libalpm/sync.h
+++ b/lib/libalpm/sync.h
@@ -35,7 +35,9 @@ struct __pmsyncpkg_t {
 pmsyncpkg_t *_alpm_sync_new(int type, pmpkg_t *spkg, void *data);
 void _alpm_sync_free(pmsyncpkg_t *data);
 
-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, alpm_list_t **syncpkgs);
+
 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);
 int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data);
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index c0e38c7..25c7439 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -292,7 +292,8 @@ int _alpm_trans_sysupgrade(pmtrans_t *trans)
 	/* Sanity checks */
 	ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
 
-	return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync));
+	return(_alpm_sync_sysupgrade(trans, handle->db_local, handle->dbs_sync,
+				&(trans->packages)));
 }
 
 /** Add a target to the transaction.
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 8ef47e6..f89ccf2 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -237,9 +237,13 @@ static int query_test(void)
 static int query_upgrades(void)
 {
 	printf(_("Checking for package upgrades... \n"));
-	alpm_list_t *syncpkgs;
+	alpm_list_t *syncpkgs = NULL;
 
-	if((syncpkgs = alpm_db_get_upgrades()) != NULL) {
+	alpm_list_t *syncdbs = alpm_option_get_syncdbs();
+	if(alpm_sync_sysupgrade(db_local, syncdbs, &syncpkgs) == -1) {
+		return(-1);
+	}
+	if(syncpkgs) {
 		display_targets(syncpkgs);
 		return(0);
 	}
-- 
1.5.2.5





More information about the pacman-dev mailing list