Revision aba91192ae39cd1a2f79e7ed91e966df3cfe10b7 authored by Carlos Rica on 09 September 2007, 00:39:29 UTC, committed by Junio C Hamano on 10 September 2007, 04:30:54 UTC
Most of this patch code and message was written by Shawn O. Pearce.
I made some tests to know what the problem was, and then I changed
the code related with the SIGPIPE signal.

If the user has misconfigured `user.signingkey` in their .git/config
or just doesn't have any secret keys on their keyring and they ask
for a signed tag with `git tag -s` we better make sure the resulting
tag was actually signed by gpg.

Prior versions of builtin git-tag allowed this failure to slip
by without error as they were not checking the return value of
the finish_command() so they did not notice when gpg exited with
an error exit status.  They also did not fail if gpg produced an
empty output or if read_in_full received an error from the read
system call while trying to read the pipe back from gpg.

Finally, we did not actually honor any return value from the do_sign
function as it returns ssize_t but was being stored into an unsigned
long.  This caused the compiler to optimize out the die condition,
allowing git-tag to continue along and create the tag object.

However, when gpg gets a wrong username, it exits before any read was done
and then the writing process receives SIGPIPE and program is terminated.
By ignoring this signal, anyway, the function write_or_die gets EPIPE from
write_in_full and exits returning 0 to the system without a message.
Here we better call to write_in_full directly so we can fail
printing a message and return safely to the caller.

With these issues fixed `git-tag -s` will now fail to create the
tag and will report a non-zero exit status to its caller, thereby
allowing automated helper scripts to detect (and recover from)
failure if gpg is not working properly.

Proposed-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 7b02b85
Raw File
git-send-email.txt
git-send-email(1)
=================

NAME
----
git-send-email - Send a collection of patches as emails


SYNOPSIS
--------
'git-send-email' [options] <file|directory> [... file|directory]



DESCRIPTION
-----------
Takes the patches given on the command line and emails them out.

The header of the email is configurable by command line options.  If not
specified on the command line, the user will be prompted with a ReadLine
enabled interface to provide the necessary information.

OPTIONS
-------
The options available are:

--bcc::
	Specify a "Bcc:" value for each email.
+
The --bcc option must be repeated for each user you want on the bcc list.

--cc::
	Specify a starting "Cc:" value for each email.
+
The --cc option must be repeated for each user you want on the cc list.

--cc-cmd::
	Specify a command to execute once per patch file which
	should generate patch file specific "Cc:" entries.
	Output of this command must be single email address per line.
	Default is the value of 'sendemail.cccmd' configuration value.

--chain-reply-to, --no-chain-reply-to::
	If this is set, each email will be sent as a reply to the previous
	email sent.  If disabled with "--no-chain-reply-to", all emails after
	the first will be sent as replies to the first email sent.  When using
	this, it is recommended that the first file given be an overview of the
	entire patch series.
	Default is the value of the 'sendemail.chainreplyto' configuration
	value; if that is unspecified, default to --chain-reply-to.

--compose::
	Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
	introductory message for the patch series.

--from::
	Specify the sender of the emails.  This will default to
	the value GIT_COMMITTER_IDENT, as returned by "git-var -l".
	The user will still be prompted to confirm this entry.

--in-reply-to::
	Specify the contents of the first In-Reply-To header.
	Subsequent emails will refer to the previous email
	instead of this if --chain-reply-to is set (the default)
	Only necessary if --compose is also set.  If --compose
	is not set, this will be prompted for.

--signed-off-by-cc, --no-signed-off-by-cc::
        If this is set, add emails found in Signed-off-by: or Cc: lines to the
        cc list.
        Default is the value of 'sendemail.signedoffcc' configuration value;
        if that is unspecified, default to --signed-off-by-cc.

--quiet::
	Make git-send-email less verbose.  One line per email should be
	all that is output.

--smtp-server::
	If set, specifies the outgoing SMTP server to use (e.g.
	`smtp.example.com` or a raw IP address).  Alternatively it can
	specify a full pathname of a sendmail-like program instead;
	the program must support the `-i` option.  Default value can
	be specified by the 'sendemail.smtpserver' configuration
	option; the built-in default is `/usr/sbin/sendmail` or
	`/usr/lib/sendmail` if such program is available, or
	`localhost` otherwise.

--subject::
	Specify the initial subject of the email thread.
	Only necessary if --compose is also set.  If --compose
	is not set, this will be prompted for.

--suppress-from, --no-suppress-from::
        If this is set, do not add the From: address to the cc: list, if it
        shows up in a From: line.
        Default is the value of 'sendemail.suppressfrom' configuration value;
        if that is unspecified, default to --no-suppress-from.

--thread, --no-thread::
	If this is set, the In-Reply-To header will be set on each email sent.
	If disabled with "--no-thread", no emails will have the In-Reply-To
	header set.
	Default is the value of the 'sendemail.thread' configuration value;
	if that is unspecified, default to --thread.

--dry-run::
	Do everything except actually send the emails.

--envelope-sender::
	Specify the envelope sender used to send the emails.
	This is useful if your default address is not the address that is
	subscribed to a list. If you use the sendmail binary, you must have
	suitable privileges for the -f parameter.

--to::
	Specify the primary recipient of the emails generated.
	Generally, this will be the upstream maintainer of the
	project involved.
+
The --to option must be repeated for each user you want on the to list.


CONFIGURATION
-------------
sendemail.aliasesfile::
	To avoid typing long email addresses, point this to one or more
	email aliases files.  You must also supply 'sendemail.aliasfiletype'.

sendemail.aliasfiletype::
	Format of the file(s) specified in sendemail.aliasesfile. Must be
	one of 'mutt', 'mailrc', 'pine', or 'gnus'.

sendemail.cccmd::
	Command to execute to generate per patch file specific "Cc:"s.

sendemail.bcc::
	Email address (or alias) to always bcc.

sendemail.chainreplyto::
	Boolean value specifying the default to the '--chain_reply_to'
	parameter.

sendemail.smtpserver::
	Default smtp server to use.

Author
------
Written by Ryan Anderson <ryan@michonline.com>

git-send-email is originally based upon
send_lots_of_email.pl by Greg Kroah-Hartman.

Documentation
--------------
Documentation by Ryan Anderson

GIT
---
Part of the gitlink:git[7] suite
back to top