summaryrefslogtreecommitdiff
path: root/stale/stack_patches.sh
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2024-04-21 13:52:26 +0200
committerCarlos Maiolino <[email protected]>2024-04-21 13:52:26 +0200
commit47b7016ed5ac6dd8efc041060d62e632e937a6d2 (patch)
tree2540760186b400288565c2d2f67dd3c3e93bcfe0 /stale/stack_patches.sh
Initial commit
Diffstat (limited to 'stale/stack_patches.sh')
-rwxr-xr-xstale/stack_patches.sh132
1 files changed, 132 insertions, 0 deletions
diff --git a/stale/stack_patches.sh b/stale/stack_patches.sh
new file mode 100755
index 0000000..e8072c1
--- /dev/null
+++ b/stale/stack_patches.sh
@@ -0,0 +1,132 @@
+#!/bin/bash
+
+# Stateless script to create stacked patch series (with guilt) on a specified
+# git repository.
+#
+# Used mostly to help with patch maintenance on xfsprogs project.
+#
+# The idea is to use it as a hook in neomutt, select a bunch of patches create
+# stgit series based on those.
+#
+# The script relies on b4 tool to create mailboxes from the patches's msg-ids,
+# and those mboxes sent to stgi to transform them in patch series.
+
+
+#Piped message(s)
+emails=$2
+
+#Repository to act on
+REPO="$1"
+
+patch=/tmp/$$.patch
+mbox=/tmp/mutt_mbox.tmp
+MBOX_DIR=/tmp/MBOX_DIR
+
+# Logging
+IMPORT_LOG=/tmp/$$.import_log
+
+#Commands used
+B4=`which b4`
+GIT=`which git`
+GUILT=`which guilt`
+
+
+#Repositories location
+KERNEL_REPO=$HOME/Source/kernel/linux.pristine
+XFSPROGS_REPO=$HOME/Source/xfsprogs/xfsprogs-dev.pristine
+XFSDUMP_REPO=$HOME/Source/xfsdump/xfsdump-dev.pristine
+
+cleanup(){
+ rm -rf $MBOX_DIR
+ rm -rf $IMPORT_LOG
+ rm -rf /tmp/*.error_log
+}
+
+setup(){
+ if [ -d $MBOX_DIR ]; then
+ mkdir -p $MBOX_DIR
+ fi
+}
+
+# Create multiple mboxes from tagged messages
+import_from_list(){
+
+ ID_LIST=/tmp/$$.idlist
+ ERR_LOG=/tmp/$$_import.error_log
+
+ cat $emails | grep Message-Id | awk '{print $2}'> $ID_LIST
+
+ for i in `cat $ID_LIST`; do
+ b4 -q am -t -s -o $MBOX_DIR $i &> $ERR_LOG
+ done
+
+ rm $ID_LIST
+}
+
+# Import patches from mailboxes into a git branch
+create_git_branch(){
+
+ if [ $REPO == "xfsprogs" ]; then
+ cd $XFSPROGS_REPO
+ elif [ $REPO == "xfsdump" ]; then
+ cd $XFSDUMP_REPO
+ else
+ echo "Invalid repository"
+ exit 1
+ fi
+
+ for i in `ls $MBOX_DIR | grep ".mbx"`; do
+ series=$(echo $i | sed 's/.mbx//')
+ ERR_LOG=/tmp/$series.error_log
+ #stack=$(echo $i)
+
+ echo "====================="
+ echo "- Applying Series:"
+ echo "$series"
+ echo
+ # Ensure we are at for-next branch, to avoid stacking different
+ # series in the same branch
+ echo "- Creating new Branch:"
+ $GIT checkout -q -B IMPORT_$series >> $ERR_LOG
+ echo
+ echo "- Resetting branch to for-next"
+ $GIT reset -q --hard for-next >> $ERR_LOG
+ #$GIT checkout -q for-next > $ERR_LOG
+ echo
+ echo "- Importing commits"
+ $GIT am $MBOX_DIR/$i 2>> $ERR_LOG >> $IMPORT_LOG
+
+ #if [ $? != 0 ]; then
+ if [ -s $ERR_LOG ]; then
+ echo "GIT AM ERROR: Failed to import series: $series"
+ #echo "DEBUG: $MBOX_DIR/$i"
+ #echo "DEBUG: $PWD"
+ echo "See: $ERR_LOG"
+ $GIT am --abort >> $IMPORT_LOG
+ continue
+ else
+ echo
+ echo "-= SERIES APPLIED =-"
+ fi
+ done
+ echo
+ echo "- Moving back to master branch..."
+ $GIT checkout -q master >> $ERR_LOG
+ echo
+ echo "-= Job finished =-"
+ echo "====================="
+}
+
+show_dialog(){
+ dialog --clear --menu "Select reposiroty" 0 0 20 "kernel" "" "xfsprogs" "" 2>&1 >/dev/tty
+}
+
+
+# Prog starts here
+
+cleanup
+mkdir $MBOX_DIR
+import_from_list $emails
+create_git_branch
+#create_patch_stacks $XFSPROGS_REPO
+#create_patch_stacks $XFSDUMP_REPO