rpms/kernel/F-12/scripts sort-config,1.5,1.6
Chuck Ebbert
cebbert at fedoraproject.org
Thu Sep 17 05:07:26 UTC 2009
Author: cebbert
Update of /cvs/pkgs/rpms/kernel/F-12/scripts
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv8885
Modified Files:
sort-config
Log Message:
fix matching of impossible configs
stop dropping the last comment line
allow forcibly removing impossible configs
make looking for changed configs optional
Index: sort-config
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-12/scripts/sort-config,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- sort-config 16 Sep 2009 23:25:11 -0000 1.5
+++ sort-config 17 Sep 2009 05:07:25 -0000 1.6
@@ -5,20 +5,23 @@ TGT=($(ls kernel-*/linux-*.noarch/config
kernel-*/linux-*.noarch/configs/kernel-2.6.*-*-debug.config 2>/dev/null))
TGT1=(${TGT[*]#kernel-*/linux-*.noarch/configs/kernel-2.6.*-})
+ALL_OPTS="cdfimn"
if [ $# -lt 2 ] ; then
- echo -e "Usage:\n $(basename $0) [-dfcn] input target\n"
+ echo -e "Usage:\n $(basename $0) [-$ALL_OPTS] input target\n"
echo -e " Sort input config file into the same order as the target\n"
- echo -e " -c: insert comments about non-matching items"
+ echo -e " -c: insert comments about non-matching/impossible items"
echo -e " -d: show raw unsorted output with extra debug text"
- echo -e " -f: force output to match what is in the target config"
+ echo -e " -f: force output to match what is in the target config,"
+ echo -e " and/or remove impossible config items"
echo -e " -i: find impossible config items"
+ echo -e " -m: find changed config items"
echo -e " -n: do not sort output\n"
echo -e " input: source config file" ' [' "${SRC[*]#config-}" ']\n'
echo -e " target: output arch name" ' [' "${TGT1[*]%.config}" ']\n'
exit 1
fi
-while getopts "cdfin" OPTION ; do
+while getopts "$ALL_OPTS" OPTION ; do
case $OPTION in
c)
ADDCOMMENT=1 ;;
@@ -28,6 +31,8 @@ f)
FORCE=1 ;;
i)
FIND_IMPOSS=1 ;;
+m)
+ FIND_CHANGED=1 ;;
n)
NOSORT=1 ;;
\?)
@@ -42,12 +47,17 @@ fi
shift $((OPTIND-1))
-if [ -f xx00 -o -f xx01 -o -f xx99 -o -f xx98 ] ; then
+TEMPFILES="xx00 xx01 xx98 xx99"
+TEMPLEFT=
+for FILE in $TEMPFILES ; do
+ [ -f "$FILE" ] && TEMPLEFT="Y"
+done
+if [ "$TEMPLEFT" ] ; then
echo "WARNING! Output files named xx?? already exist." >&2
read -p "Press <Enter> to erase files, or Ctrl-C to exit..."
echo >&2
fi
-rm -f xx00 xx01 xx99 xx98
+rm -f $TEMPFILES
SRCFILE=config-$1
[ ! -f $SRCFILE ] && echo "Input file" $SRCFILE "missing" && exit 2
@@ -57,15 +67,46 @@ TGTFILE=kernel-*/linux-*.noarch/configs/
[ "$FIND_IMPOSS" ] && \
find kernel-*/*.noarch -name Kconfig\* -type f \
- | xargs grep -s -h '^config ' \
- | sed 's/^config /CONFIG_/' \
+ | xargs egrep -s -h '^[[:space:]]*(menu)?config[[:space:]]+' \
+ | sed -r 's/^[[:space:]]*(menu)?config[[:space:]]+/CONFIG_/' \
| sort | uniq >xx98
+extract_optname() {
+ # extract the option name from $TEXT, setting $OPTNAME
+ OPTNAME=
+ if [ "${TEXT:0:7}" = "CONFIG_" ] ; then
+ OPTNAME=${TEXT%%=*}
+ elif [ "${TEXT:0:9}" = "# CONFIG_" ] ; then
+ OPTNAME=${TEXT%" is not set"}
+ OPTNAME=${OPTNAME#\# }
+ fi
+}
+
+print_saved_comments() {
+ 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
+}
+
+assign_line_number() {
+ # use input line numbers if not sorting
+ [ "$NOSORT" ] && LINE=$IN
+ # make sure it has a line number
+ [ -z "$LINE" ] && LINE=999999
+}
+
IX=0
IN=0
declare -a SAVECOMMENT
-cat ${SRCFILE} | while read TEXT ; do
+cat ${SRCFILE} | {
+while read TEXT ; do
LINE=
COMMENT=
@@ -77,46 +118,52 @@ cat ${SRCFILE} | while read TEXT ; do
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
+ extract_optname
if [ "$OPTNAME" ] ; then
- for FINDTEXT in "^${OPTNAME}=" "^# ${OPTNAME} is not set" ; do
- if [ -z "$LINE" ] ; then
- [ "$DEBUG" ] && echo "looking for ->" "$FINDTEXT"
- LINE=$(grep -n "$FINDTEXT" $TGTFILE | head -1 | cut -f 1 -d ':')
- if [ "$LINE" ] ; then
- CHANGED=$(grep "$FINDTEXT" $TGTFILE | head -1)
- if [ "$FORCE" ] ; then
- TEXT="$CHANGED"
- [ "$DEBUG" ] && echo 'forced ->' "$TEXT"
- else
- if [ "$ADDCOMMENT" ] ; then
- if [ ${CHANGED:0:1} = '#' ] ; then
- NEWOPT="not set"
- else
- NEWOPT=${CHANGED#$OPTNAME}
+
+ if [ "$FIND_CHANGED" ] ; then
+ for FINDTEXT in "^${OPTNAME}=" "^# ${OPTNAME} is not set" ; do
+ if [ -z "$LINE" ] ; then
+ [ "$DEBUG" ] && echo "looking for ->" "$FINDTEXT"
+ LINE=$(grep -n "$FINDTEXT" $TGTFILE | head -1 | cut -f 1 -d ':')
+ if [ "$LINE" ] ; then
+ CHANGED=$(grep "$FINDTEXT" $TGTFILE | head -1)
+ if [ "$FORCE" ] ; then
+ TEXT=$CHANGED
+ [ "$DEBUG" ] && echo 'forced ->' "$TEXT"
+ else
+ if [ "$ADDCOMMENT" ] ; then
+ if [ ${CHANGED:0:1} = '#' ] ; then
+ NEWOPT="not set"
+ else
+ NEWOPT=${CHANGED#$OPTNAME}
+ fi
+ COMMENT="# -- Next option changed to \"${NEWOPT}\" at target line $LINE --"
fi
- COMMENT="# -- Next option changed to \"${NEWOPT}\" at target line $LINE --"
fi
fi
fi
+ done
+ fi
+
+ if [ "$FIND_IMPOSS" -a -z "$LINE" -a -z "$COMMENT" ] ; then
+ POSSIBLE=$(grep -n "^$OPTNAME" xx98)
+ if [ -z "$POSSIBLE" ] ; then
+ if [ "$ADDCOMMENT" ] ; then
+ COMMENT="# -- Next option is impossible --"
+ elif [ "$FORCE" ] ; then
+ [ "$DEBUG" ] && echo 'impossible ->' "$TEXT"
+ TEXT=""
+ fi
fi
- done
- if [ -z "$LINE" -a -z "$COMMENT" -a "$FIND_IMPOSS" ] ; then
- IMPOSS=$(grep -n "$OPTNAME" xx98)
- [ -z "$IMPOSS" ] && COMMENT="# -- Next option is impossible --"
fi
+
fi
fi
else
+ # not a config variable
COMMENT="$TEXT"
TEXT=
fi
@@ -126,41 +173,37 @@ cat ${SRCFILE} | while read TEXT ; do
if [ "$TEXT" ] ; then
- # use input line numbers if not sorting
- [ "$NOSORT" ] && LINE=$IN
- # make sure it has a line number
- [ -z "$LINE" ] && LINE=999999
+ assign_line_number
- # 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
+ # print the saved comments first
+ print_saved_comments
+ # now print the latest comment and text
[ "$COMMENT" ] && echo "$LINE":"$COMMENT"
echo "$LINE":"$TEXT"
- else
+ elif [ "$COMMENT" ] ; then
# no output yet, save the comment
SAVECOMMENT[$IX]="$COMMENT"
- [ "$DEBUG" ] && echo "savecomment ->" "$LINE" "${SAVECOMMENT[$IX]}"
- (( IX++ ))
+ let IX++
+ [ "$DEBUG" ] && echo 'savecomment (#'${IX}')'
fi
- ((IN++))
+ let IN++
-done > xx99
+done
+assign_line_number
+print_saved_comments
+[ "$DEBUG" ] && echo "$IN lines read from input"
+} >xx99
if [ "$DEBUG" ] ; then
+ # just show the raw output with debug info, then exit
cat xx99
else
+ # split output into two files, for matched and unmatched items
cat xx99 | sort -s -t ":" -k 1g | csplit -k -s - /^999999/ 2>/dev/null
cat xx00 | cut -f 2- -d ':'
@@ -173,4 +216,4 @@ else
fi
-rm -f xx00 xx01 xx99 xx98
+rm -f $TEMPFILES
More information about the fedora-extras-commits
mailing list