Re: [PATCHv2 3/4] git-am foreign patch support: StGIT support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]