From 250331a636699561e1239e341f30f2adfebbcb43 Mon Sep 17 00:00:00 2001
From: Chantry Xavier <shiningxc@gmail.com>
Date: Thu, 22 Nov 2007 21:01:45 +0100
Subject: Add new --needed option for -S.

During a pacman operation such as a group install, pacman can ask several
questions such as "local version is up to date. Upgrade anyway?". They are
usually all answered either by yes or by no:
* yes when you want to reinstall all the targets.
* no when you only want to install the missing ones (either because you are
installing a group, or because you are copying a pacman -S line from wiki or
whatever).

So instead of asking this question for each target, it is now now configured
with a flag.  Yes will be the default -S behavior, No will be achieved with
the --needed flag.

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
---
 src/pacman/callback.c | 11 -----------
 src/pacman/pacman.c   | 13 ++++++++-----
 2 files changed, 8 insertions(+), 16 deletions(-)

(limited to 'src/pacman')

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 232ca4cd..dd469ecc 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -305,7 +305,6 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
 			*response = yesno(str);
 			break;
 		case PM_TRANS_CONV_LOCAL_NEWER:
-
 			if(!config->op_s_downloadonly) {
 				snprintf(str, LOG_STR_LEN, _(":: %s-%s: local version is newer. Upgrade anyway? [Y/n] "),
 						alpm_pkg_get_name(data1),
@@ -315,16 +314,6 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
 				*response = 1;
 			}
 			break;
-		case PM_TRANS_CONV_LOCAL_UPTODATE:
-			if(!config->op_s_downloadonly) {
-				snprintf(str, LOG_STR_LEN, _(":: %s-%s: local version is up to date. Upgrade anyway? [Y/n] "),
-						alpm_pkg_get_name(data1),
-						alpm_pkg_get_version(data1));
-				*response = yesno(str);
-			} else {
-				*response = 1;
-			}
-			break;
 		case PM_TRANS_CONV_CORRUPTED_PKG:
 			if(!config->noconfirm) {
 				snprintf(str, LOG_STR_LEN, _(":: File %s is corrupted. Do you want to delete it? [Y/n] "),
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 3f4af22c..19d8b2a4 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -129,6 +129,7 @@ static void usage(int op, const char * const myname)
 			printf(_("  -u, --sysupgrade     upgrade all packages that are out of date\n"));
 			printf(_("  -w, --downloadonly   download packages but do not install/upgrade anything\n"));
 			printf(_("  -y, --refresh        download fresh package databases from the server\n"));
+			printf(_("      --needed         only install outdated or not yet installed packages\n"));
 			printf(_("      --ignore <pkg>   ignore a package upgrade (can be used more than once)\n"));
 			printf(_("      --ignoregroup <grp>\n"
 			         "                       ignore a group upgrade (can be used more than once)\n"));
@@ -261,8 +262,8 @@ static int parseargs(int argc, char *argv[])
 		{"info",       no_argument,       0, 'i'},
 		{"dbonly",     no_argument,       0, 'k'},
 		{"list",       no_argument,       0, 'l'},
-		{"nosave",     no_argument,       0, 'n'},
 		{"foreign",    no_argument,       0, 'm'},
+		{"nosave",     no_argument,       0, 'n'},
 		{"owns",       no_argument,       0, 'o'},
 		{"file",       no_argument,       0, 'p'},
 		{"print-uris", no_argument,       0, 'p'},
@@ -286,10 +287,11 @@ static int parseargs(int argc, char *argv[])
 		{"asdeps",     no_argument,       0, 1008},
 		{"logfile",    required_argument, 0, 1009},
 		{"ignoregroup", required_argument, 0, 1010},
+		{"needed",     no_argument,       0, 1011},
 		{0, 0, 0, 0}
 	};
 
-	while((opt = getopt_long(argc, argv, "ARUFQSTr:b:vkhscVfmnoldepituwygzq", opts, &option_index))) {
+	while((opt = getopt_long(argc, argv, "ARUFQSTr:b:vkhscVfmnoldepqituwygz", opts, &option_index))) {
 		alpm_list_t *list = NULL, *item = NULL; /* lists for splitting strings */
 
 		if(opt < 0) {
@@ -361,6 +363,7 @@ static int parseargs(int argc, char *argv[])
 				}
 				FREELIST(list);
 				break;
+			case 1011: config->flags |= PM_TRANS_FLAG_NEEDED; break;
 			case 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break;
 			case 'Q': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_QUERY); break;
 			case 'R': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_REMOVE); break;
@@ -402,6 +405,9 @@ static int parseargs(int argc, char *argv[])
 				config->op_q_isfile = 1;
 				config->flags |= PM_TRANS_FLAG_PRINTURIS;
 				break;
+			case 'q':
+				config->quiet = 1;
+				break;
 			case 'r':
 				if(alpm_option_set_root(optarg) != 0) {
 					pm_printf(PM_LOG_ERROR, _("problem setting root '%s' (%s)\n"),
@@ -429,9 +435,6 @@ static int parseargs(int argc, char *argv[])
 				config->flags |= PM_TRANS_FLAG_NOCONFLICTS;
 				break;
 			case 'y': (config->op_s_sync)++; break;
-			case 'q':
-				config->quiet = 1;
-				break;
 			case '?': return(1);
 			default: return(1);
 		}
-- 
cgit v1.2.3-70-g09d2