[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: (summary?) Re: [RFC] Support for using multiple CDs during installation



Here'a an attempt at cancelable progress bars for apt-setup. If apt's
bug gets fixed the progress bar will also include download speed
and time estimates.

The behavior when cancel is pressed could be improved, it currently
behaves the same as if the apt source failed to validate, which
typically loops back and lets the user try it again.

I ran out of time to do any testing.

-- 
see shy jo
Index: debian/changelog
===================================================================
--- debian/changelog	(revision 49947)
+++ debian/changelog	(working copy)
@@ -1,3 +1,20 @@
+apt-setup (1:0.31) UNRELEASED; urgency=low
+
+  * Allocate 100 steps on the progress bar for each generator, and
+    set the progress absolutely to the next position after calling each
+    generator. This allows generators to step the progress bar up to 100
+    steps if desired.
+  * Export PROGRESS_FROM and PROGRESS_TO to generators, giving the
+    starting and ending progress bar position for that generator. This can
+    be used by generators that need an absolute progress bar position for
+    calling debconf-apt-progress.
+  * apt-setup-verify: Use debconf-apt-progress and add a way for generators
+    to specify how it should advance the progress bar.
+  * Allow the progress bar to be canceled (needs debconf 1.5.17 for proper
+    operation).
+
+ -- Joey Hess <joeyh@debian.org>  Thu, 01 Nov 2007 17:17:18 -0400
+
 apt-setup (1:0.30) unstable; urgency=low
 
   [ Frans Pop ]
Index: apt-setup
===================================================================
--- apt-setup	(revision 49947)
+++ apt-setup	(working copy)
@@ -34,14 +34,19 @@
 }
 
 gencount=`ls "$gendir"/* | wc -l`
-db_progress START 0 $gencount apt-setup/progress/title
+db_capb backup progresscancel
+db_progress START 0 $(expr "$gencount" * 100) apt-setup/progress/title
 
+PROGRESS_FROM=0
+PROGRESS_TO=100
+export PROGRESS_FROM
+export PROGRESS_TO
 for generator in $gendir/*; do
 	base=$(basename $generator | sed 's/[0-9]*//')
 	base="${base%%.*}"
 	if ! db_progress INFO apt-setup/progress/$base; then
 		db_subst apt-setup/progress/fallback SCRIPT "$base"
-		db_progress INFO apt-setup/progress/fallback
+		db_progress INFO apt-setup/progress/fallback || true
 	fi
 	
 	tmp=$($chroot $ROOT tempfile)
@@ -63,6 +68,7 @@
 		log "$generator backed up"
 		rm -f $ROOT$tmp $ROOT/etc/apt/sources.list.new
 		db_progress STOP
+		db_capb backup
 		exit 10
 		;;
 	    *)
@@ -70,7 +76,10 @@
 		;;
 	esac
 	rm -f $ROOT$tmp
-	db_progress STEP 1
+
+	db_progress SET $PROGRESS_TO || true
+	PROGRESS_FROM=$PROGRESS_TO
+	PROGRESS_TO=$(expr $PROGRESS_FROM + 100)
 done
 mv $ROOT/etc/apt/sources.list.new $ROOT/etc/apt/sources.list
 if [ -s $ROOT/etc/apt/apt.conf.new ]; then
@@ -80,3 +89,4 @@
 fi
 
 db_progress STOP
+db_capb backup
Index: apt-setup-verify
===================================================================
--- apt-setup-verify	(revision 49947)
+++ apt-setup-verify	(working copy)
@@ -14,6 +14,13 @@
 file="$1"
 saveto="$2"
 
+while [ -n "$1" ] && [ "$1" != "--" ]; do
+	shift 1
+done
+if [ "$1" = "--" ]; then
+	shift 1
+fi
+
 logoutput=""
 if [ "$CATCHLOG" ]; then
 	logoutput="log-output -t apt-setup"
