swh:1:snp:87728f882295b5ba27035837248a04c5be121c53
Revision fc1b56f054a79400c4e72cb1aab97ba2605cbd83 authored by Clemens Buchacher on 01 August 2011, 17:59:21 UTC, committed by Junio C Hamano on 01 August 2011, 23:21:55 UTC
If the pager fails to run, git produces no output, e.g.:

 $ GIT_PAGER=not-a-command git log

The error reporting fails for two reasons:

 (1) start_command: There is a mechanism that detects errors during
     execvp introduced in 2b541bf8 (start_command: detect execvp
     failures early). The child writes one byte to a pipe only if
     execvp fails.  The parent waits for either EOF, when the
     successful execvp automatically closes the pipe (see
     FD_CLOEXEC in fcntl(1)), or it reads a single byte, in which
     case it knows that the execvp failed. This mechanism is
     incompatible with the workaround introduced in 35ce8622
     (pager: Work around window resizing bug in 'less'), which
     waits for input from the parent before the exec. Since both
     the parent and the child are waiting for input from each
     other, that would result in a deadlock. In order to avoid
     that, the mechanism is disabled by closing the child_notifier
     file descriptor.

 (2) finish_command: The parent correctly detects the 127 exit
     status from the child, but the error output goes nowhere,
     since by that time it is already being redirected to the
     child.

No simple solution for (1) comes to mind.

Number (2) can be solved by not sending error output to the pager.
Not redirecting error output to the pager can result in the pager
overwriting error output with standard output, however.

