[pacman-dev] [PATCH] script: color for pkgdelta, pacman-key, repo-add

William Giokas 1007380 at gmail.com
Sat Mar 2 03:29:06 EST 2013


Use the same color and message/error/warning functions as makepkg in the
rest of the pacman scripts. Added a long and short opt for the three.

Also, split the message functions into the scripts/library directory, as
they are now the same across the board. The new term_colors.sh file is a
generic term-color file for use with the output_format functions.
makepkg does not use it as it has a configuration file, so it has an
added check for using color.

Signed-off-by: William Giokas <1007380 at gmail.com>
---
 doc/pkgdelta.8.txt               |  3 ++
 doc/repo-add.8.txt               |  3 ++
 scripts/library/output_format.sh | 18 ++++++++---
 scripts/library/term_colors.sh   | 22 +++++++++++++
 scripts/makepkg.sh.in            | 69 +++++++++++++---------------------------
 scripts/pacman-key.sh.in         |  8 +++--
 scripts/pkgdelta.sh.in           | 10 ++++--
 scripts/repo-add.sh.in           |  5 +++
 8 files changed, 82 insertions(+), 56 deletions(-)
 create mode 100644 scripts/library/term_colors.sh

diff --git a/doc/pkgdelta.8.txt b/doc/pkgdelta.8.txt
index 587320a..b864fd2 100644
--- a/doc/pkgdelta.8.txt
+++ b/doc/pkgdelta.8.txt
@@ -41,6 +41,9 @@ Options
 *-q, \--quiet*::
 	Be quiet. Do not output anything but warnings and errors.
 
+*-c, \--color*::
+	Use color in output.
+
 Examples
 --------
 
diff --git a/doc/repo-add.8.txt b/doc/repo-add.8.txt
index 91f3ac6..b23142a 100644
--- a/doc/repo-add.8.txt
+++ b/doc/repo-add.8.txt
@@ -57,6 +57,9 @@ Common Options
 	If the signature is invalid, an error is produced and the update does not
 	proceed.
 
+*-c, \--color*::
+	Use color in output.
+
 repo-add Options
 ----------------
 *-d, \--delta*::
diff --git a/scripts/library/output_format.sh b/scripts/library/output_format.sh
index 9e890e7..8861551 100644
--- a/scripts/library/output_format.sh
+++ b/scripts/library/output_format.sh
@@ -1,21 +1,29 @@
+# Common message formats
+# Colors will be empty strings unless defined in the appropriate files.
+
+plain() {
+	local mesg=$1; shift
+	printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
 msg() {
 	(( QUIET )) && return
 	local mesg=$1; shift
-	printf "==> ${mesg}\n" "$@" >&1
+	printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
 }
 
 msg2() {
 	(( QUIET )) && return
 	local mesg=$1; shift
-	printf "  -> ${mesg}\n" "$@" >&1
+	printf "${BLUE}  ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1
 }
 
 warning() {
 	local mesg=$1; shift
-	printf "==> $(gettext "WARNING:") ${mesg}\n" "$@" >&2
+  printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
 }
 
 error() {
 	local mesg=$1; shift
-	printf "==> $(gettext "ERROR:") ${mesg}\n" "$@" >&2
-}
\ No newline at end of file
+	printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
+}
diff --git a/scripts/library/term_colors.sh b/scripts/library/term_colors.sh
new file mode 100644
index 0000000..ef1469e
--- /dev/null
+++ b/scripts/library/term_colors.sh
@@ -0,0 +1,22 @@
+# check if messages are to be printed using color
+# Uses the variable 'USE_COLOR' to determine whether or not to be used.
+unset ALL_OFF BOLD BLUE GREEN RED YELLOW
+if [[ -t 2 && ! $USE_COLOR = "n" ]]; then
+	# prefer terminal safe colored and bold text when tput is supported
+	if tput setaf 0 &>/dev/null; then
+		ALL_OFF="$(tput sgr0)"
+		BOLD="$(tput bold)"
+		BLUE="${BOLD}$(tput setaf 4)"
+		GREEN="${BOLD}$(tput setaf 2)"
+		RED="${BOLD}$(tput setaf 1)"
+		YELLOW="${BOLD}$(tput setaf 3)"
+	else
+		ALL_OFF="\e[1;0m"
+		BOLD="\e[1;1m"
+		BLUE="${BOLD}\e[1;34m"
+		GREEN="${BOLD}\e[1;32m"
+		RED="${BOLD}\e[1;31m"
+		YELLOW="${BOLD}\e[1;33m"
+	fi
+fi
+readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index bd29d73..10d7ee4 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -90,33 +90,32 @@ PACMAN_OPTS=
 
 shopt -s extglob
 
