mirror of
https://github.com/git/git
synced 2024-10-12 11:32:34 +00:00
Merge branch 'cb/unix-sockets-with-windows'
Adjust credential-cache helper to Windows. * cb/unix-sockets-with-windows: git-compat-util: include declaration for unix sockets in windows credential-cache: check for windows specific errors t0301: fixes for windows compatibility
This commit is contained in:
commit
c2e799012b
|
@ -11,6 +11,32 @@
|
||||||
#define FLAG_SPAWN 0x1
|
#define FLAG_SPAWN 0x1
|
||||||
#define FLAG_RELAY 0x2
|
#define FLAG_RELAY 0x2
|
||||||
|
|
||||||
|
#ifdef GIT_WINDOWS_NATIVE
|
||||||
|
|
||||||
|
static int connection_closed(int error)
|
||||||
|
{
|
||||||
|
return (error == EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int connection_fatally_broken(int error)
|
||||||
|
{
|
||||||
|
return (error != ENOENT) && (error != ENETDOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static int connection_closed(int error)
|
||||||
|
{
|
||||||
|
return (error == ECONNRESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int connection_fatally_broken(int error)
|
||||||
|
{
|
||||||
|
return (error != ENOENT) && (error != ECONNREFUSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static int send_request(const char *socket, const struct strbuf *out)
|
static int send_request(const char *socket, const struct strbuf *out)
|
||||||
{
|
{
|
||||||
int got_data = 0;
|
int got_data = 0;
|
||||||
|
@ -28,7 +54,7 @@ static int send_request(const char *socket, const struct strbuf *out)
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
r = read_in_full(fd, in, sizeof(in));
|
r = read_in_full(fd, in, sizeof(in));
|
||||||
if (r == 0 || (r < 0 && errno == ECONNRESET))
|
if (r == 0 || (r < 0 && connection_closed(errno)))
|
||||||
break;
|
break;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
die_errno("read error from cache daemon");
|
die_errno("read error from cache daemon");
|
||||||
|
@ -75,7 +101,7 @@ static void do_cache(const char *socket, const char *action, int timeout,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (send_request(socket, &buf) < 0) {
|
if (send_request(socket, &buf) < 0) {
|
||||||
if (errno != ENOENT && errno != ECONNREFUSED)
|
if (connection_fatally_broken(errno))
|
||||||
die_errno("unable to connect to cache daemon");
|
die_errno("unable to connect to cache daemon");
|
||||||
if (flags & FLAG_SPAWN) {
|
if (flags & FLAG_SPAWN) {
|
||||||
spawn_daemon(socket);
|
spawn_daemon(socket);
|
||||||
|
|
|
@ -160,6 +160,9 @@
|
||||||
# endif
|
# endif
|
||||||
#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */
|
#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
|
#ifndef NO_UNIX_SOCKETS
|
||||||
|
#include <afunix.h>
|
||||||
|
#endif
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#define GIT_WINDOWS_NATIVE
|
#define GIT_WINDOWS_NATIVE
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -9,6 +9,21 @@ test -z "$NO_UNIX_SOCKETS" || {
|
||||||
test_done
|
test_done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uname_s=$(uname -s)
|
||||||
|
case $uname_s in
|
||||||
|
*MINGW*)
|
||||||
|
test_path_is_socket () {
|
||||||
|
# `test -S` cannot detect Win10's Unix sockets
|
||||||
|
test_path_exists "$1"
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
test_path_is_socket () {
|
||||||
|
test -S "$1"
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# don't leave a stale daemon running
|
# don't leave a stale daemon running
|
||||||
test_atexit 'git credential-cache exit'
|
test_atexit 'git credential-cache exit'
|
||||||
|
|
||||||
|
@ -21,7 +36,7 @@ test_expect_success 'socket defaults to ~/.cache/git/credential/socket' '
|
||||||
rmdir -p .cache/git/credential/
|
rmdir -p .cache/git/credential/
|
||||||
" &&
|
" &&
|
||||||
test_path_is_missing "$HOME/.git-credential-cache" &&
|
test_path_is_missing "$HOME/.git-credential-cache" &&
|
||||||
test -S "$HOME/.cache/git/credential/socket"
|
test_path_is_socket "$HOME/.cache/git/credential/socket"
|
||||||
'
|
'
|
||||||
|
|
||||||
XDG_CACHE_HOME="$HOME/xdg"
|
XDG_CACHE_HOME="$HOME/xdg"
|
||||||
|
@ -31,7 +46,7 @@ helper_test cache
|
||||||
|
|
||||||
test_expect_success "use custom XDG_CACHE_HOME if set and default sockets are not created" '
|
test_expect_success "use custom XDG_CACHE_HOME if set and default sockets are not created" '
|
||||||
test_when_finished "git credential-cache exit" &&
|
test_when_finished "git credential-cache exit" &&
|
||||||
test -S "$XDG_CACHE_HOME/git/credential/socket" &&
|
test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket" &&
|
||||||
test_path_is_missing "$HOME/.git-credential-cache/socket" &&
|
test_path_is_missing "$HOME/.git-credential-cache/socket" &&
|
||||||
test_path_is_missing "$HOME/.cache/git/credential/socket"
|
test_path_is_missing "$HOME/.cache/git/credential/socket"
|
||||||
'
|
'
|
||||||
|
@ -48,7 +63,7 @@ test_expect_success 'credential-cache --socket option overrides default location
|
||||||
username=store-user
|
username=store-user
|
||||||
password=store-pass
|
password=store-pass
|
||||||
EOF
|
EOF
|
||||||
test -S "$HOME/dir/socket"
|
test_path_is_socket "$HOME/dir/socket"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success "use custom XDG_CACHE_HOME even if xdg socket exists" '
|
test_expect_success "use custom XDG_CACHE_HOME even if xdg socket exists" '
|
||||||
|
@ -62,7 +77,7 @@ test_expect_success "use custom XDG_CACHE_HOME even if xdg socket exists" '
|
||||||
username=store-user
|
username=store-user
|
||||||
password=store-pass
|
password=store-pass
|
||||||
EOF
|
EOF
|
||||||
test -S "$HOME/.cache/git/credential/socket" &&
|
test_path_is_socket "$HOME/.cache/git/credential/socket" &&
|
||||||
XDG_CACHE_HOME="$HOME/xdg" &&
|
XDG_CACHE_HOME="$HOME/xdg" &&
|
||||||
export XDG_CACHE_HOME &&
|
export XDG_CACHE_HOME &&
|
||||||
check approve cache <<-\EOF &&
|
check approve cache <<-\EOF &&
|
||||||
|
@ -71,7 +86,7 @@ test_expect_success "use custom XDG_CACHE_HOME even if xdg socket exists" '
|
||||||
username=store-user
|
username=store-user
|
||||||
password=store-pass
|
password=store-pass
|
||||||
EOF
|
EOF
|
||||||
test -S "$XDG_CACHE_HOME/git/credential/socket"
|
test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'use user socket if user directory exists' '
|
test_expect_success 'use user socket if user directory exists' '
|
||||||
|
@ -79,14 +94,15 @@ test_expect_success 'use user socket if user directory exists' '
|
||||||
git credential-cache exit &&
|
git credential-cache exit &&
|
||||||
rmdir \"\$HOME/.git-credential-cache/\"
|
rmdir \"\$HOME/.git-credential-cache/\"
|
||||||
" &&
|
" &&
|
||||||
mkdir -p -m 700 "$HOME/.git-credential-cache/" &&
|
mkdir -p "$HOME/.git-credential-cache/" &&
|
||||||
|
chmod 700 "$HOME/.git-credential-cache/" &&
|
||||||
check approve cache <<-\EOF &&
|
check approve cache <<-\EOF &&
|
||||||
protocol=https
|
protocol=https
|
||||||
host=example.com
|
host=example.com
|
||||||
username=store-user
|
username=store-user
|
||||||
password=store-pass
|
password=store-pass
|
||||||
EOF
|
EOF
|
||||||
test -S "$HOME/.git-credential-cache/socket"
|
test_path_is_socket "$HOME/.git-credential-cache/socket"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success SYMLINKS 'use user socket if user directory is a symlink to a directory' '
|
test_expect_success SYMLINKS 'use user socket if user directory is a symlink to a directory' '
|
||||||
|
@ -103,7 +119,7 @@ test_expect_success SYMLINKS 'use user socket if user directory is a symlink to
|
||||||
username=store-user
|
username=store-user
|
||||||
password=store-pass
|
password=store-pass
|
||||||
EOF
|
EOF
|
||||||
test -S "$HOME/.git-credential-cache/socket"
|
test_path_is_socket "$HOME/.git-credential-cache/socket"
|
||||||
'
|
'
|
||||||
|
|
||||||
helper_test_timeout cache --timeout=1
|
helper_test_timeout cache --timeout=1
|
||||||
|
|
Loading…
Reference in a new issue