Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Nov 2007 05:21:30 GMT
From:      Alex Kozlov <spam@rm-rf.kiev.ua>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/118114: [patch] update /usr/sbin/manctl
Message-ID:  <200711190521.lAJ5LUkh021332@www.freebsd.org>
Resent-Message-ID: <200711190530.lAJ5U15o023263@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         118114
>Category:       bin
>Synopsis:       [patch] update /usr/sbin/manctl
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Nov 19 05:30:01 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator:     Alex Kozlov
>Release:        FreeBSD 6.2
>Organization:
private
>Environment:
>Description:
- after pr115850 was commited is no longer necessary to inline .so includes in man files.
- add 9 to recognized man sections.
- change check order to prevent situation when symlink moved as hardlinks.

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

Index: src/usr.sbin/manctl/manctl.sh
@@ -35,14 +35,11 @@
 # manctl: 
 #	a utility for manipulating manual pages
 # functions:
-#	compress uncompressed man pages (elliminating .so's)
-#		this is now two-pass.  If possible, .so's
-#		are replaced with hard links
+#	compress uncompressed man pages
 #	uncompress compressed man pages
 #	purge old formatted man pages (not implemented yet)
 # Things to watch out for:
 #	Hard links - careful with g(un)zipping!
-#	.so's - throw everything through soelim before gzip!
 #	symlinks - ignore these - eg: expn is its own man page:
 #			don't want to compress this!
 #
@@ -57,7 +54,6 @@
 	echo "not implemented yet\n" 2>&1
 }
 
-
 #
 # Uncompress one page
 #
@@ -86,166 +82,36 @@
 
 	IFS=" 	"
 	case "$ext" in
-	gz|Z) 	{ 
+	gz|Z) 
 		IFS=" 	" ; set `file $pname`
-		if [ $2 != "gzip" ] ; then 
+		if [ $2 = "symbolic" ] ; then
+			# XXX skip symlinks for now
+			# Remove stale symlinks and create
+			# new to uncompressed man page?
+			echo skipping symlink $pname 1>&2
+		elif [ $2 = "gzip" ] ; then 
+			echo gunzipping page $pname 1>&2
+			temp=`mktemp -t manager` || exit 1
+			gunzip -c $pname > $temp
+			chmod u+w $pname
+			cp $temp $pname
+			chmod 444 $pname
+			mv $pname $fname.$sect
+			rm -f $temp
+		else
 			echo moving hard link $pname 1>&2
 			mv $pname $fname.$ext	# link
-		else
-			if [ $2 != "symbolic" ] ; then
-				echo gunzipping page $pname 1>&2
-				temp=`mktemp -t manager` || exit 1
-				gunzip -c $pname > $temp
-				chmod u+w $pname
-				cp $temp $pname
-				chmod 444 $pname
-				mv $pname $fname.$sect
-				rm -f $temp
-			else
-				# skip symlinks - this can be
-				# a program like expn, which is
-				# its own man page !
-				echo skipping symlink $pname 1>&2
-			fi
-		fi };;
-	*)	{
-		IFS=" 	"
-		echo skipping file $pname 1>&2
-		} ;;
-	esac
-	# reset IFS - this is important!
-	IFS=" 	"
-}
-
-
-#
-# Uncompress manpages in paths
-#
-do_uncompress()
-{
-	local	i
-	local	dir
-	local	workdir
-
-	workdir=`pwd`
-	while [ $# != 0 ] ; do
-		if [ -d $1 ] ; then
-			dir=$1
-			cd $dir
-			for i in * ; do
-				case $i in
-				*cat?)	;; # ignore cat directories
-				*)	{
-					if [ -d $i ] ; then 
-						do_uncompress $i
-					else
-						if [ -e $i ] ; then
-							uncompress_page $i
-						fi
-					fi } ;;
-				esac
-			done
-			cd $workdir
-		else
-			echo "directory $1 not found" 1>&2
 		fi
-		shift
-	done
-}
-
-#
-# Remove .so's from one file
-#
-so_purge_page()
-{
- 	local	so_entries
-	local	lines
-	local	fname
-
-	so_entries=`grep "^\.so" $1 | wc -l`
-	if [ $so_entries -eq 0 ] ; then return 0 ; fi
-
-	# we have a page with a .so in it
-	echo $1 contains a .so entry 2>&1
-	
-	# now check how many lines in the file
-	lines=`wc -l < $1`
-
-	# if the file is only one line long, we can replace it
-	# with a hard link!
-	if [ $lines -eq 1 ] ; then
-		fname=$1;
-		echo replacing $fname with a hard link
-		set `cat $fname`;
-		rm -f $fname
-		ln ../$2 $fname
-	else
-		echo inlining page $fname 1>&2
-		temp=`mktemp -t manager` || exit 1
-		cat $fname | \
-		(cd .. ; soelim ) > $temp
-		chmod u+w $fname
-		cp $temp $fname
-		chmod 444 $fname
-		rm -f $temp
-	fi
-}
-
-#
-# Remove .so entries from man pages
-#	If a page consists of just one line with a .so,
-#	replace it with a hard link
-#
-remove_so()
-{
-	local	pname
-	local	fname
-	local	sect
-
-	# break up file name
-	pname=$1
-	IFS='.' ; set $pname
-	if [ $# -lt 2 ] ; then 
-		IFS=" 	" ; echo ignoring $pname 1>&2 ; return 0 ; 
-	fi
-	# construct name and section
-	fname=$1 ; shift
-	while [ $# -gt 1 ] ; do
-		fname=$fname.$1
-		shift
-	done
-	sect=$1
-
-	IFS=" 	"
-	case "$sect" in
-	gz) 	{ echo file $pname already gzipped 1>&2 ; } ;;
-	Z)	{ echo file $pname already compressed 1>&2 ; } ;;
-	[12345678ln]*){
-		IFS=" 	" ; set `file $pname`
-		if [ $2 = "gzip" ] ; then 
-			echo moving hard link $pname 1>&2
-			mv $pname $pname.gz	# link
-		else
-			if [ $2 != "symbolic" ] ; then
-				echo "removing .so's in  page $pname" 1>&2
-				so_purge_page $pname
-			else
-				# skip symlink - this can be
-				# a program like expn, which is
-				# its own man page !
-				echo skipping symlink $pname 1>&2
-			fi
-		fi };;
-	*)	{
+		;;
+	*)
 		IFS=" 	"
 		echo skipping file $pname 1>&2
