Patchwork [14/15] send-pull-request: streamline git-send-email usage

login
register
mail settings
Submitter Darren Hart
Date May 18, 2011, 5:18 p.m.
Message ID <ac93972b340f5fa31e405cd5e894b7edb62ab194.1305738598.git.dvhart@linux.intel.com>
Download mbox | patch
Permalink /patch/4363/
State New, archived
Headers show

Comments

Darren Hart - May 18, 2011, 5:18 p.m.
The script was sending one patch at a time, which defeats the internal
confirmation mechanism of git-send-email (which would otherwise allow
the user to send all patches or abort immediately).

Rework the sending logic to use no more than two commands. Use two
commands when the cover letter is to be sent to all recipients with
the -a argument. Otherwise, send all patches via the same command.

The script duplicates git's send confirmation, eliminate that.

Reported-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Acked-by: Joshua Lock <josh@linux.intel.com>
Acked-by: Otavio Salvador <otavio@ossystems.com.br>
Cc: Khem Raj <raj.khem@gmail.com>
Cc: Joshua Lock <josh@linux.intel.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
---
 scripts/send-pull-request |   68 +++++++++++++++++---------------------------
 1 files changed, 26 insertions(+), 42 deletions(-)
Khem Raj - May 18, 2011, 5:58 p.m.
On Wed, May 18, 2011 at 10:18 AM, Darren Hart <dvhart@linux.intel.com> wrote:
> The script was sending one patch at a time, which defeats the internal
> confirmation mechanism of git-send-email (which would otherwise allow
> the user to send all patches or abort immediately).
>
> Rework the sending logic to use no more than two commands. Use two
> commands when the cover letter is to be sent to all recipients with
> the -a argument. Otherwise, send all patches via the same command.
>
> The script duplicates git's send confirmation, eliminate that.
>
> Reported-by: Khem Raj <raj.khem@gmail.com>
> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
> Acked-by: Joshua Lock <josh@linux.intel.com>
> Acked-by: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Khem Raj <raj.khem@gmail.com>
> Cc: Joshua Lock <josh@linux.intel.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>

Acked-by: Khem Raj <raj.khem@gmail.com>

