[PATCH] aiaiai-email-lda: use the References mail header

Keller, Jacob E jacob.e.keller at intel.com
Thu Nov 6 14:28:38 PST 2014


On Thu, 2014-11-06 at 19:50 +0100, Robert Jarzmik wrote:
> Aiaiai local mail delivery agent should be able to cope with forwarded
> mails, not only git-send-email.
> 
> One popular method of forwarding a mail thread is to have it embedded in
> a single mulitpart mail in rfc822 format. But this transformation
> changes the In-Reply-To: headers into References: headers.
> 
> The goal of this patch is to teach aiaiai LDA to understand both
> In-Reply-To and References in its mail handling. This enables mail
> forwarding.

Excellent!

> 
> Signed-off-by: Robert Jarzmik <robert.jarzmik at free.fr>
> ---
>  doc/README             | 22 ++++++++++++++++++++++
>  email/aiaiai-email-lda | 13 ++++++++-----
>  2 files changed, 30 insertions(+), 5 deletions(-)
> 
> diff --git a/doc/README b/doc/README
> index 0e699a2..0e6571c 100644
> --- a/doc/README
> +++ b/doc/README
> @@ -102,6 +102,28 @@ The 'aiaiai-test-patchset' script does all the testing work and outputs the
>  test results to stdout. 'aiaiai-email-test-patchset' captures the output and
>  sends it back to the patch submitter.
>  
> +A more complicated mail setup dealing with forwards and multi-part emails
> +would be :
> +$ cat /home/aiaiai/bin/my-aiaiai-lda
> +	#!/bin/sh
> +	formail_opt=""
> +
> +	mail=$(mktemp)
> +	cat > $mail
> +
> +	to="$(formail -c -z -x "To:" < $mail)"
> +	[ -n "$to" ] && formail_opt="$formail_opt -I \"To: $to\""
> +
> +	project="$(formail -c -z -x "X-Aiaiai-Project:" < $mail)"
> +	[ -n "$project" ] && formail_opt="$formail_opt -I \"X-Aiaiai-Project: $project\""
> +
> +	commit="$(formail -c -z -x "X-Aiaiai-Commit:" < $mail)"
> +	[ -n "$commit" ] && formail_opt="$formail_opt -I \"X-Aiaiai-Commit: $commit\""
> +
> +	cat "$mail" | eval formail $formail_opt -d -s $HOME/git/email/aiaiai-email-lda \
> +	-v --reap-archive=43200 --reap-incomplete=10 -- $HOME/aiaiai-workdir \
> +	>> $HOME/aiaiai-logs/email-lda.log" 2>&1
> +
>  1.2 Email Configuration

Glad you remembered the docs :)

>  ~~~~~~~~~~~~~~~~~~~~~~~
>  
> diff --git a/email/aiaiai-email-lda b/email/aiaiai-email-lda
> index 365d7cf..b3e78dd 100755
> --- a/email/aiaiai-email-lda
> +++ b/email/aiaiai-email-lda
> @@ -157,10 +157,10 @@ find_relatives()
>  	local parent_id="$1"; shift
>  
>  	# Find the parent, children, and brothers
> -	LC_ALL=C grep -i -l -r -- "In-Reply-To: $id" "$where" ||:
> +	LC_ALL=C grep -i -l -r -- "\(In-Reply-To\|References\): $id" "$where" ||:
>  	if [ -n "$parent_id" ]; then
>  		LC_ALL=C grep -i -l -r -- "Message-Id: $parent_id" "$where" ||:
> -		LC_ALL=C grep -i -l -r -- "In-Reply-To: $parent_id" "$where" ||:
> +		LC_ALL=C grep -i -l -r -- "\(In-Reply-To\|References\): $parent_id" "$where" ||:
>  	fi
>  }
>  
> @@ -173,6 +173,7 @@ series_is_complete()
>  	local cnt="$(ls -1 --ignore=0 -- "$dir" | wc -l)"
>  	if [ "$cnt" -eq "$n" ]; then
>  		local first_parent="$(fetch_header "In-Reply-To" < "$dir/1")"
> +		[ -z "$first_parent" ] && first_parent="$(fetch_header "References" < "$dir/1")"
>  		if [ -n "$first_parent" ]; then
>  			# The first patch has a parent, must be the cover letter
>  			if [ -f "$dir/0" ]; then
> @@ -258,7 +259,7 @@ move_to_series()
>  #
>  # The series is collected using message ID headers - each patch, except of may
>  # be the first one, must refer the previous patches ID via teh "In-Reply-To"
> -# header.
> +# header or "References" header.
>  process_series_mbox()
>  {
>  	local mbox="$1"; shift
> @@ -269,12 +270,14 @@ process_series_mbox()
>  
>  	# Only patch 0/n or 1/n is allowed to have no parent
>  	local parent_id="$(fetch_header "In-Reply-To" < "$mbox")"
> +	[ -z "$parent_id" ] && parent_id="$(fetch_header "References" < "$mbox")"
>  	if [ -z "$parent_id" ] && [ "$m" != 1 ] && [ "$m" != 0 ]; then
>  		reject_and_reply "$mbox" <<EOF
>  You sent a patch that does not conform to the requirements for Aiaiai's Local
>  Delivery Agent. This patch is part of a series as indicated by its subject
> -prefix.  However, it does not contain the correct "In-Reply-To:" header which
> -is required for Aiaiai to determine which patch series it belongs with.
> +prefix.  However, it does not contain the correct "In-Reply-To:" header or
> +"References" header which is required for Aiaiai to determine which patch
> +series it belongs with.

A little nit-picky but maybe that could be "References:" with the
semi-colon? (for consistency with how we reference In-Reply-To:

>  
>  The most common reason for this issue is from not using the git-send-email
>  utility, and using your own script which does not generate proper In-Reply-To:

Also fix up the one below here to include references: also.


Thanks,
Jake


More information about the aiaiai mailing list