My version of the "runme" script have evolved slightly since then. Now have
two related extensions
--batch Batch mode operation
--exclude Exclude a named patch
I can try to separate the two in different patches if you like, but I have
not yet done so.
Attached you find two versions of the combined patch. One normal including
changes in indentation, and one "diff -w" that better shows the actual
changes.
Regards
Henrik
On Mondayen den 25 March 2002 11.11, Harald Welte wrote:
> On Tue, Feb 19, 2002 at 04:43:12PM +0100, Henrik Nordstrom wrote:
> > Attached you will find a small patch to runme, to allow runme to be
> > used in batch mode, not asking for user input unless it has to.
>
> Hi!
>
> I'm now convinced that we should add this feature.
>
> However, your patch doesn't apply against recent versions of the 'runme'
> file.
>
> Could you please send an updated version of your patch? Thanks.
Index: runme
===================================================================
RCS file: /cvsroot/netfilter/userspace/patch-o-matic/runme,v
retrieving revision 1.22
diff -u -w -r1.22 runme
--- runme 26 Feb 2002 13:31:56 -0000 1.22
+++ runme 25 Mar 2002 11:32:38 -0000
@@ -509,6 +509,9 @@
CURRENT=`expr $CURRENT + 1`
if [ $CURRENT -gt $# ];
then
+ if [ $BATCH ]; then
+ return
+ fi
printheader "$PROCESSED"
ANSWER=""
while [ ! $ANSWER ]
@@ -599,6 +602,16 @@
echo The $SUITE/$BASE ${PROTO:+$PROTO } patch:
if [ -f $THIS_PATCH.help ]; then while read LINE; do echo " $LINE"; done < $THIS_PATCH.help; fi
ANSWER=""
+ if [ $BATCH ]; then
+ if test_patch $THIS_PATCH ${PROTO:-"ipv4"}
+ then
+ apply_patch $THIS_PATCH ${PROTO:-"ipv4"}
+ PROCESSED="$PROCESSED $SUITE/$BASE${PROTO:+-$PROTO}"
+ ANSWER=Y
+ else
+ echo TEST FAILED: patch NOT `modesense 2`.
+ fi
+ fi
while [ "$ANSWER" = "" ]
do
echo "-----------------------------------------------------------------"
@@ -701,27 +714,55 @@
export NETFILTERDIR=`cd ..; pwd`
+# Check to see if we are running in batch mode
+BATCH=
+if [ "$1" = "--batch" ]; then
+ BATCH=1
+ shift
+fi
+
# Check to see if we are applying or reversing patches
MODE=
-if [ $1 = reverse ]; then
+if [ "$1" = "--reverse" ]; then
shift
MODE=UN
fi
+# Check to see if there is excluded patches
+EXCLUDED=
+while [ "$1" = "--exclude" ]; do
+ EXCLUDED="$EXCLUDED $2"
+ shift
+ shift
+done
+
# Script arg: suite name or a single patch file
-if [ -d "$1" -a -e $1/SUITE ]
+PATCHES=""
+for arg; do
+if [ -d "$arg" -a -e $arg/SUITE ]
then
- for x in `cat $1/SUITE`
+ for x in `cat $arg/SUITE`
do
PATCHES="$PATCHES `ls $x/*.patch $x/*.patch.ipv6 2>/dev/null`"
done
-elif [ -e "$1" -a -n "${1%%.patch*}" ]
+elif [ -e "$arg" -a -n "${arg%%.patch*}" ]
then
- PATCHES=$1
+ PATCHES="$PATCHES $arg"
else
+ echo "ERROR: Invalid option $arg"
+ exit 1
+fi
+done
+
+if [ -z "$PATCHES" ]; then
echo
- echo "Usage: $0 [reverse] suite|suite/patch-file"
+ echo "Usage: $0 [--batch] [--reverse] [--exclude suite/patch-file ...] suite|suite/patch-file"
echo
+ echo " --batch batch mode, automatically applying patches"
+ echo " --reverse back out the selected patches"
+ echo " --exclude excludes the named patches"
+ echo
+
echo Possible patch-o-matic suites:
echo
for x in */SUITE; do
@@ -764,7 +805,7 @@
until [ $DONE ];
do
PROCESSED=
- SEEN=
+ SEEN="$EXCLUDED "
process_patches $PATCHES
DONE=1
done
Index: runme
===================================================================
RCS file: /cvsroot/netfilter/userspace/patch-o-matic/runme,v
retrieving revision 1.22
diff -u -r1.22 runme
--- runme 26 Feb 2002 13:31:56 -0000 1.22
+++ runme 25 Mar 2002 11:39:47 -0000
@@ -509,55 +509,58 @@
CURRENT=`expr $CURRENT + 1`
if [ $CURRENT -gt $# ];
then
- printheader "$PROCESSED"
- ANSWER=""
- while [ ! $ANSWER ]
- do
- echo "-----------------------------------------------------------------"
- echo -n "No more patches to `modesense 1`! Q to Quit or ? for options "'[Q/a/r/b/?] '
- read ANSWER
- case "$ANSWER" in
- a*|A*)
- WALK=
- NEWMODE=
- if ! [ "$NEWMODE" = "$MODE" ]; then PATCHES=`reverse_args $PATCHES`; fi;
- MODE=$NEWMODE
- continue 3
- ;;
- r*|R*)
- WALK=
- NEWMODE=UN
- if ! [ "$NEWMODE" = "$MODE" ]; then PATCHES=`reverse_args $PATCHES`; fi;
- MODE=$NEWMODE
- continue 3
- ;;
- b*|B*)
- WALK=1
- BACK=1
- SEEN=${SEEN%%$SUITE/$BASE${PROTO:+-$PROTO} }
- PROCESSED=${PROCESSED%% $SUITE/$BASE${PROTO:+-$PROTO}}
- if [ $CURRENT -gt 1 ]; then
- CURRENT=`expr $CURRENT - 2`
- else
- CURRENT=0
- fi
- continue 2
- ;;
- Q*|q*|'')
- ANSWER=Q
- continue 2
- ;;
- *)
- ANSWER=""
- echo "Answer one of the following: "
- echo " A to restart patch-o-matic in apply mode"
- echo " R to restart patch-o-matic in REVERSE mode"
- echo " B to walk Back one patch in the list"
- echo " Q to quit immediately"
- echo " ? for help"
- ;;
- esac
- done
+ if [ $BATCH ]; then
+ return
+ fi
+ printheader "$PROCESSED"
+ ANSWER=""
+ while [ ! $ANSWER ]
+ do
+ echo "-----------------------------------------------------------------"
+ echo -n "No more patches to `modesense 1`! Q to Quit or ? for options "'[Q/a/r/b/?] '
+ read ANSWER
+ case "$ANSWER" in
+ a*|A*)
+ WALK=
+ NEWMODE=
+ if ! [ "$NEWMODE" = "$MODE" ]; then PATCHES=`reverse_args $PATCHES`; fi;
+ MODE=$NEWMODE
+ continue 3
+ ;;
+ r*|R*)
+ WALK=
+ NEWMODE=UN
+ if ! [ "$NEWMODE" = "$MODE" ]; then PATCHES=`reverse_args $PATCHES`; fi;
+ MODE=$NEWMODE
+ continue 3
+ ;;
+ b*|B*)
+ WALK=1
+ BACK=1
+ SEEN=${SEEN%% $SUITE/$BASE${PROTO:+-$PROTO}}
+ PROCESSED=${PROCESSED%% $SUITE/$BASE${PROTO:+-$PROTO}}
+ if [ $CURRENT -gt 1 ]; then
+ CURRENT=`expr $CURRENT - 2`
+ else
+ CURRENT=0
+ fi
+ continue 2
+ ;;
+ Q*|q*|'')
+ ANSWER=Q
+ continue 2
+ ;;
+ *)
+ ANSWER=""
+ echo "Answer one of the following: "
+ echo " A to restart patch-o-matic in apply mode"
+ echo " R to restart patch-o-matic in REVERSE mode"
+ echo " B to walk Back one patch in the list"
+ echo " Q to quit immediately"
+ echo " ? for help"
+ ;;
+ esac
+ done
fi
THIS_PATCH=`eval echo -n \\\${$CURRENT}` > /dev/null
@@ -599,6 +602,16 @@
echo The $SUITE/$BASE ${PROTO:+$PROTO } patch:
if [ -f $THIS_PATCH.help ]; then while read LINE; do echo " $LINE"; done < $THIS_PATCH.help; fi
ANSWER=""
+ if [ $BATCH ]; then
+ if test_patch $THIS_PATCH ${PROTO:-"ipv4"}
+ then
+ apply_patch $THIS_PATCH ${PROTO:-"ipv4"}
+ PROCESSED="$PROCESSED $SUITE/$BASE${PROTO:+-$PROTO}"
+ ANSWER=Y
+ else
+ echo TEST FAILED: patch NOT `modesense 2`.
+ fi
+ fi
while [ "$ANSWER" = "" ]
do
echo "-----------------------------------------------------------------"
@@ -701,27 +714,55 @@
export NETFILTERDIR=`cd ..; pwd`
+# Check to see if we are running in batch mode
+BATCH=
+if [ "$1" = "--batch" ]; then
+ BATCH=1
+ shift
+fi
+
# Check to see if we are applying or reversing patches
MODE=
-if [ $1 = reverse ]; then
+if [ "$1" = "--reverse" ]; then
shift
MODE=UN
fi
+# Check to see if there is excluded patches
+EXCLUDED=
+while [ "$1" = "--exclude" ]; do
+ EXCLUDED="$EXCLUDED $2"
+ shift
+ shift
+done
+
# Script arg: suite name or a single patch file
-if [ -d "$1" -a -e $1/SUITE ]
+PATCHES=""
+for arg; do
+if [ -d "$arg" -a -e $arg/SUITE ]
then
- for x in `cat $1/SUITE`
+ for x in `cat $arg/SUITE`
do
PATCHES="$PATCHES `ls $x/*.patch $x/*.patch.ipv6 2>/dev/null`"
done
-elif [ -e "$1" -a -n "${1%%.patch*}" ]
+elif [ -e "$arg" -a -n "${arg%%.patch*}" ]
then
- PATCHES=$1
+ PATCHES="$PATCHES $arg"
else
+ echo "ERROR: Invalid option $arg"
+ exit 1
+fi
+done
+
+if [ -z "$PATCHES" ]; then
echo
- echo "Usage: $0 [reverse] suite|suite/patch-file"
+ echo "Usage: $0 [--batch] [--reverse] [--exclude suite/patch-file ...] suite|suite/patch-file"
echo
+ echo " --batch batch mode, automatically applying patches"
+ echo " --reverse back out the selected patches"
+ echo " --exclude excludes the named patches"
+ echo
+
echo Possible patch-o-matic suites:
echo
for x in */SUITE; do
@@ -764,7 +805,7 @@
until [ $DONE ];
do
PROCESSED=
- SEEN=
+ SEEN="$EXCLUDED "
process_patches $PATCHES
DONE=1
done