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