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