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
gitk.txt
gitk(1)
=======

NAME
----
gitk - The git repository browser

SYNOPSIS
--------
'gitk' [<option>...] [<revs>] [--] [<path>...]

DESCRIPTION
-----------
Displays changes in a repository or a selected set of commits. This includes
visualizing the commit graph, showing information related to each commit, and
the files in the trees of each revision.

Historically, gitk was the first repository browser. It's written in tcl/tk
and started off in a separate repository but was later merged into the main
git repository.

OPTIONS
-------
To control which revisions to shown, the command takes options applicable to
the gitlink:git-rev-list[1] command. This manual page describes only the most
frequently used options.

-n <number>, --max-count=<number>::

	Limits the number of commits to show.

--since=<date>::

	Show commits more recent than a specific date.

--until=<date>::

	Show commits older than a specific date.

--all::

	Show all branches.

<revs>::

	Limit the revisions to show. This can be either a single revision
	meaning show from the given revision and back, or it can be a range in
	the form "'<from>'..'<to>'" to show all revisions between '<from>' and
	back to '<to>'. Note, more advanced revision selection can be applied.
	For a more complete list of ways to spell object names, see
	"SPECIFYING REVISIONS" section in gitlink:git-rev-parse[1].

<path>::

	Limit commits to the ones touching files in the given paths. Note, to
	avoid ambiguity wrt. revision names use "--" to separate the paths
	from any preceding options.

Examples
--------
gitk v2.6.12.. include/scsi drivers/scsi::

	Show as the changes since version 'v2.6.12' that changed any
	file in the include/scsi or drivers/scsi subdirectories

gitk --since="2 weeks ago" \-- gitk::

	Show the changes during the last two weeks to the file 'gitk'.
	The "--" is necessary to avoid confusion with the *branch* named
	'gitk'

gitk --max-count=100 --all -- Makefile::

	Show at most 100 changes made to the file 'Makefile'. Instead of only
	looking for changes in the current branch look in all branches.

See Also
--------
'qgit(1)'::
	A repository browser written in C++ using Qt.

'gitview(1)'::
	A repository browser written in Python using Gtk. It's based on
	'bzrk(1)' and distributed in the contrib area of the git repository.

'tig(1)'::
	A minimal repository browser and git tool output highlighter written
	in C using Ncurses.

Author
------
Written by Paul Mackerras <paulus@samba.org>.

Documentation
--------------
Documentation by Junio C Hamano, Jonas Fonseca, and the git-list
<git@vger.kernel.org>.

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