From 87fb8f5d5795be9b2bcb025eac26c94d7bb1e7b3 Mon Sep 17 00:00:00 2001
From: Dan McGee <dan@archlinux.org>
Date: Thu, 25 Aug 2011 18:37:23 -0500
Subject: Make sync error message smarter on unfound targets

We had two issues here. One is a file with an absolute path passed to -S
results in a cryptic error message due to the database name being '\0'.
The second is not realizing you should be doing -U instead of -S. Fix
both of these to transform this:

    $ sudo pacman -S /tmp/binutils-2.21.1-2-i686.pkg.tar.xz
    error: database not found:

to this:

    $ sudo pacman -S /tmp/binutils-2.21.1-2-i686.pkg.tar.xz
    error: target not found: /tmp/binutils-2.21.1-2-i686.pkg.tar.xz
    warning: '/tmp/binutils-2.21.1-2-i686.pkg.tar.xz' is a file, did you mean -U/--upgrade instead of -S/--sync?

Signed-off-by: Dan McGee <dan@archlinux.org>
---
 src/pacman/sync.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index ea32a264..a7fe5be9 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -672,8 +672,6 @@ static int process_targname(alpm_list_t *dblist, const char *targname)
 	/* #FS#23342 - skip ignored packages when user says no */
 	if(alpm_errno(config->handle) == ALPM_ERR_PKG_IGNORED) {
 			pm_printf(ALPM_LOG_WARNING, _("skipping target: %s\n"), targname);
-			/* TODO how to do this, we shouldn't be fucking with it from the frontend */
-			/* pm_errno = 0; */
 			return 0;
 	}
 
@@ -693,7 +691,7 @@ static int process_target(const char *target)
 	int ret = 0;
 	alpm_list_t *dblist = NULL;
 
-	if(targname) {
+	if(targname && targname != targstring) {
 		alpm_db_t *db = NULL;
 
 		*targname = '\0';
@@ -716,6 +714,11 @@ static int process_target(const char *target)
 	}
 cleanup:
 	free(targstring);
+	if(ret && access(target, R_OK) == 0) {
+		pm_fprintf(stderr, ALPM_LOG_WARNING,
+				_("'%s' is a file, did you mean %s instead of %s?"),
+				target, "-U/--upgrade", "-S/--sync");
+	}
 	return ret;
 }
 
-- 
cgit v1.2.3-70-g09d2