summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Chantry <shiningxc@gmail.com>2009-09-15 16:07:25 +0200
committerDan McGee <dan@archlinux.org>2009-09-20 11:56:46 -0500
commitf4809dcc9c27ac614e2a3381d4ecd8661beec8de (patch)
treed680c5144e14ec021523d7d9e58edb1b4cc78420
parent95cb4b6874424c7109df0f8cebefc17d3756d65f (diff)
sync.c : duplicate the target before modifying it
It was probably a bad idea to modify the target directly in case of repo/pkg syntax. Duplicating it also allows us to keep the original target string, which is more informative when printing errors. Also remove a duplicated error message from libalpm, and improve the message already returned to the frontend. $ pacman -S foo/bar before error: repository 'foo' not found error: 'bar': no such repository after error: 'foo/bar': could not find repository for target Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/error.c2
-rw-r--r--lib/libalpm/sync.c1
-rw-r--r--src/pacman/sync.c34
3 files changed, 19 insertions, 18 deletions
diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c
index 6ff1d675..ae19786e 100644
--- a/lib/libalpm/error.c
+++ b/lib/libalpm/error.c
@@ -120,7 +120,7 @@ const char SYMEXPORT *alpm_strerror(int err)
case PM_ERR_PKG_INVALID_ARCH:
return _("package architecture is not valid");
case PM_ERR_PKG_REPO_NOT_FOUND:
- return _("no such repository");
+ return _("could not find repository for target");
/* Deltas */
case PM_ERR_DLT_INVALID:
return _("invalid or corrupted delta");
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 28e63fd4..a1a6ea7c 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -323,7 +323,6 @@ int SYMEXPORT alpm_sync_dbtarget(char *dbname, char *target)
}
}
if(dbs == NULL) {
- _alpm_log(PM_LOG_ERROR, _("repository '%s' not found\n"), dbname);
RET_ERR(PM_ERR_PKG_REPO_NOT_FOUND, -1);
}
return(_alpm_sync_target(dbs, target));
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index b23a9633..08e977b2 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -551,32 +551,34 @@ static alpm_list_t *syncfirst() {
static int process_target(char *target)
{
/* process targets */
- char *targ = strchr(target, '/');
- char *db = NULL;
- int ret;
- if(targ) {
- *targ = '\0';
- targ++;
- db = target;
- ret = alpm_sync_dbtarget(db,targ);
+ char *targstring = strdup(target);
+ char *targname = strchr(targstring, '/');
+ char *dbname = NULL;
+ int ret = 0;
+ if(targname) {
+ *targname = '\0';
+ targname++;
+ dbname = targstring;
+ ret = alpm_sync_dbtarget(dbname,targname);
} else {
- targ = target;
- ret = alpm_sync_target(targ);
+ targname = targstring;
+ ret = alpm_sync_target(targname);
}
if(ret == -1) {
if(pm_errno == PM_ERR_TRANS_DUP_TARGET
|| pm_errno == PM_ERR_PKG_IGNORED) {
/* just skip duplicate or ignored targets */
- pm_printf(PM_LOG_WARNING, _("skipping target: %s\n"), targ);
- return(0);
+ pm_printf(PM_LOG_WARNING, _("skipping target: %s\n"), target);
+ } else {
+ pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n", target,
+ alpm_strerrorlast());
+ ret = 1;
}
- pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n",
- targ, alpm_strerrorlast());
- return(1);
}
- return(0);
+ free(targstring);
+ return(ret);
}
static int sync_trans(alpm_list_t *targets)