-		} ;;
+		;;
 	esac
 	# reset IFS - this is important!
 	IFS=" 	"
 }
 
-
 #
 # compress one page
 #	We need to watch out for hard links here.
@@ -272,44 +138,42 @@
 
 	IFS=" 	"
 	case "$sect" in
-	gz) 	{ echo file $pname already gzipped 1>&2 ; } ;;
-	Z)	{ echo file $pname already compressed 1>&2 ; } ;;
-	[12345678ln]*){
+	gz)	echo file $pname already gzipped 1>&2		;;
+	Z)	echo file $pname already compressed 1>&2	;;
+	[123456789ln]*)
 		IFS=" 	" ; set `file $pname`
-		if [ $2 = "gzip" ] ; then 
+		if [ $2 = "symbolic" ] ; then
+			# XXX skip symlinks for now
+			# Remove stale symlinks and create
+			# new to compressed man page?
+			echo skipping symlink $pname 1>&2
+		elif [ $2 != "gzip" ] ; then 
+			echo gzipping page $pname 1>&2
+			temp=`mktemp -t manager` || exit 1
+			cat $pname | gzip -c -- > $temp
+			chmod u+w $pname
+			cp $temp $pname
+			chmod 444 $pname
+			mv $pname $pname.gz
+			rm -f $temp
+		else
 			echo moving hard link $pname 1>&2
 			mv $pname $pname.gz	# link
-		else
-			if [ $2 != "symbolic" ] ; then
-				echo gzipping page $pname 1>&2
-				temp=`mktemp -t manager` || exit 1
-				cat $pname | \
-				(cd .. ; soelim )| gzip -c -- > $temp
-				chmod u+w $pname
-				cp $temp $pname
-				chmod 444 $pname
-				mv $pname $pname.gz
-				rm -f $temp
-			else
-				# skip symlink - this can be
-				# a program like expn, which is
-				# its own man page !
-				echo skipping symlink $pname 1>&2
-			fi
-		fi };;
-	*)	{
+		fi 
+		;;
+	*)
 		IFS=" 	"
 		echo skipping file $pname 1>&2
-		} ;;
+		;;
 	esac
 	# reset IFS - this is important!
 	IFS=" 	"
 }
 
 #
-# Compress man pages in paths
+# Compress/Uncompress man pages in paths
 #
-do_compress_so()
+do_walkdir()
 {
 	local	i
 	local	dir
@@ -322,21 +186,20 @@
 	while [ $# != 0 ] ; do
 		if [ -d $1 ] ; then
 			dir=$1
-			cd $dir
+			cd $dir || continue
 			for i in * ; do
 				case $i in
 				*cat?)	;; # ignore cat directories
-				*)	{
+				*)
 					if [ -d $i ] ; then 
-						do_compress_so $what $i
-					else 
-						if [ -e $i ] ; then
-							$what $i
-						fi
-					fi } ;;
+						do_walkdir $what $i
+					elif [ -e $i ] ; then
+						$what $i
+					fi
+					;;
 				esac
 			done
-			cd $workdir
+			cd $workdir || { echo "cannot chdir to $workdir" 1>&2 ; exit 1 ; }
 		else
 			echo "directory $1 not found" 1>&2
 		fi
@@ -357,24 +220,13 @@
 }
 
 #
-# remove .so's and do compress
-#
-do_compress()
-{
-	# First remove all so's from the pages to be compressed
-	do_compress_so remove_so "$@"
-	# now do ahead and compress the pages
-	do_compress_so compress_page "$@"
-}
-
-#
 # dispatch options
 #
 if [ $# -lt 2 ] ; then ctl_usage $0 ; fi ;
 
 case "$1" in
-	-compress)	shift ; do_compress "$@" ;;
-	-uncompress)	shift ; do_uncompress "$@" ;;
+	-compress)	shift ; do_walkdir compress_page "$@" ;;
+	-uncompress)	shift ; do_walkdir uncompress_page "$@" ;;
 	-purge)		shift ; do_purge "$@" ;;
 	*)		ctl_usage $0 ;;
 esac


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711190521.lAJ5LUkh021332>