From b91aa8b7fdced0afcac9271cb32bd50e74591349 Mon Sep 17 00:00:00 2001
From: guinux <nuxgui@gmail.com>
Date: Wed, 10 Apr 2019 19:16:17 +0200
Subject: [PATCH] add no-confirm option in cli

---
 po/pamac.pot             |  20 ++++----
 src/cli.vala             | 100 ++++++++++++++++++++++++++++++++-------
 src/transaction-cli.vala |  14 +++++-
 3 files changed, 107 insertions(+), 27 deletions(-)

diff --git a/po/pamac.pot b/po/pamac.pot
index f8cfede7..4e8a3c58 100644
--- a/po/pamac.pot
+++ b/po/pamac.pot
@@ -1,13 +1,13 @@
 # Translation of Pamac.
-# Copyright (C) 2013-2018 Manjaro Developers <manjaro-dev@manjaro.org>
+# Copyright (C) 2013-2019 Manjaro Developers <manjaro-dev@manjaro.org>
 # This file is distributed under the same license as the Pamac package.
-# Guillaume Benoit <guillaume@manjaro.org>, 2013-2018.
+# Guillaume Benoit <guillaume@manjaro.org>, 2013-2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Pamac\n"
 "Report-Msgid-Bugs-To: guillaume@manjaro.org\n"
-"POT-Creation-Date: 2018-12-26 12:00+0100\n"
+"POT-Creation-Date: 2019-04-10 19:02+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -250,11 +250,6 @@ msgstr ""
 msgid "Configuring %s"
 msgstr ""
 
-#: src/transaction.vala
-#, c-format
-msgid "Downloading %s"
-msgstr ""
-
 #: src/transaction.vala
 msgid "Checking available disk space"
 msgstr ""
@@ -295,6 +290,11 @@ msgstr ""
 msgid "Running post-transaction hooks"
 msgstr ""
 
+#: src/transaction.vala
+#, c-format
+msgid "Downloading %s"
+msgstr ""
+
 #: src/transaction.vala
 #, c-format
 msgid "About %u seconds remaining"
@@ -886,6 +886,10 @@ msgstr ""
 msgid "do not clone build files from AUR, only use local files"
 msgstr ""
 
+#: src/cli.vala
+msgid "bypass any and all confirmation messages"
+msgstr ""
+
 #: src/cli.vala
 msgid "glob"
 msgstr ""
