mirror of
https://github.com/git/git.git
synced 2026-01-24 09:30:22 +00:00
mingw: special-case GIT_REDIRECT_STDERR=2>&1
The "2>&1" notation in POSIX shells implies that stderr is redirected to stdout. Let's special-case this value for the environment variable GIT_REDIRECT_STDERR to allow writing to the same destination as stdout. The functionality was suggested by Jeff Hostetler. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
@@ -2160,6 +2160,21 @@ static void maybe_redirect_std_handle(const wchar_t *key, DWORD std_id, int fd,
|
||||
CloseHandle(handle);
|
||||
return;
|
||||
}
|
||||
if (std_id == STD_ERROR_HANDLE && !wcscmp(buf, L"2>&1")) {
|
||||
handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
if (handle == INVALID_HANDLE_VALUE) {
|
||||
close(fd);
|
||||
handle = GetStdHandle(std_id);
|
||||
if (handle != INVALID_HANDLE_VALUE)
|
||||
CloseHandle(handle);
|
||||
} else {
|
||||
int new_fd = _open_osfhandle((intptr_t)handle, O_BINARY);
|
||||
SetStdHandle(std_id, handle);
|
||||
dup2(new_fd, fd);
|
||||
/* do *not* close the new_fd: that would close stdout */
|
||||
}
|
||||
return;
|
||||
}
|
||||
handle = CreateFileW(buf, desired_access, 0, NULL, create_flag,
|
||||
flags, NULL);
|
||||
if (handle != INVALID_HANDLE_VALUE) {
|
||||
|
||||
@@ -456,7 +456,13 @@ test_expect_success 're-init from a linked worktree' '
|
||||
test_expect_success MINGW 'redirect std handles' '
|
||||
GIT_REDIRECT_STDOUT=output.txt git rev-parse --git-dir &&
|
||||
test .git = "$(cat output.txt)" &&
|
||||
test -z "$(GIT_REDIRECT_STDOUT=off git rev-parse --git-dir)"
|
||||
test -z "$(GIT_REDIRECT_STDOUT=off git rev-parse --git-dir)" &&
|
||||
test_must_fail env \
|
||||
GIT_REDIRECT_STDOUT=output.txt \
|
||||
GIT_REDIRECT_STDERR="2>&1" \
|
||||
git rev-parse --git-dir --verify refs/invalid &&
|
||||
printf ".git\nfatal: Needed a single revision\n" >expect &&
|
||||
test_cmp expect output.txt
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user