rpms/kernel/devel/scripts sort-config,NONE,1.1

Chuck Ebbert cebbert at fedoraproject.org
Sun Aug 16 00:52:14 UTC 2009


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/devel/scripts
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv32109/scripts

Added Files:
	sort-config 
Log Message:
add sort-config script


--- NEW FILE sort-config ---
#!/bin/bash

SRC=($(ls config-* 2>/dev/null))
TGT=($(ls kernel-*/linux-*.noarch/configs/kernel-2.6.*-*.config kernel-*/linux-*.noarch/configs/kernel-2.6.*-*-debug.config 2>/dev/null))
TGT1=(${TGT[*]#kernel-*/linux-*.noarch/configs/kernel-2.6.*-})

if [ $# -lt 2 ] ; then
	echo -e "Usage:  $(basename $0) [-d] input target"
	echo -e "Sort input config file into the same order as the target"
	echo -e "      -d: show raw unsorted output with extra debug text"
	echo -e "   input: source config file" ' [' "${SRC[*]#config-}" ']'
	echo -e "  target: output arch name" ' [' "${TGT1[*]%.config}" ']'
	exit 1
fi

if [ "$1" = "-d" ] ; then
	DEBUG=1
	shift
fi

if [ -f xx00 -o -f xx01 -o -f xx99 ] ; then
	echo "WARNING! Output files named xx?? already exist."
	read -p "Press <Enter> to erase files, or Ctrl-C to exit..."
fi
rm -f xx00 xx01 xx99

SRCFILE=config-$1
[ ! -f $SRCFILE ] && echo "Input file" $SRCFILE "missing" && exit 2

TGTFILE=kernel-*/linux-*.noarch/configs/kernel-2.6.*-$2.config
[ ! -f $TGTFILE ] && echo "No target file matching" $TGTFILE "exists" && exit 2

IX=0
declare -a SAVECOMMENT

cat ${SRCFILE} | while read TEXT ; do

	LINE=
	COMMENT=
	[ -z "$TEXT" ] && TEXT='#'

	if [ "${TEXT:0:7}" = "CONFIG_" -o "${TEXT:0:9}" = "# CONFIG_" ] ; then
		LINE=$(grep -n "^$TEXT" $TGTFILE | head -1 | grep "$TEXT" | cut -f 1 -d ':')
		if [ -z "$LINE" ] ; then
			[ "$DEBUG" ] && echo "nofind      ->" "$TEXT"

			# see if option changed in output file
			OPTNAME=
			if [ "${TEXT:0:7}" = "CONFIG_" ] ; then
				OPTNAME=${TEXT%%=*}
			elif [ "${TEXT:0:9}" = "# CONFIG_" ] ; then
				OPTNAME=${TEXT%"is not set"}
				OPTNAME=${OPTNAME#\# }
			fi
			if [ "$OPTNAME" ] ; then
				[ "$DEBUG" ] && echo "looking for ->" "$OPTNAME"
				LINE=$(grep -n "$OPTNAME" $TGTFILE | head -1 | grep "$OPTNAME" | cut -f 1 -d ':')
				[ "$LINE" ] && COMMENT="# -- Next line was changed by config rules in output at line $LINE"
			fi
		fi
	else
		COMMENT="$TEXT"
		TEXT=
	fi

	[ "$DEBUG" -a "$COMMENT" ] && echo "comment     ->" "$LINE" "$COMMENT"
	[ "$DEBUG" -a "$TEXT" ]    && echo "text        ->" "$LINE" "$TEXT"

	if [ "$TEXT" ] ; then
		# we have output, make sure it has a line number
		[ -z "$LINE" ] && LINE=999999

		# print saved comments first
		if [ $IX -gt 0 ] ; then
			[ "$DEBUG" ] && echo "            ->" $IX "comments were saved"
			(( IX-- ))
			for IX in $(seq 0 $IX) ; do
				echo "$LINE":"${SAVECOMMENT[$IX]}"
			done
			unset SAVECOMMENT
			IX=0
		fi
		[ "$COMMENT" ] && echo "$LINE":"$COMMENT"
		echo "$LINE":"$TEXT"
	else
		# no output yet, save the comment
		SAVECOMMENT[$IX]="$COMMENT"
		[ "$DEBUG" ] && echo "savecomment ->" "$LINE" "${SAVECOMMENT[$IX]}"
		(( IX++ ))
	fi

done > xx99

if [ "$DEBUG" ] ; then
	cat xx99
else

	cat xx99 | sort -s -t ":" -k 1g | csplit -k -s - /^999999/ 2>/dev/null

	cat xx00 | cut -f 2- -d ':'
	if [ -s xx01 ] ; then
		echo
		echo '# ------------  UNMATCHED OPTIONS  ------------'
		echo
		cat xx01 | cut -f 2- -d ':'
	fi

fi

rm -f xx00 xx01 xx99




More information about the fedora-extras-commits mailing list