[PATCHv2 3/4] git-am foreign patch support: StGIT support
Support StGIT patches by implementing a simple awk-based converter
mimicking StGIT's own parse_patch. Also support StGIT patch series by
'exploding' the index into a lif of files and re-running the mail
splitting with patch_format set to stgit.
---
git-am.sh | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/git-am.sh b/git-am.sh
index 4cf66aa..1a00830 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -203,6 +203,66 @@ split_patches () {
exit 1
}
;;
+ stgit-series)
+ if test $# -ne 1
+ then
+ echo "Only one StGIT patch series can be applied at once"
+ exit 1
+ fi
+ series_dir=`dirname "$1"`
+ series_file="$1"
+ shift
+ {
+ set x
+ while read filename
+ do
+ set "$@" "$series_dir/$filename"
+ done
+ # remove the safety x
+ shift
+ # remove the arg coming from the first-line comment
+ shift
+ } < "$series_file"
+ # set the patch format appropriately
+ patch_format=stgit
+ # now handle the actual StGIT patches
+ split_patches "$@"
+ ;;
+ stgit)
+ this=0
+ for stgit in "$@"
+ do
+ this=`expr "$this" + 1`
+ msgnum=`printf "%0${prec}d" $this`
+ touch "$dotest/$msgnum"
+ # Awk version of StGIT parse_patch. The first nonemptyline
+ # not starting with Author, From or Date is the
+ # subject, and the body starts with the next nonempty
+ # line not starting with Author, From or Date
+ awk 'BEGIN { subject=0 }
+ {
+ if (subject > 1)
+ print ;
+ else if (/^$/) next ;
+ else if (/^Author:/) print sub("Author", "From"), $ORS ;
+ else if (/^(From|Date)/) print ;
+ else if (subject) {
+ subject = 2 ;
+ print "" ;
+ print ;
+ } else {
+ print "Subject:", $0 ;
+ subject = 1;
+ }
+ }' "$stgit" > "$dotest/$msgnum" || {
+ echo "Failed to import $patch_format patch $stgit"
+ exit 1
+ }
+ done
+ echo "$this" > "$dotest/last"
+ this=
+ msgnum=
+ ;;
*)
echo "Patch format $patch_format is not supported."
exit 1
--
1.6.3.1.248.gb44be