-### SUBROUTINES ###
-
-plain() {
-	local mesg=$1; shift
-	printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg() {
-	local mesg=$1; shift
-	printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg2() {
-	local mesg=$1; shift
-	printf "${BLUE}  ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
+##
+# Check if option is present in BUILDENV. Needed for color checking
+#
+#  usage : check_buildenv( $option, $expected_val )
+# return : 0   - matches expected
+#          1   - does not match expected
+#          127 - not found
+##
+check_buildenv() {
+	in_opt_array "$1" ${BUILDENV[@]}
+	case $? in
+		0) # assert enabled
+			[[ $2 = "y" ]]
+			return ;;
+		1) # assert disabled
+			[[ $2 = "n" ]]
+			return ;;
+	esac
 
-warning() {
-	local mesg=$1; shift
-	printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
+	# not found
+	return 127
 }
 
-error() {
-	local mesg=$1; shift
-	printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
+### SUBROUTINES ###
 
+m4_include(library/output_format.sh)
 
 ##
 # Special exit call for traps, Don't print any error messages when inside,
@@ -802,30 +801,6 @@ check_option() {
 
 
 ##
-# Check if option is present in BUILDENV
-#
-#  usage : check_buildenv( $option, $expected_val )
-# return : 0   - matches expected
-#          1   - does not match expected
-#          127 - not found
-##
-check_buildenv() {
-	in_opt_array "$1" ${BUILDENV[@]}
-	case $? in
-		0) # assert enabled
-			[[ $2 = "y" ]]
-			return ;;
-		1) # assert disabled
-			[[ $2 = "n" ]]
-			return ;;
-	esac
-
-	# not found
-	return 127
-}
-
-
-##
 #  usage : in_opt_array( $needle, $haystack )
 # return : 0   - enabled
 #          1   - disabled
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in
index 8f75e2f..8fc069f 100644
--- a/scripts/pacman-key.sh.in
+++ b/scripts/pacman-key.sh.in
@@ -44,6 +44,7 @@ RECEIVE=0
 REFRESH=0
 UPDATEDB=0
 VERIFY=0
+USE_COLOR='n'
 
 DEFAULT_KEYSERVER='hkp://pool.sks-keyservers.net'
 
@@ -67,6 +68,7 @@ usage() {
 	printf -- "$(gettext "  -r, --recv-keys           Fetch the specified keyids")\n"
 	printf -- "$(gettext "  -u, --updatedb            Update the trustdb of pacman")\n"
 	printf -- "$(gettext "  -v, --verify              Verify the file(s) specified by the signature(s)")\n"
+	printf -- "$(gettext "  -c, --color               Use color for pacman-key messages (gpg messages not affected)")\n"
 	printf -- "$(gettext "  --edit-key                Present a menu for key management task on keyids")\n"
 	printf -- "$(gettext "  --import                  Imports pubring.gpg from dir(s)")\n"
 	printf -- "$(gettext "  --import-trustdb          Imports ownertrust values from trustdb.gpg in dir(s)")\n"
@@ -511,8 +513,8 @@ if ! type gettext &>/dev/null; then
 	}
 fi
 
-OPT_SHORT="adefhlruvV"
-OPT_LONG=('add' 'config:' 'delete' 'edit-key' 'export' 'finger' 'gpgdir:'
+OPT_SHORT="acdefhlruvV"
+OPT_LONG=('add' 'color' 'config:' 'delete' 'edit-key' 'export' 'finger' 'gpgdir:'
           'help' 'import' 'import-trustdb' 'init' 'keyserver:' 'list-keys' 'list-sigs'
           'lsign-key' 'populate' 'recv-keys' 'refresh-keys' 'updatedb'
           'verify' 'version')
@@ -548,6 +550,7 @@ while (( $# )); do
 		--refresh-keys)   REFRESH=1 ;;
 		-u|--updatedb)    UPDATEDB=1 ;;
 		-v|--verify)      VERIFY=1 ;;
+		-c|--color)       USE_COLOR='y' ;;
 
 		-h|--help)        usage; exit 0 ;;
 		-V|--version)     version; exit 0 ;;
