svn commit: r216388 - user/dougb/portmaster
Doug Barton
dougb at FreeBSD.org
Sun Dec 12 00:07:56 UTC 2010
Author: dougb
Date: Sun Dec 12 00:07:56 2010
New Revision: 216388
URL: http://svn.freebsd.org/changeset/base/216388
Log:
Introduce get_answer() to handle processing of y/n questions that we
want to be able to override on the command line with either -y or -n
Utilize this new function to provide -y|n support for the following:
-e, -s, --clean-distfiles, --clean-packages, --check-port-dbdir, and
--check-depends. This also allows me to deprecate the horribly hacky
--clean-distfiles-all and --clean-packages-all in favor of -y.
Sort usage() to group features that use -y|n support, which also
better reflects "do stuff" features vs. "list stuff"
Update recommendations to use --clean-distfiles to include [-y], not [-all]
For -s, if the user chooses not to delete the stale port flip the question
about continuing to list it as a dependency, and correspondingly flip the
default. This has no effect on -y (the condition is never reached) but
allows -n to work reliably, and preserving the same default action (to
delete the empty +REQUIRED_BY) reduces POLA.
Modified:
user/dougb/portmaster/portmaster
Modified: user/dougb/portmaster/portmaster
==============================================================================
--- user/dougb/portmaster/portmaster Sun Dec 12 00:07:27 2010 (r216387)
+++ user/dougb/portmaster/portmaster Sun Dec 12 00:07:56 2010 (r216388)
@@ -295,22 +295,20 @@ usage () {
echo ''
echo "${0##*/} -[l|L]"
echo ''
- echo "${0##*/} [-b D|d] -e <name/glob of a single port directory in $pdb>"
- echo "${0##*/} [-b D|d] -s"
+ echo "${0##*/} --list-origins"
echo ''
echo "${0##*/} [--force-config|-G] [-aftv] -F"
echo ''
- echo "${0##*/} [-t] --clean-distfiles"
- echo "${0##*/} [-t] --clean-distfiles-all"
+ echo "${0##*/} [-n|y] [-b D|d] -e <name/glob of a single port directory in $pdb>"
+ echo "${0##*/} [-n|y] [-b D|d] -s"
echo ''
- echo "${0##*/} [--index] --clean-packages"
- echo "${0##*/} [--index] --clean-packages-all"
+ echo "${0##*/} [-n|y] [-t] --clean-distfiles"
echo ''
- echo "${0##*/} --check-depends"
+ echo "${0##*/} [-n|y] [--index] --clean-packages"
echo ''
- echo "${0##*/} --check-port-dbdir [-v]"
+ echo "${0##*/} [-n|y] --check-depends"
echo ''
- echo "${0##*/} --list-origins"
+ echo "${0##*/} [-n|y] [-v] --check-port-dbdir"
echo ''
echo "${0##*/} -h|--help"
echo "${0##*/} --version"
@@ -375,11 +373,11 @@ usage () {
echo '[--force-config|-G] [-aftv] -F fetch distfiles only'
echo ''
echo '[-t] --clean-distfiles offer to delete stale distfiles'
- echo '[-t] --clean-distfiles-all delete stale distfiles without prompting'
+ echo '[-t] -y --clean-distfiles delete stale distfiles without prompting'
echo ' with -t distfile is valid from any port, not just those installed'
echo ''
echo '[--index] --clean-packages offer to delete stale packages'
- echo '[--index] --clean-packages-all delete stale packages without prompting'
+ echo '[--index] -y --clean-packages delete stale packages without prompting'
echo ''
echo '--check-depends cross-check and update dependency information for all ports'
echo ''
@@ -504,9 +502,11 @@ for var in "$@" ; do
--help) usage 0 ;;
--version) version ; exit 0 ;;
--clean-distfiles) CLEAN_DISTFILES=clean_distfiles ;;
- --clean-distfiles-all) CLEAN_DISTFILES=clean_distfiles_all ; ALL=cda ;;
+ --clean-distfiles-all) echo "===>>> The -all form is deprecated, please use -y instead"
+ CLEAN_DISTFILES=clean_distfiles ; PM_YES=yopt ;;
--clean-packages) CLEAN_PACKAGES=clean_packages ;;
- --clean-packages-all) CLEAN_PACKAGES=clean_packages_all ; ALL=cdp ;;
+ --clean-packages-all) echo "===>>> The -all form is deprecated, please use -y instead"
+ CLEAN_PACKAGES=clean_packages ; PM_YES=yopt ;;
--check-depends) CHECK_DEPENDS=check_depends ;;
--check-port-dbdir) CHECK_PORT_DBDIR=check_port_dbdir ;;
--list-origins) LIST_ORIGINS=list_origins ;;
@@ -832,6 +832,38 @@ check_dependency_files () {
return 0
}
+# Takes a default value and message as input
+# Return values:
+# 0 - Answer is "Yes"
+# 1 - Answer is "No"
+#
+get_answer () {
+ local default answer
+
+ default=$1 ; shift
+
+ 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
+
+ case "$answer" in
+ [yY]) return 0 ;;
+ [nN]) return 1 ;;
+ '') [ "$default" = y ] && return 0 || return 1 ;;
+ *) echo " ===>>> $answer is not a valid response" ; echo '' ;;
+ esac
+ done
+}
+
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
@@ -871,20 +903,8 @@ IFS='
echo " ===>>> but there is no installed version"
echo ''
if [ -n "$CHECK_DEPENDS" ]; then
- if [ -z "$PM_YES" -a -z "$NO_ACTION" ]; then
- echo -n " ===>>> Delete this dependency data? y/n [n] "
- read answer
- echo ''
- else
- if [ -n "$PM_YES" ]; then
- answer=y
- elif [ -n "$NO_ACTION" ]; then
- answer=n
- fi
- fi
- case "$answer" in
- [yY]) unset prev_line line ; continue ;;
- esac
+ get_answer n Delete this dependency data
+ case "$?" in 0) unset prev_line line ; continue ;; esac
else
echo " ===>>> Try ${0##*/} --check-depends"
echo ''
@@ -1182,16 +1202,11 @@ if [ -n "$CLEAN_DISTFILES" ]; then
for df in `find $DISTDIR -type f | sort`; do
f=${df#$DISTDIR}
if ! grep -ql $f $DI_FILES; then
- if [ -z "$ALL" ]; then
- echo -n "===>>> Delete stale file: ${f}? y/n [y] "
- read answer
- else
- answer=y
- fi
- case "$answer" in
- [yY]|'') echo " Deleting $f" ; echo ''
- pm_unlink $df ;;
- *) continue ;;
+ get_answer n Delete stale file: ${f}
+ case "$?" in
+ 0) echo " Deleting $f" ; echo ''
+ pm_unlink $df ;;
+ *) continue ;;
esac
fi
done
@@ -1227,14 +1242,13 @@ if [ -n "$CLEAN_PACKAGES" ]; then
if [ -n "$port_ver" ]; then
if [ "${port_ver}.tbz" = "${package##*/}" ]; then
echo "===>>> ${package##*/} is up to date"
- if [ -z "$ALL" ]; then
+ if [ -z "$PM_YES" ]; then
if [ ! -d "${pdb}/${pkg_dir}" ]; then
echo " ===>>> $pkg_dir is not installed"
- echo -n " ===>>> Delete stale package: ${package##*/}? y/n [y] "
- read answer
- case "$answer" in
- [yY]|'') echo " ===>>> Deleting $package"
- pm_unlink_s $package ;;
+ get_answer y Delete stale package: ${package##*/}
+ case "$?" in
+ 0) echo " ===>>> Deleting $package"
+ pm_unlink_s $package ;;
esac
fi
fi
@@ -1256,17 +1270,11 @@ if [ -n "$CLEAN_PACKAGES" ]; then
echo " ===>>> Path: ${package}"
- if [ -z "$ALL" ]; then
- echo -n " ===>>> Delete stale package: ${package##*/}? y/n [y] "
- read answer
- else
- answer=y
- fi
- case "$answer" in
- [yY]|'') echo " ===>>> Deleting $package"
- pm_unlink_s $package ;;
+ get_answer n Delete stale package: ${package##*/}
+ case "$?" in
+ 0) echo " ===>>> Deleting $package"
+ pm_unlink_s $package ;;
esac
-
done
echo '' ; echo ''
@@ -1384,11 +1392,8 @@ if [ -n "$CHECK_PORT_DBDIR" ]; then
*:${dbdir}:*) pm_v "Ok" ;;
*) pm_v
echo " ===>>> $dbdir does not seem to be installed"
- echo -n " ===>>> Delete ${dir}? y/n [n] "
- read answer
- case "$answer" in
- [yY]) pm_rm_s -rf $dir ;;
- esac
+ get_answer n Delete ${dir}
+ case "$?" in 0) pm_rm_s -rf $dir ;; esac
echo '' ;;
esac
done
@@ -1749,7 +1754,7 @@ set_distfiles_and_subdir () {
echo "===>>> $port_subdir does not exist, therefore we"
echo ' will assume that all relevant distfiles are gone.'
echo ''
- echo " Try ${0##*/} --clean-distfiles[-all] for a full cleanup"
+ echo " Try ${0##*/} [-y] --clean-distfiles for a full cleanup"
echo ''
return 3
fi
@@ -1813,7 +1818,7 @@ delete_all_distfiles () {
case "$rc" in
1) echo ''
echo "===>>> No $pd/$origin exists to find the distfile list"
- echo " Try ${0##*/} --clean-distfiles[-all] for a full cleanup"
+ echo " Try ${0##*/} [-y] --clean-distfiles for a full cleanup"
echo ''
if [ -n "$dist_list_files" ]; then
local answer f
@@ -1938,10 +1943,9 @@ if [ -n "$EXPUNGE" ]; then
dep=${dep%/+CON*} ; echo " ${dep##*/}"
done
echo ''
- echo -n "===>>> Delete this dependency data? y/n [n] "
- read answer
- case "$answer" in
- [yY]) for f in $deplist; do
+ get_answer n Delete this dependency data
+ case "$?" in
+ 0) for f in $deplist; do
update_contents delete $f $origin
done ;;
*) exit 1 ;;
@@ -1984,10 +1988,9 @@ if [ -n "$CLEAN_STALE" ]; then
pkg_info $iport
- echo -n "===>>> ${iport} is no longer depended on, delete? y/n [n] "
- read answer
- case "$answer" in
- [yY]) [ -n "$BACKUP" ] && { init_packages ; pm_pkg_create $pbu $iport; }
+ get_answer 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
@@ -1995,11 +1998,10 @@ if [ -n "$CLEAN_STALE" ]; then
pm_pkg_delete_s -f $iport || fail 'pkg_delete failed'
exec $0 -s $ARGS ;;
- *) echo -n " ===>>> Keep listing $iport as a dependency? y/n [n] "
- read answer
- case "$answer" in
- [yY]) no_del_list="${no_del_list}${iport}:" ;;
- *) pm_unlink_s $file ;;
+ *) get_answer y Delete this dependency data
+ case "$?" in
+ 0) pm_unlink_s $file ;;
+ *) no_del_list="${no_del_list}${iport}:" ;;
esac ;;
esac
done
More information about the svn-src-user
mailing list