Giuseppe Bilotta <giuseppe.bilotta@xxxxxxxxx> writes: > 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 "$@" Can an stgit patch file (or the leading pathname for that matter) have IFS character in its name? > + ;; > + stgit) > + this=0 > + for stgit in "$@" > + do > + this=`expr "$this" + 1` > + msgnum=`printf "%0${prec}d" $this` > + touch "$dotest/$msgnum" Portability tip from an old timer: do not create a new empty file with "touch" (only use that command to update the timestamp of an existing file). Instead say >"$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 ; Can any token that match Author other than the initial "Author: " appear on this line? Since we rely on Perl but not awk in core-ish part of the scripted Porcelains, it might be a good idea to write this in Perl as well. > + 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html