git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <johannes.schindelin@gmx.de>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
	Eric Sunshine <sunshine@sunshineco.com>,
	Jonathan Nieder <jrnieder@gmail.com>
Subject: [PATCH v2 0/3] mingw: introduce a way to avoid std handle inheritance
Date: Wed, 1 Nov 2017 18:10:21 +0100 (CET)	[thread overview]
Message-ID: <cover.1509556153.git.johannes.schindelin@gmx.de> (raw)
In-Reply-To: <cover.1509382976.git.johannes.schindelin@gmx.de>

Particularly when calling Git from applications, such as Visual Studio,
it is important that stdin/stdout/stderr are closed properly. However,
when spawning processes on Windows, those handles must be marked as
inheritable if we want to use them, but that flag is a global flag and
may very well be used by other spawned processes which then do not know
to close those handles.

As a workaround, introduce handling for the environment variables
GIT_REDIRECT_STD* to read/write from/to named pipes instead
(conceptually similar to Unix sockets, for you Linux folks). These do
not need to be marked as inheritable, as the process can simply open the
named pipe. No global flags. No problems.

This feature was introduced as an experimental feature into Git for
Windows v2.11.0(2) and has been tested ever since. I feel it is
well-tested enough that it can be integrated into core Git.

Changes since v1:

- clarified what the values of the environment variables mean.

- the feature is no longer marked experimental (I actually expected *some*
  remark about this, but it seems nobody looked at that patch all that closely
  *frown*)

- edited all commit messages heavily (primarily prodded by Jonathan's feedback).


Johannes Schindelin (3):
  mingw: add experimental feature to redirect standard handles
  mingw: optionally redirect stderr/stdout via the same handle
  mingw: document the standard handle redirection

 Documentation/git.txt | 18 ++++++++++++++++
 compat/mingw.c        | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
 t/t0001-init.sh       | 12 +++++++++++
 3 files changed, 88 insertions(+)


base-commit: cb5918aa0d50f50e83787f65c2ddc3dcb10159fe
Published-As: https://github.com/dscho/git/releases/tag/redirect-std-handles-v2
Fetch-It-Via: git fetch https://github.com/dscho/git redirect-std-handles-v2

Interdiff vs v1:
 diff --git a/Documentation/git.txt b/Documentation/git.txt
 index 10a98603b39..463b0eb0f5c 100644
 --- a/Documentation/git.txt
 +++ b/Documentation/git.txt
 @@ -712,14 +712,15 @@ of clones and fetches.
  `GIT_REDIRECT_STDIN`::
  `GIT_REDIRECT_STDOUT`::
  `GIT_REDIRECT_STDERR`::
 -	(EXPERIMENTAL) Windows-only: allow redirecting the standard
 -	input/output/error handles. This is particularly useful in
 -	multi-threaded applications where the canonical way to pass
 -	standard handles via `CreateProcess()` is not an option because
 -	it would require the handles to be marked inheritable (and
 -	consequently *every* spawned process would inherit them, possibly
 -	blocking regular Git operations). The primary intended use case
 -	is to use named pipes for communication.
 +	Windows-only: allow redirecting the standard input/output/error
 +	handles to paths specified by the environment variables. This is
 +	particularly useful in multi-threaded applications where the
 +	canonical way to pass standard handles via `CreateProcess()` is
 +	not an option because it would require the handles to be marked
 +	inheritable (and consequently *every* spawned process would
 +	inherit them, possibly blocking regular Git operations). The
 +	primary intended use case is to use named pipes for communication
 +	(e.g. `\\.\pipe\my-git-stdin-123`).
  +
  Two special values are supported: `off` will simply close the
  corresponding standard handle, and if `GIT_REDIRECT_STDERR` is
-- 
2.15.0.windows.1


  parent reply	other threads:[~2017-11-01 17:10 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-30 17:10 [PATCH 0/3] mingw: introduce a way to avoid std handle inheritance Johannes Schindelin
2017-10-30 17:10 ` [PATCH 1/3] mingw: add experimental feature to redirect standard handles Johannes Schindelin
2017-10-30 17:10 ` [PATCH 2/3] mingw: special-case GIT_REDIRECT_STDERR=2>&1 Johannes Schindelin
2017-10-30 17:10 ` [PATCH 3/3] mingw: document the experimental standard handle redirection Johannes Schindelin
2017-10-30 18:58   ` Eric Sunshine
2017-10-31 17:08     ` Johannes Schindelin
2017-11-01  4:58       ` Junio C Hamano
2017-11-01 16:37         ` Johannes Schindelin
2017-11-02  1:31           ` Junio C Hamano
2017-11-02 17:20             ` Johannes Schindelin
2017-11-03  1:50               ` Junio C Hamano
2017-11-03 11:51                 ` Johannes Schindelin
2017-10-30 20:55 ` [PATCH 0/3] mingw: introduce a way to avoid std handle inheritance Jonathan Nieder
2017-10-31  5:48   ` Junio C Hamano
2017-10-31 17:12   ` Johannes Schindelin
2017-10-31 18:09     ` Jonathan Nieder
2017-11-01 17:07       ` Johannes Schindelin
2017-11-01 17:17         ` Stefan Beller
2017-11-01 17:10 ` Johannes Schindelin [this message]
2017-11-01 17:10   ` [PATCH v2 1/3] mingw: add experimental feature to redirect standard handles Johannes Schindelin
2017-11-01 17:10   ` [PATCH v2 2/3] mingw: optionally redirect stderr/stdout via the same handle Johannes Schindelin
2017-11-01 17:10   ` [PATCH v2 3/3] mingw: document the standard handle redirection Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1509556153.git.johannes.schindelin@gmx.de \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).