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 

Reply via email to