diff --git a/src/cli.vala b/src/cli.vala
index 05327c8a..d649a8b6 100644
--- a/src/cli.vala
+++ b/src/cli.vala
@@ -1,7 +1,7 @@
 /*
  *  pamac-vala
  *
- *  Copyright (C) 2018 Guillaume Benoit <guillaume@manjaro.org>
+ *  Copyright (C) 2019 Guillaume Benoit <guillaume@manjaro.org>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -229,6 +229,8 @@ namespace Pamac {
 							database.config.aur_build_dir = args[i + 1];
 						}
 						i++;
+					} else if (arg == "--no-confirm") {
+						transaction.no_confirm = true;
 					} else {
 						targets += arg;
 					}
@@ -280,6 +282,7 @@ namespace Pamac {
 					if (args[2] == "--help" || args[2] == "-h") {
 						display_install_help ();
 					} else {
+						init_transaction ();
 						string[] targets = {};
 						int i = 2;
 						while (i < args.length) {
@@ -294,12 +297,13 @@ namespace Pamac {
 									temporary_ignorepkgs += name;
 								}
 								i++;
+							} else if (arg == "--no-confirm") {
+								transaction.no_confirm = true;
 							} else {
 								targets += arg;
 							}
 							i++;
 						}
-						init_transaction ();
 						install_pkgs (targets);
 					}
 				} else {
@@ -311,7 +315,23 @@ namespace Pamac {
 						display_reinstall_help ();
 					} else {
 						init_transaction ();
-						reinstall_pkgs (args[2:args.length]);
+						string[] targets = {};
+						int i = 2;
+						while (i < args.length) {
+							unowned string arg = args[i];
+							if (arg == "--overwrite") {
+								foreach (unowned string name in args[i + 1].split(",")) {
+									overwrite_files += name;
+								}
+								i++;
+							} else if (arg == "--no-confirm") {
+								transaction.no_confirm = true;
+							} else {
+								targets += arg;
+							}
+							i++;
+						}
+						reinstall_pkgs (targets);
 					}
 				} else {
 					display_reinstall_help ();
@@ -320,16 +340,27 @@ namespace Pamac {
 				if (args.length > 2) {
 					if (args[2] == "--help" || args[2] == "-h") {
 						display_remove_help ();
-					} else if (args[2] == "--orphans" || args[2] == "-o") {
+					} else {
 						init_transaction ();
-						if (args.length > 3) {
-							remove_pkgs (args[3:args.length], true);
-						} else {
+						bool recurse = false;
+						string[] targets = {};
+						int i = 2;
+						while (i < args.length) {
+							unowned string arg = args[i];
+							if (arg == "--orphans" || arg == "-o") {
+								recurse = true;
+							} else if (arg == "--no-confirm") {
+								transaction.no_confirm = true;
+							} else {
+								targets += arg;
+							}
+							i++;
+						}
+						if (targets.length > 0) {
+							remove_pkgs (targets, recurse);
+						} else if (recurse) {
 							remove_orphans ();
 						}
-					} else {
-						init_transaction ();
-						remove_pkgs (args[2:args.length]);
 					}
 				} else {
 					display_remove_help ();
@@ -424,6 +455,8 @@ namespace Pamac {
 							overwrite_files += name;
 						}
 						i++;
+					} else if (arg == "--no-confirm") {
+						transaction.no_confirm = true;
 					} else {
 						display_upgrade_help ();
 						error = true;
@@ -773,7 +806,8 @@ namespace Pamac {
 			stdout.printf (dgettext (null, "options") + ":\n");
 			int max_length = 0;
 			string[] options = {"  %s <%s>".printf ("--builddir", dgettext (null, "dir")),
-								"  --no-clone"};
+								"  --no-clone",
+								"  --no-confirm"};
 			foreach (unowned string option in options) {
 				int length = option.char_count ();
 				if (length > max_length) {
@@ -781,7 +815,8 @@ namespace Pamac {
 				}
 			}
 			string[] details = {dgettext (null, "build directory, if no directory is given the one specified in pamac.conf file is used"),
-								dgettext (null, "do not clone build files from AUR, only use local files")};
+								dgettext (null, "do not clone build files from AUR, only use local files"),
+								dgettext (null, "bypass any and all confirmation messages")};
 			int i = 0;
 			foreach (unowned string option in options) {
 				string[] cuts = split_string (details[i], max_length + 3);
@@ -803,7 +838,8 @@ namespace Pamac {
 			stdout.printf (dgettext (null, "options") + ":\n");
 			int max_length = 0;
 			string[] options = {"  %s <%s>".printf ("--ignore", dgettext (null, "package(s)")),
-								"  %s <%s>".printf ("--overwrite", dgettext (null, "glob"))};
+								"  %s <%s>".printf ("--overwrite", dgettext (null, "glob")),
+								"  --no-confirm"};
 			foreach (unowned string option in options) {
 				int length = option.char_count ();
 				if (length > max_length) {
@@ -811,7 +847,8 @@ namespace Pamac {
 				}
 			}
 			string[] details = {dgettext (null, "ignore a package upgrade, multiple packages can be specified by separating them with a comma"),
-								dgettext (null, "overwrite conflicting files, multiple patterns can be specified by separating them with a comma")};
+								dgettext (null, "overwrite conflicting files, multiple patterns can be specified by separating them with a comma"),
+								dgettext (null, "bypass any and all confirmation messages")};
 			int i = 0;
 			foreach (unowned string option in options) {
 				string[] cuts = split_string (details[i], max_length + 3);
@@ -830,6 +867,29 @@ namespace Pamac {
 			stdout.printf ("\n\n");
 			stdout.printf ("pamac reinstall <%s>".printf ("%s,%s".printf (dgettext (null, "package(s)"), dgettext (null, "group(s)"))));
 			stdout.printf ("\n\n");
+			stdout.printf (dgettext (null, "options") + ":\n");
+			int max_length = 0;
+			string[] options = {"  %s <%s>".printf ("--overwrite", dgettext (null, "glob")),
+								"  --no-confirm"};
+			foreach (unowned string option in options) {
+				int length = option.char_count ();
+				if (length > max_length) {
+					max_length = length;
+				}
+			}
+			string[] details = {dgettext (null, "overwrite conflicting files, multiple patterns can be specified by separating them with a comma"),
+								dgettext (null, "bypass any and all confirmation messages")};
+			int i = 0;
+			foreach (unowned string option in options) {
+				string[] cuts = split_string (details[i], max_length + 3);
+				print_aligned (option, " : %s".printf (cuts[0]), max_length);
+				int j = 1;
+				while (j < cuts.length) {
+					print_aligned ("", "%s".printf (cuts[j]), max_length + 3);
+					j++;
+				}
+				i++;
+			}
 		}
 
 		void display_remove_help () {
@@ -839,14 +899,16 @@ namespace Pamac {
 			stdout.printf ("\n\n");
 			stdout.printf (dgettext (null, "options") + ":\n");
 			int max_length = 0;
-			string[] options = {"-o, --orphans"};
+			string[] options = {"  -o, --orphans",
+								"  --no-confirm"};
 			foreach (unowned string option in options) {
 				int length = option.char_count ();
 				if (length > max_length) {
 					max_length = length;
 				}
 			}
-			string[] details = {dgettext (null, "remove dependencies that are not required by other packages, if this option is used without package name remove all orphans")};
+			string[] details = {dgettext (null, "remove dependencies that are not required by other packages, if this option is used without package name remove all orphans"),
+								dgettext (null, "bypass any and all confirmation messages")};
 			int i = 0;
 			foreach (unowned string option in options) {
 				string[] cuts = split_string (details[i], max_length + 3);
@@ -908,7 +970,8 @@ namespace Pamac {
 								"  --force-refresh",
 								"  --enable-downgrade",
 								"  %s <%s>".printf ("--ignore", dgettext (null, "package(s)")),
-								"  %s <%s>".printf ("--overwrite", dgettext (null, "glob"))};
+								"  %s <%s>".printf ("--overwrite", dgettext (null, "glob")),
+								"  --no-confirm"};
 			foreach (unowned string option in options) {
 				int length = option.char_count ();
 				if (length > max_length) {
@@ -920,7 +983,8 @@ namespace Pamac {
 								dgettext (null, "force the refresh of the databases"),
 								dgettext (null, "enable package downgrades"),
 								dgettext (null, "ignore a package upgrade, multiple packages can be specified by separating them with a comma"),
-								dgettext (null, "overwrite conflicting files, multiple patterns can be specified by separating them with a comma")};
+								dgettext (null, "overwrite conflicting files, multiple patterns can be specified by separating them with a comma"),
+								dgettext (null, "bypass any and all confirmation messages")};
 			int i = 0;
 			foreach (unowned string option in options) {
 				string[] cuts = split_string (details[i], max_length + 3);
diff --git a/src/transaction-cli.vala b/src/transaction-cli.vala
index caa740d4..9be688f9 100644
--- a/src/transaction-cli.vala
+++ b/src/transaction-cli.vala
@@ -1,7 +1,7 @@
 /*
  *  pamac-vala
  *
- *  Copyright (C) 2018 Guillaume Benoit <guillaume@manjaro.org>
+ *  Copyright (C) 2019 Guillaume Benoit <guillaume@manjaro.org>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -22,6 +22,7 @@ namespace Pamac {
 		string current_line;
 		string current_action;
 		bool summary_shown;
+		public bool no_confirm { get; set; }
 
 		public TransactionCli (Database database) {
 			Object (database: database);
@@ -31,6 +32,7 @@ namespace Pamac {
 			current_line = "";
 			current_action = "";
 			summary_shown = false;
+			no_confirm = false;
 			// connect to signal
 			emit_action.connect (print_action);
 			emit_action_progress.connect (print_action_progress);
@@ -181,6 +183,9 @@ namespace Pamac {
 
 		protected override List<string> choose_optdeps (string pkgname, string[] optdeps) {
 			var optdeps_to_install = new List<string> ();
+			if (no_confirm) {
+				return optdeps_to_install;
+			}
 			// print pkgs
 			int num_length = optdeps.length.to_string ().length + 1;
 			stdout.printf ("%s:\n".printf (dgettext (null, "Choose optional dependencies for %s").printf (pkgname)));
@@ -242,6 +247,10 @@ namespace Pamac {
 		}
 
 		protected override int choose_provider (string depend, string[] providers) {
+			if (no_confirm) {
+				// choose first provider
+				return 0;
+			}
 			var pkgs = new SList<Package> ();
 			foreach (unowned string pkgname in providers) {
 				var pkg = database.get_sync_pkg (pkgname);
@@ -294,6 +303,9 @@ namespace Pamac {
 		}
 
 		bool ask_user (string question) {
+			if (no_confirm) {
+				return true;
+			}
 			// ask user confirmation
 			stdout.printf ("%s %s ", question, dgettext (null, "[y/N]"));
 			char buf[32];
-- 
GitLab