> ---
>  scripts/send-pull-request |   68 +++++++++++++++++---------------------------
>  1 files changed, 26 insertions(+), 42 deletions(-)
>
> diff --git a/scripts/send-pull-request b/scripts/send-pull-request
> index 21eb302..8d0bd34 100755
> --- a/scripts/send-pull-request
> +++ b/scripts/send-pull-request
> @@ -1,6 +1,7 @@
>  #!/bin/bash
>  AUTO=0
>  AUTO_CL=0
> +GITSOBCC=""
>
>  # Prevent environment leakage to these vars.
>  unset TO
> @@ -59,10 +60,11 @@ while getopts "achp:t:" OPT; do
>        case $OPT in
>        a)
>                AUTO_CL=1
> -               AUTO=1
> -               ;;
> +               # Fall through to include -c
> +               ;&
>        c)
>                AUTO=1
> +               GITSOBCC="--signed-off-by-cc"
>                ;;
>        h)
>                usage
> @@ -130,48 +132,30 @@ if [ -z "$TO" ] && [ -z "$AUTO_CC" ]; then
>  fi
>
>
> -# Generate report for the user and require confirmation before sending
> -cat <<EOM
> -The following patches:
> -$(for PATCH in $PDIR/*.patch; do echo "    $PATCH"; done)
> +# Convert the collected addresses into git-send-email argument strings
> +export IFS=$','
> +GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done)
> +GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done)
> +unset IFS
>
> -will now be sent via the git send-email command. Git will prompt you before
> -sending any email.
>
> -EOM
> -echo "Continue? [y/N] "
> -read cont
> -
> -if [ "$cont" == "y" ] || [ "$cont" == "Y" ]; then
> -       ERROR=0
> -       export IFS=$','
> -       GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done)
> -       GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done)
> -       unset IFS
> -       for PATCH in $PDIR/*patch; do
> -               if [ $AUTO -eq 1 ]; then
> -                       if [ $PATCH == "$CL" ] && [ $AUTO_CL -eq 1 ]; then
> -                               # Send the cover letter to every recipient, both
> -                               # specified as well as harvested.
> -                               eval "git send-email $GIT_TO $GIT_CC --confirm=always --no-chain-reply-to --suppress-cc=all $PATCH"
> -                       else
> -                               # Send the patch to the specified recipients and
> -                               # those git finds in this specific patch.
> -                               eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to --signed-off-by-cc $PATCH"
> -                       fi
> -               else
> -                       # Only send to the explicitly specified recipients
> -                       eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to --suppress-cc=all $PATCH"
> -               fi
> -               if [ $? -eq 1 ]; then
> -                       ERROR=1
> -               fi
> -       done
> -
> -       if [ $ERROR -eq 1 ]; then
> -               echo "ERROR: Failed to send one or more messages."
> +# Handoff to git-send-email. It will perform the send confirmation.
> +PATCHES=$(echo $PDIR/*.patch)
> +if [ $AUTO_CL -eq 1 ]; then
> +       # Send the cover letter to every recipient, both specified as well as
> +       # harvested. Then remove it from the patches list.
> +       eval "git send-email $GIT_TO $GIT_CC --confirm=always --no-chain-reply-to --suppress-cc=all $CL"
> +       if [ $? -eq 1 ]; then
> +               echo "ERROR: failed to send cover-letter with automatic recipients."
> +               exit 1
>        fi
> -else
> -       echo "Send aborted."
> +       PATCHES=${PATCHES/"$CL"/}
>  fi
>
> +# Send the patch to the specified recipients and, if -c was specified, those git
> +# finds in this specific patch.
> +eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to $GITSOBCC $PATCHES"
> +if [ $? -eq 1 ]; then
> +       echo "ERROR: failed to send patches."
> +       exit 1
> +fi
> --
> 1.7.1
>
>

Patch

diff --git a/scripts/send-pull-request b/scripts/send-pull-request
index 21eb302..8d0bd34 100755
--- a/scripts/send-pull-request
+++ b/scripts/send-pull-request
@@ -1,6 +1,7 @@ 
 #!/bin/bash
 AUTO=0
 AUTO_CL=0
+GITSOBCC=""
 
 # Prevent environment leakage to these vars.
 unset TO
@@ -59,10 +60,11 @@  while getopts "achp:t:" OPT; do
 	case $OPT in
 	a)
 		AUTO_CL=1
-		AUTO=1
-		;;
+		# Fall through to include -c
+		;&
 	c)
 		AUTO=1
+		GITSOBCC="--signed-off-by-cc"
 		;;
 	h)
 		usage
@@ -130,48 +132,30 @@  if [ -z "$TO" ] && [ -z "$AUTO_CC" ]; then
 fi
 
 
-# Generate report for the user and require confirmation before sending
-cat <<EOM
-The following patches:
-$(for PATCH in $PDIR/*.patch; do echo "    $PATCH"; done)
+# Convert the collected addresses into git-send-email argument strings
+export IFS=$','
+GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done)
+GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done)
+unset IFS
 
-will now be sent via the git send-email command. Git will prompt you before
-sending any email.
 
-EOM
-echo "Continue? [y/N] "
-read cont
-
-if [ "$cont" == "y" ] || [ "$cont" == "Y" ]; then
-	ERROR=0
-	export IFS=$','
-	GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done)
-	GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done)
-	unset IFS
-	for PATCH in $PDIR/*patch; do
-		if [ $AUTO -eq 1 ]; then
-			if [ $PATCH == "$CL" ] && [ $AUTO_CL -eq 1 ]; then
-				# Send the cover letter to every recipient, both
-				# specified as well as harvested.
-				eval "git send-email $GIT_TO $GIT_CC --confirm=always --no-chain-reply-to --suppress-cc=all $PATCH"
-			else
-				# Send the patch to the specified recipients and
-				# those git finds in this specific patch.
-				eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to --signed-off-by-cc $PATCH"
-			fi
-		else
-			# Only send to the explicitly specified recipients
-			eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to --suppress-cc=all $PATCH"
-		fi
-		if [ $? -eq 1 ]; then
-			ERROR=1
-		fi
-	done
-
-	if [ $ERROR -eq 1 ]; then
-		echo "ERROR: Failed to send one or more messages."
+# Handoff to git-send-email. It will perform the send confirmation.
+PATCHES=$(echo $PDIR/*.patch)
+if [ $AUTO_CL -eq 1 ]; then
+	# Send the cover letter to every recipient, both specified as well as
+	# harvested. Then remove it from the patches list.
+	eval "git send-email $GIT_TO $GIT_CC --confirm=always --no-chain-reply-to --suppress-cc=all $CL"
+	if [ $? -eq 1 ]; then
+		echo "ERROR: failed to send cover-letter with automatic recipients."
+		exit 1
 	fi
-else
-	echo "Send aborted."
+	PATCHES=${PATCHES/"$CL"/}
 fi
 
+# Send the patch to the specified recipients and, if -c was specified, those git
+# finds in this specific patch.
+eval "git send-email $GIT_TO --confirm=always --no-chain-reply-to $GITSOBCC $PATCHES"
+if [ $? -eq 1 ]; then
+	echo "ERROR: failed to send patches."
+	exit 1
+fi