Since there is no reliable way to handle error reporting in the
parent, produce the output in the child instead.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 3bc4181
History
Tip revision: 6c40894d2466d4e7fddc047a05116aa9d14712ee authored by Junio C Hamano on 30 August 2021, 23:06:22 UTC
The second batch
Tip revision: 6c40894
File Mode Size
Documentation
block-sha1
builtin
compat
contrib
git-gui
git_remote_helpers
gitk-git
gitweb
perl
po
ppc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 105 bytes
.gitignore -rw-r--r-- 3.2 KB
.mailmap -rw-r--r-- 2.7 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 752 bytes
INSTALL -rw-r--r-- 7.5 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 69.6 KB
README -rw-r--r-- 2.4 KB
RelNotes l--------- 32 bytes
abspath.c -rw-r--r-- 3.4 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 1.4 KB
advice.h -rw-r--r-- 432 bytes
alias.c -rw-r--r-- 1.7 KB
alloc.c -rw-r--r-- 1.6 KB
archive-tar.c -rw-r--r-- 6.3 KB
archive-zip.c -rw-r--r-- 7.3 KB
archive.c -rw-r--r-- 10.5 KB
archive.h -rw-r--r-- 927 bytes
attr.c -rw-r--r-- 17.3 KB
attr.h -rw-r--r-- 972 bytes
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 23.0 KB
bisect.h -rw-r--r-- 820 bytes
blob.c -rw-r--r-- 565 bytes
blob.h -rw-r--r-- 664 bytes
branch.c -rw-r--r-- 5.6 KB
branch.h -rw-r--r-- 1.1 KB
builtin.h -rw-r--r-- 8.8 KB
bundle.c -rw-r--r-- 10.3 KB
bundle.h -rw-r--r-- 627 bytes
cache-tree.c -rw-r--r-- 15.7 KB
cache-tree.h -rw-r--r-- 1.4 KB
cache.h -rw-r--r-- 41.2 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 538 bytes
check_bindir -rwxr-xr-x 369 bytes
color.c -rw-r--r-- 4.8 KB
color.h -rw-r--r-- 2.5 KB
combine-diff.c -rw-r--r-- 27.9 KB
command-list.txt -rw-r--r-- 7.7 KB
commit.c -rw-r--r-- 19.9 KB
commit.h -rw-r--r-- 5.6 KB
config.c -rw-r--r-- 34.0 KB
config.mak.in -rw-r--r-- 1.8 KB
configure.ac -rw-r--r-- 28.6 KB
connect.c -rw-r--r-- 14.3 KB
convert.c -rw-r--r-- 18.7 KB
copy.c -rw-r--r-- 1.6 KB
csum-file.c -rw-r--r-- 2.5 KB
csum-file.h -rw-r--r-- 761 bytes
ctype.c -rw-r--r-- 941 bytes
daemon.c -rw-r--r-- 27.5 KB
date.c -rw-r--r-- 22.7 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 400 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 15.5 KB
diff-lib.c -rw-r--r-- 14.4 KB
diff-no-index.c -rw-r--r-- 6.1 KB
diff.c -rw-r--r-- 123.2 KB
diff.h -rw-r--r-- 10.5 KB
diffcore-break.c -rw-r--r-- 8.7 KB
diffcore-delta.c -rw-r--r-- 5.4 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 6.8 KB
diffcore-rename.c -rw-r--r-- 18.3 KB
diffcore.h -rw-r--r-- 4.3 KB
dir.c -rw-r--r-- 29.9 KB
dir.h -rw-r--r-- 3.3 KB
editor.c -rw-r--r-- 1.1 KB
entry.c -rw-r--r-- 5.9 KB
environment.c -rw-r--r-- 6.2 KB
exec_cmd.c -rw-r--r-- 3.2 KB
exec_cmd.h -rw-r--r-- 487 bytes
fast-import.c -rw-r--r-- 83.5 KB
fetch-pack.h -rw-r--r-- 479 bytes
fixup-builtins -rwxr-xr-x 432 bytes
fsck.c -rw-r--r-- 9.4 KB
fsck.h -rw-r--r-- 1.0 KB
generate-cmdlist.sh -rwxr-xr-x 443 bytes
gettext.c -rw-r--r-- 290 bytes
gettext.h -rw-r--r-- 975 bytes
git-add--interactive.perl -rwxr-xr-x 35.4 KB
git-am.sh -rwxr-xr-x 19.5 KB
git-archimport.perl -rwxr-xr-x 36.0 KB
git-bisect.sh -rwxr-xr-x 10.1 KB
git-compat-util.h -rw-r--r-- 14.1 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.4 KB
git-cvsimport.perl -rwxr-xr-x 29.5 KB
git-cvsserver.perl -rwxr-xr-x 118.0 KB
git-difftool--helper.sh -rwxr-xr-x 1.7 KB
git-difftool.perl -rwxr-xr-x 2.6 KB
git-filter-branch.sh -rwxr-xr-x 12.0 KB
git-instaweb.sh -rwxr-xr-x 17.4 KB
git-lost-found.sh -rwxr-xr-x 554 bytes
git-merge-octopus.sh -rwxr-xr-x 2.2 KB
git-merge-one-file.sh -rwxr-xr-x 3.8 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 9.3 KB
git-mergetool.sh -rwxr-xr-x 8.7 KB
git-parse-remote.sh -rw-r--r-- 2.5 KB
git-pull.sh -rwxr-xr-x 7.3 KB
git-quiltimport.sh -rwxr-xr-x 3.3 KB
git-rebase--am.sh -rw-r--r-- 615 bytes
git-rebase--interactive.sh -rw-r--r-- 21.2 KB
git-rebase--merge.sh -rw-r--r-- 3.0 KB
git-rebase.sh -rwxr-xr-x 13.0 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote-testgit.py -rw-r--r-- 5.1 KB
git-repack.sh -rwxr-xr-x 4.5 KB
git-request-pull.sh -rwxr-xr-x 1.6 KB
git-send-email.perl -rwxr-xr-x 38.8 KB
git-sh-i18n.sh -rw-r--r-- 536 bytes
git-sh-setup.sh -rw-r--r-- 4.8 KB
git-stash.sh -rwxr-xr-x 9.9 KB
git-submodule.sh -rwxr-xr-x 18.6 KB
git-svn.perl -rwxr-xr-x 174.4 KB
git-web--browse.sh -rwxr-xr-x 4.1 KB
git.c -rw-r--r-- 16.4 KB
git.spec.in -rw-r--r-- 10.7 KB
graph.c -rw-r--r-- 34.4 KB
graph.h -rw-r--r-- 3.6 KB
grep.c -rw-r--r-- 25.7 KB
grep.h -rw-r--r-- 2.8 KB
hash.c -rw-r--r-- 2.5 KB
hash.h -rw-r--r-- 1.1 KB
help.c -rw-r--r-- 9.4 KB
help.h -rw-r--r-- 906 bytes
hex.c -rw-r--r-- 2.1 KB
http-backend.c -rw-r--r-- 13.2 KB
http-fetch.c -rw-r--r-- 2.1 KB
http-push.c -rw-r--r-- 51.0 KB
http-walker.c -rw-r--r-- 13.9 KB
http.c -rw-r--r-- 33.0 KB
http.h -rw-r--r-- 5.1 KB
ident.c -rw-r--r-- 6.3 KB
imap-send.c -rw-r--r-- 35.2 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
list-objects.c -rw-r--r-- 5.3 KB
list-objects.h -rw-r--r-- 422 bytes
ll-merge.c -rw-r--r-- 10.0 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 6.2 KB
log-tree.c -rw-r--r-- 16.7 KB
log-tree.h -rw-r--r-- 867 bytes
mailmap.c -rw-r--r-- 6.5 KB
mailmap.h -rw-r--r-- 263 bytes
match-trees.c -rw-r--r-- 8.7 KB
merge-file.c -rw-r--r-- 2.6 KB
merge-file.h -rw-r--r-- 175 bytes
merge-recursive.c -rw-r--r-- 48.9 KB
merge-recursive.h -rw-r--r-- 1.7 KB
name-hash.c -rw-r--r-- 4.6 KB
notes-cache.c -rw-r--r-- 2.1 KB
notes-cache.h -rw-r--r-- 500 bytes
notes-merge.c -rw-r--r-- 22.7 KB
notes-merge.h -rw-r--r-- 3.4 KB
notes.c -rw-r--r-- 35.8 KB
notes.h -rw-r--r-- 11.9 KB
object.c -rw-r--r-- 5.8 KB
object.h -rw-r--r-- 2.5 KB
pack-check.c -rw-r--r-- 4.6 KB
pack-refs.c -rw-r--r-- 3.4 KB
pack-refs.h -rw-r--r-- 465 bytes
pack-revindex.c -rw-r--r-- 4.0 KB
pack-revindex.h -rw-r--r-- 223 bytes
pack-write.c -rw-r--r-- 8.0 KB
pack.h -rw-r--r-- 2.3 KB
pager.c -rw-r--r-- 2.2 KB
parse-options.c -rw-r--r-- 17.1 KB
parse-options.h -rw-r--r-- 7.7 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 2.5 KB
patch-ids.h -rw-r--r-- 490 bytes
path.c -rw-r--r-- 14.8 KB
pkt-line.c -rw-r--r-- 4.5 KB
pkt-line.h -rw-r--r-- 589 bytes
preload-index.c -rw-r--r-- 2.4 KB
pretty.c -rw-r--r-- 32.3 KB
progress.c -rw-r--r-- 6.5 KB
progress.h -rw-r--r-- 504 bytes
quote.c -rw-r--r-- 10.9 KB
quote.h -rw-r--r-- 2.7 KB
reachable.c -rw-r--r-- 5.5 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 45.3 KB
reflog-walk.c -rw-r--r-- 7.6 KB
reflog-walk.h -rw-r--r-- 664 bytes
refs.c -rw-r--r-- 46.4 KB
refs.h -rw-r--r-- 4.7 KB
remote-curl.c -rw-r--r-- 20.7 KB
remote.c -rw-r--r-- 41.2 KB
remote.h -rw-r--r-- 4.2 KB
replace_object.c -rw-r--r-- 2.7 KB
rerere.c -rw-r--r-- 17.9 KB
rerere.h -rw-r--r-- 829 bytes
resolve-undo.c -rw-r--r-- 3.9 KB
resolve-undo.h -rw-r--r-- 546 bytes
revision.c -rw-r--r-- 61.4 KB
revision.h -rw-r--r-- 5.0 KB
run-command.c -rw-r--r-- 13.3 KB
run-command.h -rw-r--r-- 2.8 KB
send-pack.h -rw-r--r-- 403 bytes
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 20.6 KB
sh-i18n--envsubst.c -rw-r--r-- 10.7 KB
sha1-array.c -rw-r--r-- 1.2 KB
sha1-array.h -rw-r--r-- 631 bytes
sha1-lookup.c -rw-r--r-- 7.8 KB
sha1-lookup.h -rw-r--r-- 403 bytes
sha1_file.c -rw-r--r-- 70.6 KB
sha1_name.c -rw-r--r-- 28.6 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 5.1 KB
shortlog.h -rw-r--r-- 463 bytes
show-index.c -rw-r--r-- 2.2 KB
sideband.c -rw-r--r-- 3.4 KB
sideband.h -rw-r--r-- 326 bytes
sigchain.c -rw-r--r-- 969 bytes
sigchain.h -rw-r--r-- 215 bytes
strbuf.c -rw-r--r-- 7.9 KB
strbuf.h -rw-r--r-- 3.6 KB
string-list.c -rw-r--r-- 4.5 KB
string-list.h -rw-r--r-- 2.1 KB
submodule.c -rw-r--r-- 21.2 KB
submodule.h -rw-r--r-- 1.3 KB
symlinks.c -rw-r--r-- 8.4 KB
tag.c -rw-r--r-- 3.5 KB
tag.h -rw-r--r-- 517 bytes
tar.h -rw-r--r-- 644 bytes
test-chmtime.c -rw-r--r-- 2.6 KB
test-ctype.c -rw-r--r-- 1.4 KB
test-date.c -rw-r--r-- 1.4 KB
test-delta.c -rw-r--r-- 1.8 KB
test-dump-cache-tree.c -rw-r--r-- 1.5 KB
test-genrandom.c -rw-r--r-- 722 bytes
test-index-version.c -rw-r--r-- 264 bytes
test-line-buffer.c -rw-r--r-- 2.1 KB
test-match-trees.c -rw-r--r-- 588 bytes
test-mktemp.c -rw-r--r-- 269 bytes
test-obj-pool.c -rw-r--r-- 2.5 KB
test-parse-options.c -rw-r--r-- 3.0 KB
test-path-utils.c -rw-r--r-- 854 bytes
test-run-command.c -rw-r--r-- 840 bytes
test-sha1.c -rw-r--r-- 816 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
test-sigchain.c -rw-r--r-- 344 bytes
test-string-pool.c -rw-r--r-- 654 bytes
test-subprocess.c -rw-r--r-- 387 bytes
test-svn-fe.c -rw-r--r-- 312 bytes
test-treap.c -rw-r--r-- 1.7 KB
thread-utils.c -rw-r--r-- 1.3 KB
thread-utils.h -rw-r--r-- 209 bytes
trace.c -rw-r--r-- 4.7 KB
transport-helper.c -rw-r--r-- 28.4 KB
transport.c -rw-r--r-- 30.5 KB
transport.h -rw-r--r-- 5.7 KB
tree-diff.c -rw-r--r-- 8.4 KB
tree-walk.c -rw-r--r-- 14.6 KB
tree-walk.h -rw-r--r-- 1.9 KB
tree.c -rw-r--r-- 6.0 KB
tree.h -rw-r--r-- 897 bytes
unimplemented.sh -rw-r--r-- 100 bytes
unpack-trees.c -rw-r--r-- 46.4 KB
unpack-trees.h -rw-r--r-- 2.1 KB
upload-pack.c -rw-r--r-- 17.9 KB
url.c -rw-r--r-- 3.0 KB
url.h -rw-r--r-- 437 bytes
usage.c -rw-r--r-- 2.9 KB
userdiff.c -rw-r--r-- 8.8 KB
userdiff.h -rw-r--r-- 566 bytes
utf8.c -rw-r--r-- 13.0 KB
utf8.h -rw-r--r-- 658 bytes
walker.c -rw-r--r-- 7.2 KB
walker.h -rw-r--r-- 1.1 KB
wrap-for-bin.sh -rw-r--r-- 610 bytes
wrapper.c -rw-r--r-- 8.1 KB
write_or_die.c -rw-r--r-- 2.0 KB
ws.c -rw-r--r-- 9.6 KB
wt-status.c -rw-r--r-- 25.8 KB
wt-status.h -rw-r--r-- 2.1 KB
xdiff-interface.c -rw-r--r-- 8.2 KB
xdiff-interface.h -rw-r--r-- 1.1 KB
zlib.c -rw-r--r-- 1.2 KB

README

back to top