svn commit: r216896 - user/dougb/portmaster
Doug Barton
dougb at FreeBSD.org
Mon Jan 3 00:11:11 UTC 2011
Author: dougb
Date: Mon Jan 3 00:11:10 2011
New Revision: 216896
URL: http://svn.freebsd.org/changeset/base/216896
Log:
Add an error check for -y and -n both supplied
Add get_answer_g(), a generic version of the previous get_answer()
Use this function to wrap all of the remaining cases of user input
Convert get_answer() to get_answer_yn() and call get_answer_g() if
we need to prompt the user, otherwise use the same logic to handle
the -y and -n options.
Update the callers of the former get_answer() to match.
Modified:
user/dougb/portmaster/portmaster
Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster Sun Jan 2 23:38:05 2011 (r216895)
+++ user/dougb/portmaster/portmaster Mon Jan 3 00:11:10 2011 (r216896)
@@ -680,6 +680,7 @@ done
shift $(( $OPTIND - 1 ))
[ -n "$UNATTENDED" ] && fail 'The -u option has been deprecated'
+[ -n "$PM_YES" -a -n "$NO_ACTION" ] && fail 'The -y and -n options are mutually exclusive'
[ -n "$PM_EXCL" ] && export PM_EXCL
@@ -886,38 +887,57 @@ check_dependency_files () {
return 0
}
-# Takes a default value and message as input
+# Takes default value, optional value, and message as input
# Return values:
-# 0 - Answer is "Yes"
-# 1 - Answer is "No"
+# 0 - Default value chosen
+# 1 - Optional value chosen
#
-get_answer () {
- local default answer
+get_answer_g () {
+ local default option answer
- default=$1 ; shift
+ default=$1 ; option=$2 ; shift 2
while : ; do
- if [ -z "$PM_YES" -a -z "$NO_ACTION" ]; then
- echo -n " ===>>> ${*}? y/n [${default}] "
- read answer
- echo ''
- else
- if [ -n "$PM_YES" ]; then
- answer=y
- elif [ -n "$NO_ACTION" ]; then
- answer=n
- fi
- fi
+ echo -n "${*} [${default}] "
+ read answer
+ echo ''
+
+ case "$answer" in
+ [A-Z]) answer=`echo $answer | tr [:upper:] [:lower:]` ;;
+ esac
case "$answer" in
- [yY]) return 0 ;;
- [nN]) return 1 ;;
- '') [ "$default" = y ] && return 0 || return 1 ;;
+ ${default}|'') return 0 ;;
+ ${option}) return 1 ;;
*) echo " ===>>> $answer is not a valid response" ; echo '' ;;
esac
done
}
+# Takes a default value and message as input
+# Return values:
+# 0 - Answer is "Yes"
+# 1 - Answer is "No"
+#
+get_answer_yn () {
+ local default option
+
+ default=$1 ; shift
+
+ [ "$default" = 'y' ] && option=n || option=y
+
+ if [ -z "$PM_YES" -a -z "$NO_ACTION" ]; then
+ get_answer_g $default $option "${*}? y/n"
+ case "${?}${default}" in
+ 0y|1n) return 0 ;;
+ 0n|1y) return 1 ;;
+ esac
+ else
+ [ -n "$PM_YES" ] && return 0
+ return 1
+ fi
+}
+
update_contents () {
local IFS delete contents origin n_port old_origin iport new_cont
local o_seen line d_missing d_origin d_iport prev_line answer
@@ -957,7 +977,7 @@ IFS='
echo " ===>>> but there is no installed version"
echo ''
if [ -n "$CHECK_DEPENDS" ]; then
- get_answer n Delete this dependency data
+ get_answer_yn n Delete this dependency data
case "$?" in 0) unset prev_line line ; continue ;; esac
else
echo " ===>>> Try ${0##*/} --check-depends"
@@ -1223,7 +1243,7 @@ if [ -n "$CLEAN_DISTFILES" ]; then
for df in `find $DISTDIR -type f | sort`; do
f=${df#$DISTDIR}
if ! grep -ql $f $DI_FILES; then
- get_answer n Delete stale file: ${f}
+ get_answer_yn n Delete stale file: ${f}
case "$?" in
0) echo " Deleting $f" ; echo ''
pm_unlink $df ;;
@@ -1266,7 +1286,7 @@ if [ -n "$CLEAN_PACKAGES" ]; then
if [ -z "$PM_YES" ]; then
if [ ! -d "${pdb}/${pkg_dir}" ]; then
echo " ===>>> $pkg_dir is not installed"
- get_answer y Delete stale package: ${package##*/}
+ get_answer_yn y Delete stale package: ${package##*/}
case "$?" in
0) echo " ===>>> Deleting $package"
pm_unlink_s $package ;;
@@ -1291,7 +1311,7 @@ if [ -n "$CLEAN_PACKAGES" ]; then
echo " ===>>> Path: ${package}"
- get_answer n Delete stale package: ${package##*/}
+ get_answer_yn n Delete stale package: ${package##*/}
case "$?" in
0) echo " ===>>> Deleting $package"
pm_unlink_s $package ;;
@@ -1413,7 +1433,7 @@ if [ -n "$CHECK_PORT_DBDIR" ]; then
*:${dbdir}:*) pm_v "Ok" ;;
*) pm_v
echo " ===>>> $dbdir does not seem to be installed"
- get_answer n Delete ${dir}
+ get_answer_yn n Delete ${dir}
case "$?" in 0) pm_rm_s -rf $dir ;; esac
echo '' ;;
esac
@@ -1647,11 +1667,8 @@ pm_pkg_create () {
echo "===>>> Ignore this error [i]"
echo "===>>> Abort [a]"
echo ''
- echo -n "===>>> How would you like to proceed? [i] "
- local answer ; read answer
- case "$answer" in
- [aA]) fail "Package creation failed for $2" ;;
- esac
+ get_answer_g i a "===>>> How would you like to proceed?"
+ case "$?" in 1) fail "Package creation failed for $2" ;; esac
fi
}
@@ -1736,11 +1753,10 @@ find_and_delete_distfiles () {
continue
fi
- echo -n "===>>> Delete $file? y/n [n] "
- read answer
- case "$answer" in
- [yY]) pm_unlink $file ;;
- *) distfiles_checked="${distfiles_checked}${file}:" ;;
+ get_answer_g n y "===>>> Delete $file? y/n"
+ case "$?" in
+ 1) pm_unlink $file ;;
+ 0) distfiles_checked="${distfiles_checked}${file}:" ;;
esac ;;
esac
done
@@ -1812,11 +1828,10 @@ delete_stale_distfiles () {
continue
fi
- echo -n "===>>> Delete $file? y/n [n] "
- read answer
- case "$answer" in
- [yY]) pm_unlink $file ;;
- *) distfiles_checked="${distfiles_checked}${file}:" ;;
+ get_answer_g n y "===>>> Delete $file? y/n"
+ case "$?" in
+ 1) pm_unlink $file ;;
+ 0) distfiles_checked="${distfiles_checked}${file}:" ;;
esac
done
fi
@@ -1848,12 +1863,11 @@ delete_all_distfiles () {
if [ -n "$dist_list_files" ]; then
local answer f
+ answer=y
if [ -z "$ALWAYS_SCRUB_DISTFILES" ]; then
echo "===>>> However, the list of files in $dist_list"
- echo -n " should be current. Delete the files on this list? y/n [n] "
- read answer
- else
- answer=y
+ get_answer_g n y " should be current. Delete the files on this list? y/n"
+ case "$?" in 0) answer=n ;; esac
fi
case "$answer" in
@@ -1875,15 +1889,11 @@ delete_all_distfiles () {
delete_all=delete_all
else
echo "===>>> Delete old and new distfiles for $origin"
- echo -n " without prompting? y/n [n] "
- local answer ; read answer
- case "$answer" in
- [yY]) delete_all=delete_all2 ;;
- *) echo -n "===>>> Delete the current distfiles? y/n [n] "
- read answer
- case "$answer" in
- [yY]) delete_current=delete_current ;;
- esac ;;
+ get_answer_g n y " without prompting? y/n"
+ case "$?" in
+ 1) delete_all=delete_all2 ;;
+ 0) get_answer_g n y "===>>> Delete the current distfiles? y/n"
+ case "$?" in 1) delete_current=delete_current ;; esac ;;
esac
fi
@@ -1968,7 +1978,7 @@ if [ -n "$EXPUNGE" ]; then
dep=${dep%/+CON*} ; echo " ${dep##*/}"
done
echo ''
- get_answer n Delete this dependency data
+ get_answer_yn n Delete this dependency data
case "$?" in
0) for f in $deplist; do
update_contents delete $f $origin
@@ -2012,7 +2022,7 @@ if [ -n "$CLEAN_STALE" ]; then
pkg_info $iport
- get_answer n ${iport} is no longer depended on, delete
+ get_answer_yn n ${iport} is no longer depended on, delete
case "$?" in
0) [ -n "$BACKUP" ] && { init_packages ; pm_pkg_create $pbu $iport; }
[ -z "$DONT_SCRUB_DISTFILES" ] && { delete_all_distfiles $origin; delete_dist_list; }
@@ -2021,7 +2031,7 @@ if [ -n "$CLEAN_STALE" ]; then
pm_pkg_delete_s -f $iport || fail 'pkg_delete failed'
exec $0 -s $ARGS ;;
- *) get_answer y Delete this dependency data
+ *) get_answer_yn y Delete this dependency data
case "$?" in
0) pm_unlink_s $file ;;
*) no_del_list="${no_del_list}${iport}:" ;;
@@ -2069,12 +2079,11 @@ check_interactive () {
echo ''
echo "===>>> +IGNOREME file is present for $1"
fi
-
- echo '' ; echo -n "===>>> Update ${1}${update_to}? y/n [y] "
- local answer ; read answer
- case "$answer" in
- [yY]|'') INTERACTIVE_YES="${INTERACTIVE_YES}${1}:" ;;
- *) INTERACTIVE_NO="${INTERACTIVE_NO}${1}:" ; return 1 ;;
+ echo ''
+ get_answer_g y n "===>>> Update ${1}${update_to}? y/n"
+ case "$?" in
+ 0) INTERACTIVE_YES="${INTERACTIVE_YES}${1}:" ;;
+ 1) INTERACTIVE_NO="${INTERACTIVE_NO}${1}:" ; return 1 ;;
esac
return 0
}
@@ -2489,11 +2498,9 @@ post_first_pass () {
echo ''
echo "===>>> The following actions will be taken if you choose to proceed:"
echo -e "$build_l"
- echo -n "===>>> Proceed? y/n [y] "
- read answer
- case "$answer" in
- [yY]|'') ;;
- *) echo ''
+ get_answer_g y n "===>>> Proceed? y/n"
+ case "$?" in
+ 1) echo ''
echo "===>>> If you would like to upgrade or install some, but not"
echo " all of the above try adding '-i' to the command line."
safe_exit 1 ;;
@@ -2754,16 +2761,12 @@ if [ "$$" -eq "$PM_PARENT_PID" -a -z "$S
files=`find $pdb -type f -name PM_UPGRADE_DONE_FLAG`
if [ -n "$files" ]; then
echo "===>>> There are 'install complete' flags from a previous"
- echo -n " -[rf] run of ${0##*/}, delete them? y/n [n] "
- read answer
- case "$answer" in
- [yY]) pm_sv Deleting \'install complete\' flags
+ get_answer_g n y " -[rf] run of ${0##*/}, delete them? y/n"
+ case "$?" in
+ 1) pm_sv Deleting \'install complete\' flags
pm_find_s $pdb -type f -name PM_UPGRADE_DONE_FLAG -delete ;;
- *) echo -n "===>>> Enable the -R option? y/n [n] "
- read answer
- case "$answer" in
- [yY]) RESTART=Ropt ; ARGS="-R $ARGS" ;;
- esac ;;
+ 0) get_answer_g n y "===>>> Enable the -R option? y/n"
+ case "$?" in 1) RESTART=Ropt ; ARGS="-R $ARGS" ;; esac ;;
esac
fi
fi
@@ -2985,11 +2988,10 @@ if [ -e "$pdb/$upg_port/+IGNOREME" ]; th
echo ''
echo "===>>> $upg_port has an +IGNOREME file"
echo ''
- echo -n "===>>> Update anyway? y/n [n] "
- read answer
- case "$answer" in
- [yY]) ;; # Let it build
- *) CUR_DEPS="${CUR_DEPS}${upg_port}:${portdir}:"
+ get_answer_g n y "===>>> Update anyway? y/n"
+ case "$?" in
+ 1) ;; # Let it build
+ 0) CUR_DEPS="${CUR_DEPS}${upg_port}:${portdir}:"
if [ ${dep_of_deps:-0} -gt 0 ]; then
dep_of_deps=$(( $dep_of_deps - 1 ))
[ -n "$PM_FIRST_PASS" ] &&
More information about the svn-src-user
mailing list