summaryrefslogtreecommitdiff
path: root/src/pacman
diff options
context:
space:
mode:
authorXavier Chantry <chantry.xavier@gmail.com>2010-10-17 11:16:27 +0200
committerXavier Chantry <chantry.xavier@gmail.com>2011-01-29 19:33:16 +0100
commit4a72c0964abc4b4836c2aafb9c59716299215802 (patch)
tree440b821dd0995ee011bbf0f7a15e3b7cebb45042 /src/pacman
parent953e0d48d7e6e3703bdaccef4ec2a8bbdbe460ed (diff)
pacman/upgrade: switch to new interface
Note that there is a behavior change here : if the same package name appeared several times in the target list, the alpm_add_target interface chooses the new package, while alpm_add_pkg returns PKG_DUP. I don't see why we cannot unify the behavior of -S and -U, and just choose one behavior that applies to both. Otherwise, it's always possible to handle these different behaviors in the frontend, it just requires more work. Signed-off-by: Xavier Chantry <chantry.xavier@gmail.com>
Diffstat (limited to 'src/pacman')
-rw-r--r--src/pacman/upgrade.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
index 92a477e0..595e4aab 100644
--- a/src/pacman/upgrade.c
+++ b/src/pacman/upgrade.c
@@ -71,9 +71,18 @@ int pacman_upgrade(alpm_list_t *targets)
/* add targets to the created transaction */
for(i = targets; i; i = alpm_list_next(i)) {
char *targ = alpm_list_getdata(i);
- if(alpm_add_target(targ) == -1) {
+ pmpkg_t *pkg;
+
+ if(alpm_pkg_load(targ, 1, &pkg) != 0) {
+ pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n",
+ targ, alpm_strerrorlast());
+ trans_release();
+ return(1);
+ }
+ if(alpm_add_pkg(pkg) == -1) {
pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n",
targ, alpm_strerrorlast());
+ alpm_pkg_free(pkg);
trans_release();
return(1);
}