@@ -557,6 +560,7 @@ while (( $# )); do
 	shift
 done
 
+m4_include(library/term_colors.sh)
 
 if ! type -p gpg >/dev/null; then
 	error "$(gettext "Cannot find the %s binary required for all %s operations.")" "gpg" "pacman-key"
diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in
index f9b40c9..4ac58cc 100644
--- a/scripts/pkgdelta.sh.in
+++ b/scripts/pkgdelta.sh.in
@@ -29,6 +29,7 @@ export TEXTDOMAINDIR='@localedir@'
 declare -r myver='@PACKAGE_VERSION@'
 
 QUIET=0
+USE_COLOR='n'
 
 # minimal of package before deltas are generated (bytes)
 min_pkg_size=$((1024*1024))
@@ -54,6 +55,7 @@ This delta file can then be added to a database using repo-add.\n\n")"
 	echo
 	printf -- "$(gettext "Options:\n")"
 	printf -- "$(gettext "  -q, --quiet       minimize output\n")"
+	printf -- "$(gettext "  -c, --color       colorize output\n")"
 	printf -- "$(gettext "  --min-pkg-size    minimum package size before deltas are generated\n")"
 	printf -- "$(gettext "  --max-delta-size  percent of new package above which the delta will be discarded\n")"
 }
@@ -154,8 +156,8 @@ create_xdelta()
 	return 0
 }
 
-OPT_SHORT='hqV'
-OPT_LONG=('help' 'quiet' 'max-delta-size:' 'min-pkg-size:' 'version')
+OPT_SHORT='chqV'
+OPT_LONG=('help' 'color' 'quiet' 'max-delta-size:' 'min-pkg-size:' 'version')
 if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
 	exit 1
 fi
@@ -173,6 +175,8 @@ while :; do
 			exit 0 ;;
 		-q|--quiet)
 			QUIET=1;;
+		-c|--color)
+			USE_COLOR='y';;
 		--min-pkg-size)
 			if ! min_pkg_size=$(human_to_size "$2"); then
 				echo "invalid argument '$2' for option -- '$1'"
@@ -194,6 +198,8 @@ while :; do
 	shift
 done
 
+m4_include(library/term_colors.sh)
+
 if (( $# != 2 )); then
 	usage
 	exit 1
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 3e18a1a..d126ae8 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -34,6 +34,7 @@ ONLYADDNEW=0
 WITHFILES=0
 SIGN=0
 VERIFY=0
+USE_COLOR='n'
 REPO_DB_FILE=
 LOCKFILE=
 CLEAN_LOCK=0
@@ -75,6 +76,7 @@ packages to remove can be specified on the command line.\n")"
 	printf -- "$(gettext "  -s, --sign        sign database with GnuPG after update\n")"
 	printf -- "$(gettext "  -k, --key <key>   use the specified key to sign the database\n")"
 	printf -- "$(gettext "  -v, --verify      verify database's signature before update\n")"
+	printf -- "$(gettext "  -c, --color       use colors in output, similar to makepkg\n")"
 	printf -- "$(gettext "\n\
 See %s(8) for more details and descriptions of the available options.\n")" $cmd
 	printf "\n"
@@ -610,6 +612,7 @@ while (( $# )); do
 		-d|--delta) DELTA=1;;
 		-n|--new) ONLYADDNEW=1;;
 		-f|--files) WITHFILES=1;;
+		-c|--color) USE_COLOR='y';;
 		-s|--sign)
 			check_gpg
 			SIGN=1
@@ -642,6 +645,8 @@ while (( $# )); do
 	shift
 done
 
+m4_include(library/term_colors.sh)
+
 REPO_DB_FILE=${args[0]}
 if [[ -z $REPO_DB_FILE ]]; then
 	usage
-- 
1.8.2.rc1.24.g06d67b8



More information about the pacman-dev mailing list