@@ -32,15 +39,19 @@
 
 valid () {
 	line="$1"
+	shift 1
 
 	[ "${line%%:*}" = "deb cdrom" ] || return 0
 
 	tmp=$($chroot $ROOT tempfile)
 	echo "$line" > $ROOT$tmp
-	
-	if $logoutput $chroot $ROOT apt-get -o APT::Get::List-Cleanup=false \
-		-o Dir::Etc::sourcelist=$tmp $ASV_TIMEOUT update
-	then
+	code=0
+	$logoutput $chroot $ROOT debconf-apt-progress "${@:---no-progress}"
+		apt-get -o APT::Get::List-Cleanup=false \
+			-o Dir::Etc::sourcelist=$tmp $ASV_TIMEOUT update || code = $?
+	if [ "$code" == 30 ]; then
+		exit 30 # canceled
+	elif [ "$code" == 0 ] then
 		rm -f $ROOT$tmp
 	else
 		rm -f $ROOT$tmp
@@ -65,13 +76,22 @@
 			saveline ""
 		fi
 
-		if [ -z "$NOTEST" ] && valid "$line"; then
+		if [ -z "$NOTEST" ] && valid "$line" "$@"; then
 			gooditems=$(expr "$gooditems" + 1)
 			saveline "$line"
 		else
 			saveline "# Line commented out by installer because it failed to verify:"
 			saveline "#$line"
 		fi
+		
+		# shift away remaining options to avoid passing them
+		# to debconf-apt-progress a second time.
+		while [ -n "$1" ] && [ "$1" != "--" ]; do
+			shift 1
+		done
+		if [ "$1" = "--" ]; then
+			shift 1
+		fi
 	else
 		# Ignore leading empty lines
 		if [ $items != 0 ] || [ "$line" ]; then
Index: generators/50mirror
===================================================================
--- generators/50mirror	(revision 49947)
+++ generators/50mirror	(working copy)
@@ -184,7 +184,7 @@
 
 	echo "deb $protocol://$hostname$directory $codename $dists" > $file
 	
-	if apt-setup-verify $file; then
+	if apt-setup-verify $file -- --from $PROGRESS_FROM --to $PROGRESS_TO; then
 		done=1
 	else
 		db_set apt-setup/mirror/error Retry
Index: generators/91security
===================================================================
--- generators/91security	(revision 49947)
+++ generators/91security	(working copy)
@@ -36,7 +36,7 @@
 else
 	CODE=0
 	export ASV_TIMEOUT="-o Acquire::http::Timeout=30"
-	if ! apt-setup-verify $file; then
+	if ! apt-setup-verify $file --from $PROGRESS_FROM --to $PROGRESS_TO; then
 		db_subst apt-setup/service-failed HOST "$host"
 		db_input critical apt-setup/service-failed || true
 		if ! db_go; then
Index: generators/92volatile
===================================================================
--- generators/92volatile	(revision 49947)
+++ generators/92volatile	(working copy)
@@ -42,7 +42,7 @@
 else
 	CODE=0
 	export ASV_TIMEOUT="-o Acquire::http::Timeout=30"
-	if ! apt-setup-verify $file; then
+	if ! apt-setup-verify $file --from $PROGRESS_FROM --to $PROGRESS_TO; then
 		db_subst apt-setup/service-failed HOST "$host"
 		db_input critical apt-setup/service-failed || true
 		if ! db_go; then
Index: README
===================================================================
--- README	(revision 49947)
+++ README	(working copy)
@@ -6,11 +6,12 @@
 (and comments) to.
 
 After the generator finishes writing the file, apt-setup-verify will be run
-on it to verify that each line of the sources sources works, and it will be
+on it to verify that each line of the sources works, and it will be
 added to the sources.list. Generators can also run apt-setup-verify
 themselves and do their own error recovery if it fails. apt-setup-verify
 tests each line of the file and comments out lines that do not work, and
-exits nonzero if all deb and deb-src lines in the file failed.
+exits zero if all deb and deb-src lines in the file are ok, 30 if the
+verification process was canceled, and otherwise nonzero on error.
 
 Generators should add both "deb" lines and corresponding
 deb-src lines to the sources.list. apt-setup-verify will handle commenting
@@ -25,6 +26,17 @@
 progress template name, so that different scripts that share the same
 purpose can easily be written.
 
+Generators can advance the progress bar from PROGRESS_FROM up to
+PROGRESS_TO, or it will be moved to the next step before the next
+generator is started.
+
+apt-setup-verify runs apt-get update inside debconf-apt-progress, to update
+the progress bar with apt progress information. By default,
+debconf-apt-progress is not allowed to move the progress bar. To override
+this, pass apt-setup-verify options after "--"; these options will be
+passed on to debconf-apt-progress. For example:
+	apt-setup-verify file -- --from 1 --to 100
+
 Note that apt-setup and its generators may be run against some other system
 in a chroot. (i.e., when installing Debian.) If apt-setup is running this
 way, then ROOT will be set to the root of the chroot that it is acting on

Attachment: signature.asc
Description: Digital signature


Reply to: