During quilt based development, it is sometimes necessary to reorder
patch files, which can become a tedious process as the patch list gets
bigger. This script can help when doing such operations, by allowing to
increment or decrement the number of multiple patch files at once:

$ ./scripts/patch-rename.sh -i 5 target/linux/generic/1*
Add 5 to all the prefix numbers of all the patch files specified as an
argument.

Signed-off-by: Mathieu Olivari <[email protected]>
---
 scripts/patch-rename.sh | 66 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100755 scripts/patch-rename.sh

diff --git a/scripts/patch-rename.sh b/scripts/patch-rename.sh
new file mode 100755
index 0000000..011d179
--- /dev/null
+++ b/scripts/patch-rename.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+usage() {
+       echo "Usage: `basename $0` [ -i addval ] [ -d decval ] xxx.patch 
yyy.patch ..."
+       echo -e "\t -i ==> increment patch files by \"addval\""
+       echo -e "\t -d ==> decrement patch files by \"decval\""
+       exit 1
+}
+
+_do_rename() {
+       local mod=$1
+       local op=$2
+       local file=$3
+       local oldval newval
+
+       [ -f $file ] || { echo "Can't find file: $file"; exit 1; }
+
+       oldval=$(echo $file | sed 's/.*\/\([0-9]*\)-[^\/]*/\1/')
+       digits=${#oldval}
+       newval=$((${oldval##0*0} $op $mod))
+       # Pad newval to the previous number of characters
+       newval=$(printf "%0${#oldval}d" $newval)
+       rename "s/$oldval/$newval/" $file || { \
+               echo "Can't rename file: $file\n"; \
+               exit 1; \
+       }
+}
+
+dec_patches() {
+       local decval=$1; shift
+       # process the lowest patch first to avoid having conflicting numbers
+       local patchlist=$(echo $@ | sort -n)
+       local oldval newval
+
+       for p in ${patchlist}; do
+               _do_rename $decval - $p
+       done
+}
+
+inc_patches() {
+       local incval=$1; shift
+       # process the highest patch first to avoid having conflicting numbers
+       local patchlist=$(echo $@ | sort -nr)
+       local oldval newval
+
+       for p in ${patchlist}; do
+               _do_rename $incval + $p
+       done
+}
+
+while getopts "i:d:" OPTION; do
+       case $OPTION in
+               i ) INCVAL=$OPTARG;;
+               d ) DECVAL=$OPTARG;;
+               * ) usage;;
+       esac
+done
+
+shift $((OPTIND-1))
+PATCH_LIST=$@
+
+# If the user didn't provide any file, show the usage information
+[ ${#PATCH_LIST} == 0 ] && usage
+
+[ -n "$INCVAL" ] && inc_patches $INCVAL $PATCH_LIST
+[ -n "$DECVAL" ] && dec_patches $DECVAL $PATCH_LIST
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to