mirror of
https://github.com/git/git.git
synced 2026-01-18 22:56:21 +00:00
Merge branch 'test-unc-fetch'
We need to merge it early, to avoid a conflict where we add another `#include` to `compat/mingw.c`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
@@ -901,7 +901,7 @@ char *mingw_getcwd(char *pointer, int len)
|
||||
* See http://msdn2.microsoft.com/en-us/library/17w5ykft(vs.71).aspx
|
||||
* (Parsing C++ Command-Line Arguments)
|
||||
*/
|
||||
static const char *quote_arg(const char *arg)
|
||||
static const char *quote_arg_msvc(const char *arg)
|
||||
{
|
||||
/* count chars to quote */
|
||||
int len = 0, n = 0;
|
||||
@@ -956,6 +956,37 @@ static const char *quote_arg(const char *arg)
|
||||
return q;
|
||||
}
|
||||
|
||||
#include "quote.h"
|
||||
|
||||
static const char *quote_arg_msys2(const char *arg)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
const char *p2 = arg, *p;
|
||||
|
||||
for (p = arg; *p; p++) {
|
||||
int ws = isspace(*p);
|
||||
if (!ws && *p != '\\' && *p != '"' && *p != '{')
|
||||
continue;
|
||||
if (!buf.len)
|
||||
strbuf_addch(&buf, '"');
|
||||
if (p != p2)
|
||||
strbuf_add(&buf, p2, p - p2);
|
||||
if (!ws && *p != '{')
|
||||
strbuf_addch(&buf, '\\');
|
||||
p2 = p;
|
||||
}
|
||||
|
||||
if (p == arg)
|
||||
strbuf_addch(&buf, '"');
|
||||
else if (!buf.len)
|
||||
return arg;
|
||||
else
|
||||
strbuf_add(&buf, p2, p - p2),
|
||||
|
||||
strbuf_addch(&buf, '"');
|
||||
return strbuf_detach(&buf, 0);
|
||||
}
|
||||
|
||||
static const char *parse_interpreter(const char *cmd)
|
||||
{
|
||||
static char buf[100];
|
||||
@@ -1089,6 +1120,34 @@ struct pinfo_t {
|
||||
static struct pinfo_t *pinfo = NULL;
|
||||
CRITICAL_SECTION pinfo_cs;
|
||||
|
||||
static int is_msys2_sh(const char *cmd)
|
||||
{
|
||||
if (cmd && !strcmp(cmd, "sh")) {
|
||||
static int ret = -1;
|
||||
char *p;
|
||||
|
||||
if (ret >= 0)
|
||||
return ret;
|
||||
|
||||
p = path_lookup(cmd, 0);
|
||||
if (!p)
|
||||
ret = 0;
|
||||
else {
|
||||
size_t len = strlen(p);
|
||||
ret = len > 15 &&
|
||||
is_dir_sep(p[len - 15]) &&
|
||||
!strncasecmp(p + len - 14, "usr", 3) &&
|
||||
is_dir_sep(p[len - 11]) &&
|
||||
!strncasecmp(p + len - 10, "bin", 3) &&
|
||||
is_dir_sep(p[len - 7]) &&
|
||||
!strcasecmp(p + len - 6, "sh.exe");
|
||||
free(p);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaenv,
|
||||
const char *dir, const char *prepend_cmd,
|
||||
int fhin, int fhout, int fherr)
|
||||
@@ -1099,6 +1158,8 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
|
||||
wchar_t wcmd[MAX_PATH], wdir[MAX_PATH], *wargs, *wenvblk = NULL;
|
||||
unsigned flags = CREATE_UNICODE_ENVIRONMENT;
|
||||
BOOL ret;
|
||||
const char *(*quote_arg)(const char *arg) =
|
||||
is_msys2_sh(*argv) ? quote_arg_msys2 : quote_arg_msvc;
|
||||
|
||||
/* Determine whether or not we are associated to a console */
|
||||
HANDLE cons = CreateFile("CONOUT$", GENERIC_WRITE,
|
||||
|
||||
@@ -177,4 +177,14 @@ test_expect_success 'GIT_TRACE with environment variables' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success MINGW 'verify curlies are quoted properly' '
|
||||
: force the rev-parse through the MSYS2 Bash &&
|
||||
git -c alias.r="!git rev-parse" r -- a{b}c >actual &&
|
||||
cat >expect <<-\EOF &&
|
||||
--
|
||||
a{b}c
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -40,6 +40,23 @@ test_expect_success clone '
|
||||
git clone "file://$UNCPATH" clone
|
||||
'
|
||||
|
||||
test_expect_success 'clone without file://' '
|
||||
git clone "$UNCPATH" clone-without-file
|
||||
'
|
||||
|
||||
test_expect_success 'clone with backslashed path' '
|
||||
BACKSLASHED="$(echo "$UNCPATH" | tr / \\\\)" &&
|
||||
git clone "$BACKSLASHED" backslashed
|
||||
'
|
||||
|
||||
test_expect_success fetch '
|
||||
git init to-fetch &&
|
||||
(
|
||||
cd to-fetch &&
|
||||
git fetch "$UNCPATH" master
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success push '
|
||||
(
|
||||
cd clone &&
|
||||
Reference in New Issue
Block a user