Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin 2019-02-07 14:35:33 +01:00
Родитель 69c8905661 6d19075ba0
Коммит d987d082db
44 изменённых файлов: 449 добавлений и 191 удалений

1
.gitattributes поставляемый
Просмотреть файл

@ -4,6 +4,7 @@
*.perl eol=lf diff=perl
*.pl eof=lf diff=perl
*.pm eol=lf diff=perl
*.png binary
*.py eol=lf diff=python
*.bat eol=crlf
CODE_OF_CONDUCT.md -whitespace

Просмотреть файл

@ -715,6 +715,7 @@ TEST_BUILTINS_OBJS += test-advise.o
TEST_BUILTINS_OBJS += test-bitmap.o
TEST_BUILTINS_OBJS += test-bloom.o
TEST_BUILTINS_OBJS += test-chmtime.o
TEST_BUILTINS_OBJS += test-cmp.o
TEST_BUILTINS_OBJS += test-config.o
TEST_BUILTINS_OBJS += test-crontab.o
TEST_BUILTINS_OBJS += test-csprng.o
@ -737,6 +738,7 @@ TEST_BUILTINS_OBJS += test-hash-speed.o
TEST_BUILTINS_OBJS += test-hash.o
TEST_BUILTINS_OBJS += test-hashmap.o
TEST_BUILTINS_OBJS += test-hexdump.o
TEST_BUILTINS_OBJS += test-iconv.o
TEST_BUILTINS_OBJS += test-index-version.o
TEST_BUILTINS_OBJS += test-json-writer.o
TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o

Просмотреть файл

@ -15,6 +15,7 @@
#include <sspi.h>
#include "win32/fscache.h"
#include "../attr.h"
#include "../string-list.h"
#define HCAST(type, handle) ((type)(intptr_t)handle)
@ -1586,6 +1587,65 @@ static char *lookup_prog(const char *dir, int dirlen, const char *cmd,
return NULL;
}
static char *path_lookup(const char *cmd, int exe_only);
static char *is_busybox_applet(const char *cmd)
{
static struct string_list applets = STRING_LIST_INIT_DUP;
static char *busybox_path;
static int busybox_path_initialized;
/* Avoid infinite loop */
if (!strncasecmp(cmd, "busybox", 7) &&
(!cmd[7] || !strcasecmp(cmd + 7, ".exe")))
return NULL;
if (!busybox_path_initialized) {
busybox_path = path_lookup("busybox.exe", 1);
busybox_path_initialized = 1;
}
/* Assume that sh is compiled in... */
if (!busybox_path || !strcasecmp(cmd, "sh"))
return xstrdup_or_null(busybox_path);
if (!applets.nr) {
struct child_process cp = CHILD_PROCESS_INIT;
struct strbuf buf = STRBUF_INIT;
char *p;
strvec_pushl(&cp.args, busybox_path, "--help", NULL);
if (capture_command(&cp, &buf, 2048)) {
string_list_append(&applets, "");
return NULL;
}
/* parse output */
p = strstr(buf.buf, "Currently defined functions:\n");
if (!p) {
warning("Could not parse output of busybox --help");
string_list_append(&applets, "");
return NULL;
}
p = strchrnul(p, '\n');
for (;;) {
size_t len;
p += strspn(p, "\n\t ,");
len = strcspn(p, "\n\t ,");
if (!len)
break;
p[len] = '\0';
string_list_insert(&applets, p);
p = p + len + 1;
}
}
return string_list_has_string(&applets, cmd) ?
xstrdup(busybox_path) : NULL;
}
/*
* Determines the absolute path of cmd using the split path in path.
* If cmd contains a slash or backslash, no lookup is performed.
@ -1614,6 +1674,9 @@ static char *path_lookup(const char *cmd, int exe_only)
path = sep + 1;
}
if (!prog && !isexe)
prog = is_busybox_applet(cmd);
return prog;
}
@ -1813,8 +1876,8 @@ static int is_msys2_sh(const char *cmd)
}
static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaenv,
const char *dir,
int prepend_cmd, int fhin, int fhout, int fherr)
const char *dir, const char *prepend_cmd,
int fhin, int fhout, int fherr)
{
static int restrict_handle_inheritance = -1;
STARTUPINFOEXW si;
@ -1905,9 +1968,9 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
/* concatenate argv, quoting args as we go */
strbuf_init(&args, 0);
if (prepend_cmd) {
char *quoted = (char *)quote_arg(cmd);
char *quoted = (char *)quote_arg(prepend_cmd);
strbuf_addstr(&args, quoted);
if (quoted != cmd)
if (quoted != prepend_cmd)
free(quoted);
}
for (; *argv; argv++) {
@ -2066,7 +2129,8 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
return (pid_t)pi.dwProcessId;
}
static pid_t mingw_spawnv(const char *cmd, const char **argv, int prepend_cmd)
static pid_t mingw_spawnv(const char *cmd, const char **argv,
const char *prepend_cmd)
{
return mingw_spawnve_fd(cmd, argv, NULL, NULL, prepend_cmd, 0, 1, 2);
}
@ -2094,14 +2158,14 @@ pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **deltaenv,
pid = -1;
}
else {
pid = mingw_spawnve_fd(iprog, argv, deltaenv, dir, 1,
pid = mingw_spawnve_fd(iprog, argv, deltaenv, dir, interpr,
fhin, fhout, fherr);
free(iprog);
}
argv[0] = argv0;
}
else
pid = mingw_spawnve_fd(prog, argv, deltaenv, dir, 0,
pid = mingw_spawnve_fd(prog, argv, deltaenv, dir, NULL,
fhin, fhout, fherr);
free(prog);
}
@ -2129,7 +2193,7 @@ static int try_shell_exec(const char *cmd, char *const *argv)
argv2[0] = (char *)cmd; /* full path to the script file */
COPY_ARRAY(&argv2[1], &argv[1], argc);
exec_id = trace2_exec(prog, argv2);
pid = mingw_spawnv(prog, argv2, 1);
pid = mingw_spawnv(prog, argv2, interpr);
if (pid >= 0) {
int status;
if (waitpid(pid, &status, 0) < 0)
@ -2153,7 +2217,7 @@ int mingw_execv(const char *cmd, char *const *argv)
int exec_id;
exec_id = trace2_exec(cmd, (const char **)argv);
pid = mingw_spawnv(cmd, (const char **)argv, 0);
pid = mingw_spawnv(cmd, (const char **)argv, NULL);
if (pid < 0) {
trace2_exec_result(exec_id, -1);
return -1;

Просмотреть файл

@ -738,6 +738,62 @@ else
NO_CURL = YesPlease
endif
endif
ifeq (i686,$(uname_M))
MINGW_PREFIX := mingw32
endif
ifeq (x86_64,$(uname_M))
MINGW_PREFIX := mingw64
endif
DESTDIR_WINDOWS = $(shell cygpath -aw '$(DESTDIR_SQ)')
DESTDIR_MIXED = $(shell cygpath -am '$(DESTDIR_SQ)')
install-mingit-test-artifacts:
install -m755 -d '$(DESTDIR_SQ)/usr/bin'
printf '%s\n%s\n' >'$(DESTDIR_SQ)/usr/bin/perl' \
"#!/mingw64/bin/busybox sh" \
"exec \"$(shell cygpath -am /usr/bin/perl.exe)\" \"\$$@\""
install -m755 -d '$(DESTDIR_SQ)'
printf '%s%s\n%s\n%s\n%s\n%s\n' >'$(DESTDIR_SQ)/init.bat' \
"PATH=$(DESTDIR_WINDOWS)\\$(MINGW_PREFIX)\\bin;" \
"C:\\WINDOWS;C:\\WINDOWS\\system32" \
"@set GIT_TEST_INSTALLED=$(DESTDIR_MIXED)/$(MINGW_PREFIX)/bin" \
"@`echo "$(DESTDIR_WINDOWS)" | sed 's/:.*/:/'`" \
"@cd `echo "$(DESTDIR_WINDOWS)" | sed 's/^.://'`\\test-git\\t" \
"@echo Now, run 'helper\\test-run-command testsuite'"
install -m755 -d '$(DESTDIR_SQ)/test-git'
sed 's/^\(NO_PERL\|NO_PYTHON\)=.*/\1=YesPlease/' \
<GIT-BUILD-OPTIONS >'$(DESTDIR_SQ)/test-git/GIT-BUILD-OPTIONS'
install -m755 -d '$(DESTDIR_SQ)/test-git/t/helper'
install -m755 $(TEST_PROGRAMS) '$(DESTDIR_SQ)/test-git/t/helper'
(cd t && $(TAR) cf - t[0-9][0-9][0-9][0-9] lib-diff) | \
(cd '$(DESTDIR_SQ)/test-git/t' && $(TAR) xf -)
install -m755 t/t556x_common t/*.sh '$(DESTDIR_SQ)/test-git/t'
install -m755 -d '$(DESTDIR_SQ)/test-git/templates'
(cd templates && $(TAR) cf - blt) | \
(cd '$(DESTDIR_SQ)/test-git/templates' && $(TAR) xf -)
# po/build/locale for t0200
install -m755 -d '$(DESTDIR_SQ)/test-git/po/build/locale'
(cd po/build/locale && $(TAR) cf - .) | \
(cd '$(DESTDIR_SQ)/test-git/po/build/locale' && $(TAR) xf -)
# git-daemon.exe for t5802, git-http-backend.exe for t5560
install -m755 -d '$(DESTDIR_SQ)/$(MINGW_PREFIX)/bin'
install -m755 git-daemon.exe git-http-backend.exe \
'$(DESTDIR_SQ)/$(MINGW_PREFIX)/bin'
# git-upload-archive (dashed) for t5000
install -m755 -d '$(DESTDIR_SQ)/$(MINGW_PREFIX)/bin'
install -m755 git-upload-archive.exe '$(DESTDIR_SQ)/$(MINGW_PREFIX)/bin'
# git-difftool--helper for t7800
install -m755 -d '$(DESTDIR_SQ)/$(MINGW_PREFIX)/libexec/git-core'
install -m755 git-difftool--helper \
'$(DESTDIR_SQ)/$(MINGW_PREFIX)/libexec/git-core'
endif
ifeq ($(uname_S),QNX)
COMPAT_CFLAGS += -DSA_RESTART=0

Просмотреть файл

@ -308,17 +308,30 @@ create_virtual_base() {
# Platform specific tweaks to work around some commands
case $(uname -s) in
*MINGW*)
# Windows has its own (incompatible) sort and find
sort () {
/usr/bin/sort "$@"
}
find () {
/usr/bin/find "$@"
}
# git sees Windows-style pwd
pwd () {
builtin pwd -W
}
if test -x /usr/bin/sort
then
# Windows has its own (incompatible) sort; override
sort () {
/usr/bin/sort "$@"
}
fi
if test -x /usr/bin/find
then
# Windows has its own (incompatible) find; override
find () {
/usr/bin/find "$@"
}
fi
# On Windows, Git wants Windows paths. But /usr/bin/pwd spits out
# Unix-style paths. At least in Bash, we have a builtin pwd that
# understands the -W option to force "mixed" paths, i.e. with drive
# prefix but still with forward slashes. Let's use that, if available.
if type builtin >/dev/null 2>&1
then
pwd () {
builtin pwd -W
}
fi
is_absolute_path () {
case "$1" in
[/\\]* | [A-Za-z]:*)

73
t/helper/test-cmp.c Normal file
Просмотреть файл

@ -0,0 +1,73 @@
#include "test-tool.h"
#include "git-compat-util.h"
#include "strbuf.h"
#include "gettext.h"
#include "parse-options.h"
#include "run-command.h"
#ifdef WIN32
#define NO_SUCH_DIR "\\\\.\\GLOBALROOT\\invalid"
#else
#define NO_SUCH_DIR "/dev/null"
#endif
static int run_diff(const char *path1, const char *path2)
{
const char *argv[] = {
"diff", "--no-index", NULL, NULL, NULL
};
const char *env[] = {
"GIT_PAGER=cat",
"GIT_DIR=" NO_SUCH_DIR,
"HOME=" NO_SUCH_DIR,
NULL
};
argv[2] = path1;
argv[3] = path2;
return run_command_v_opt_cd_env(argv,
RUN_COMMAND_NO_STDIN | RUN_GIT_CMD,
NULL, env);
}
int cmd__cmp(int argc, const char **argv)
{
FILE *f0, *f1;
struct strbuf b0 = STRBUF_INIT, b1 = STRBUF_INIT;
if (argc != 3)
die("Require exactly 2 arguments, got %d", argc);
if (!(f0 = !strcmp(argv[1], "-") ? stdin : fopen(argv[1], "r")))
return error_errno("could not open '%s'", argv[1]);
if (!(f1 = !strcmp(argv[2], "-") ? stdin : fopen(argv[2], "r"))) {
fclose(f0);
return error_errno("could not open '%s'", argv[2]);
}
for (;;) {
int r0 = strbuf_getline(&b0, f0);
int r1 = strbuf_getline(&b1, f1);
if (r0 == EOF) {
fclose(f0);
fclose(f1);
strbuf_release(&b0);
strbuf_release(&b1);
if (r1 == EOF)
return 0;
cmp_failed:
if (!run_diff(argv[1], argv[2]))
die("Huh? 'diff --no-index %s %s' succeeded",
argv[1], argv[2]);
return 1;
}
if (r1 == EOF || strbuf_cmp(&b0, &b1)) {
fclose(f0);
fclose(f1);
strbuf_release(&b0);
strbuf_release(&b1);
goto cmp_failed;
}
}
}

47
t/helper/test-iconv.c Normal file
Просмотреть файл

@ -0,0 +1,47 @@
#include "test-tool.h"
#include "git-compat-util.h"
#include "strbuf.h"
#include "gettext.h"
#include "parse-options.h"
#include "utf8.h"
int cmd__iconv(int argc, const char **argv)
{
struct strbuf buf = STRBUF_INIT;
char *from = NULL, *to = NULL, *p;
size_t len;
int ret = 0;
const char * const iconv_usage[] = {
N_("test-helper --iconv [<options>]"),
NULL
};
struct option options[] = {
OPT_STRING('f', "from-code", &from, "encoding", "from"),
OPT_STRING('t', "to-code", &to, "encoding", "to"),
OPT_END()
};
argc = parse_options(argc, argv, NULL, options,
iconv_usage, 0);
if (argc > 1 || !from || !to)
usage_with_options(iconv_usage, options);
if (!argc) {
if (strbuf_read(&buf, 0, 2048) < 0)
die_errno("Could not read from stdin");
} else if (strbuf_read_file(&buf, argv[0], 2048) < 0)
die_errno("Could not read from '%s'", argv[0]);
p = reencode_string_len(buf.buf, buf.len, to, from, &len);
if (!p)
die_errno("Could not reencode");
if (write(1, p, len) < 0)
ret = !!error_errno("Could not write %"PRIuMAX" bytes",
(uintmax_t)len);
strbuf_release(&buf);
free(p);
return ret;
}

Просмотреть файл

@ -18,6 +18,7 @@ static struct test_cmd cmds[] = {
{ "bitmap", cmd__bitmap },
{ "bloom", cmd__bloom },
{ "chmtime", cmd__chmtime },
{ "cmp", cmd__cmp },
{ "config", cmd__config },
{ "crontab", cmd__crontab },
{ "csprng", cmd__csprng },
@ -39,6 +40,7 @@ static struct test_cmd cmds[] = {
{ "hashmap", cmd__hashmap },
{ "hash-speed", cmd__hash_speed },
{ "hexdump", cmd__hexdump },
{ "iconv", cmd__iconv },
{ "index-version", cmd__index_version },
{ "json-writer", cmd__json_writer },
{ "lazy-init-name-hash", cmd__lazy_init_name_hash },

Просмотреть файл

@ -8,6 +8,7 @@ int cmd__advise_if_enabled(int argc, const char **argv);
int cmd__bitmap(int argc, const char **argv);
int cmd__bloom(int argc, const char **argv);
int cmd__chmtime(int argc, const char **argv);
int cmd__cmp(int argc, const char **argv);
int cmd__config(int argc, const char **argv);
int cmd__crontab(int argc, const char **argv);
int cmd__csprng(int argc, const char **argv);
@ -30,6 +31,7 @@ int cmd__getcwd(int argc, const char **argv);
int cmd__hashmap(int argc, const char **argv);
int cmd__hash_speed(int argc, const char **argv);
int cmd__hexdump(int argc, const char **argv);
int cmd__iconv(int argc, const char **argv);
int cmd__index_version(int argc, const char **argv);
int cmd__json_writer(int argc, const char **argv);
int cmd__lazy_init_name_hash(int argc, const char **argv);

Просмотреть файл

@ -4,6 +4,10 @@
. ../../GIT-BUILD-OPTIONS
INTEROP_ROOT=$(pwd)
BUILD_ROOT=$INTEROP_ROOT/build
case "$PATH" in
*\;*) PATH_SEP=\; ;;
*) PATH_SEP=: ;;
esac
build_version () {
if test -z "$1"
@ -57,7 +61,7 @@ wrap_git () {
write_script "$1" <<-EOF
GIT_EXEC_PATH="$2"
export GIT_EXEC_PATH
PATH="$2:\$PATH"
PATH="$2$PATH_SEP\$PATH"
export GIT_EXEC_PATH
exec git "\$@"
EOF
@ -71,7 +75,7 @@ generate_wrappers () {
echo >&2 fatal: test tried to run generic git
exit 1
EOF
PATH=$(pwd)/.bin:$PATH
PATH=$(pwd)/.bin$PATH_SEP$PATH
}
VERSION_A=${GIT_TEST_VERSION_A:-$VERSION_A}

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 5.5 KiB

После

Ширина:  |  Высота:  |  Размер: 5.5 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 275 B

После

Ширина:  |  Высота:  |  Размер: 275 B

Просмотреть файл

@ -214,7 +214,7 @@ setup_ext_wrapper () {
cd "$TRASH_DIRECTORY/remote" &&
eval "$*"
EOF
PATH=$TRASH_DIRECTORY:$PATH &&
PATH=$TRASH_DIRECTORY$PATH_SEP$PATH &&
export TRASH_DIRECTORY
'
}

Просмотреть файл

@ -39,7 +39,7 @@ test_expect_success 'looping aliases - internal execution' '
test_expect_success 'run-command formats empty args properly' '
test_must_fail env GIT_TRACE=1 git frotz a "" b " " c 2>actual.raw &&
sed -ne "/run_command:/s/.*trace: run_command: //p" actual.raw >actual &&
sed -ne "/run_command: git-frotz/s/.*trace: run_command: //p" actual.raw >actual &&
echo "git-frotz a '\'''\'' b '\'' '\'' c" >expect &&
test_cmp expect actual
'

Просмотреть файл

@ -8,8 +8,8 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh
TEST_ROOT="$PWD"
PATH=$TEST_ROOT:$PATH
TEST_ROOT="$(pwd)"
PATH=$PWD$PATH_SEP$PATH
write_script <<\EOF "$TEST_ROOT/rot13.sh"
tr \

Просмотреть файл

@ -138,25 +138,25 @@ ancestor /foo /fo -1
ancestor /foo /foo -1
ancestor /foo /bar -1
ancestor /foo /foo/bar -1
ancestor /foo /foo:/bar -1
ancestor /foo /:/foo:/bar 0
ancestor /foo /foo:/:/bar 0
ancestor /foo /:/bar:/foo 0
ancestor /foo "/foo$PATH_SEP/bar" -1
ancestor /foo "/$PATH_SEP/foo$PATH_SEP/bar" 0
ancestor /foo "/foo$PATH_SEP/$PATH_SEP/bar" 0
ancestor /foo "/$PATH_SEP/bar$PATH_SEP/foo" 0
ancestor /foo/bar / 0
ancestor /foo/bar /fo -1
ancestor /foo/bar /foo 4
ancestor /foo/bar /foo/ba -1
ancestor /foo/bar /:/fo 0
ancestor /foo/bar /foo:/foo/ba 4
ancestor /foo/bar "/$PATH_SEP/fo" 0
ancestor /foo/bar "/foo$PATH_SEP/foo/ba" 4
ancestor /foo/bar /bar -1
ancestor /foo/bar /fo -1
ancestor /foo/bar /foo:/bar 4
ancestor /foo/bar /:/foo:/bar 4
ancestor /foo/bar /foo:/:/bar 4
ancestor /foo/bar /:/bar:/fo 0
ancestor /foo/bar /:/bar 0
ancestor /foo/bar "/foo$PATH_SEP/bar" 4
ancestor /foo/bar "/$PATH_SEP/foo$PATH_SEP/bar" 4
ancestor /foo/bar "/foo$PATH_SEP/$PATH_SEP/bar" 4
ancestor /foo/bar "/$PATH_SEP/bar$PATH_SEP/fo" 0
ancestor /foo/bar "/$PATH_SEP/bar" 0
ancestor /foo/bar /foo 4
ancestor /foo/bar /foo:/bar 4
ancestor /foo/bar "/foo$PATH_SEP/bar" 4
ancestor /foo/bar /bar -1
# Windows-specific: DOS drives, network shares

Просмотреть файл

@ -70,7 +70,7 @@ test_expect_success 'run_command does not try to execute a directory' '
cat bin2/greet
EOF
PATH=$PWD/bin1:$PWD/bin2:$PATH \
PATH=$PWD/bin1$PATH_SEP$PWD/bin2$PATH_SEP$PATH \
test-tool run-command run-command greet >actual 2>err &&
test_cmp bin2/greet actual &&
test_must_be_empty err
@ -87,7 +87,7 @@ test_expect_success POSIXPERM 'run_command passes over non-executable file' '
cat bin2/greet
EOF
PATH=$PWD/bin1:$PWD/bin2:$PATH \
PATH=$PWD/bin1$PATH_SEP$PWD/bin2$PATH_SEP$PATH \
test-tool run-command run-command greet >actual 2>err &&
test_cmp bin2/greet actual &&
test_must_be_empty err
@ -107,7 +107,7 @@ test_expect_success POSIXPERM,SANITY 'unreadable directory in PATH' '
git config alias.nitfol "!echo frotz" &&
chmod a-rx local-command &&
(
PATH=./local-command:$PATH &&
PATH=./local-command$PATH_SEP$PATH &&
git nitfol >actual
) &&
echo frotz >expect &&

Просмотреть файл

@ -35,7 +35,7 @@ test_expect_success 'setup helper scripts' '
test -z "$pass" || echo password=$pass
EOF
PATH="$PWD:$PATH"
PATH="$PWD$PATH_SEP$PATH"
'
test_expect_success 'credential_fill invokes helper' '

Просмотреть файл

@ -81,9 +81,9 @@ then
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/"
test_fail subdir_ceil_at_top_slash
GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top"
GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top"
test_prefix subdir_ceil_at_top_no_resolve "sub/dir/"
GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top/"
GIT_CEILING_DIRECTORIES="$PATH_SEP$TRASH_ROOT/top/"
test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/"
fi
@ -113,13 +113,13 @@ GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
test_prefix subdir_ceil_at_subdi_slash "sub/dir/"
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub"
GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub"
test_fail second_of_two
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub:/bar"
GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub$PATH_SEP/bar"
test_fail first_of_two
GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub:/bar"
GIT_CEILING_DIRECTORIES="/foo$PATH_SEP$TRASH_ROOT/sub$PATH_SEP/bar"
test_fail second_of_three

Просмотреть файл

@ -17,7 +17,7 @@ test_cd_to_toplevel () {
test_expect_success $3 "$2" '
(
cd '"'$1'"' &&
PATH="$EXEC_PATH:$PATH" &&
PATH="$EXEC_PATH$PATH_SEP$PATH" &&
. git-sh-setup &&
cd_to_toplevel &&
[ "$(pwd -P)" = "$TOPLEVEL" ]

Просмотреть файл

@ -26,7 +26,7 @@ test_expect_success 'example 1: notes to add an Acked-by line' '
'
test_expect_success 'example 2: binary notes' '
cp "$TEST_DIRECTORY"/test-binary-1.png . &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png . &&
git checkout B &&
blob=$(git hash-object -w test-binary-1.png) &&
git notes --ref=logo add -C "$blob" &&

Просмотреть файл

@ -146,7 +146,7 @@ test_expect_success 'rebase -s funny -Xopt' '
git checkout -b test-funny main^ &&
test_commit funny &&
(
PATH=./test-bin:$PATH &&
PATH=./test-bin$PATH_SEP$PATH &&
git rebase -s funny -Xopt main
) &&
test -f funny.was.run

Просмотреть файл

@ -73,7 +73,7 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
EOF
chmod +x test-bin/git-merge-funny &&
(
PATH=./test-bin:$PATH &&
PATH=./test-bin$PATH_SEP$PATH &&
test_must_fail git rebase -s funny -Xopt main topic
) &&
test -f funny.was.run &&
@ -81,7 +81,7 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
echo "Resolved" >F2 &&
git add F2 &&
(
PATH=./test-bin:$PATH &&
PATH=./test-bin$PATH_SEP$PATH &&
git rebase --continue
) &&
test -f funny.was.run
@ -105,7 +105,7 @@ test_expect_success 'rebase -i --continue handles merge strategy and options' '
EOF
chmod +x test-bin/git-merge-funny &&
(
PATH=./test-bin:$PATH &&
PATH=./test-bin$PATH_SEP$PATH &&
test_must_fail git rebase -i -s funny -Xopt -Xfoo main topic
) &&
test -f funny.was.run &&
@ -113,7 +113,7 @@ test_expect_success 'rebase -i --continue handles merge strategy and options' '
echo "Resolved" >F2 &&
git add F2 &&
(
PATH=./test-bin:$PATH &&
PATH=./test-bin$PATH_SEP$PATH &&
git rebase --continue
) &&
test -f funny.was.run

Просмотреть файл

@ -1332,7 +1332,7 @@ test_expect_success 'stash -- <subdir> works with binary files' '
git reset &&
>subdir/untracked &&
>subdir/tracked &&
cp "$TEST_DIRECTORY"/test-binary-1.png subdir/tracked-binary &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png subdir/tracked-binary &&
git add subdir/tracked* &&
git stash -- subdir/ &&
test_path_is_missing subdir/tracked &&

Просмотреть файл

@ -20,7 +20,7 @@ test_expect_success 'prepare repository' '
echo AIT >a && echo BIT >b && echo CIT >c && echo DIT >d &&
git update-index --add a b c d &&
echo git >a &&
cat "$TEST_DIRECTORY"/test-binary-1.png >b &&
cat "$TEST_DIRECTORY"/lib-diff/test-binary-1.png >b &&
echo git >c &&
cat b b >d
'

Просмотреть файл

@ -34,7 +34,7 @@ test_expect_success 'binary changes do not count in lines' '
git reset --hard &&
echo a >a &&
echo c >c &&
cat "$TEST_DIRECTORY"/test-binary-1.png >d &&
cat "$TEST_DIRECTORY"/lib-diff/test-binary-1.png >d &&
cat >expect <<-\EOF &&
a | 1 +
c | 1 +

Просмотреть файл

@ -232,11 +232,11 @@ test_expect_success 'apply with --3way --cached and conflicts' '
test_expect_success 'apply binary file patch' '
git reset --hard main &&
cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-1.png" bin.png &&
git add bin.png &&
git commit -m "add binary file" &&
cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-2.png" bin.png &&
git diff --binary >bin.diff &&
git reset --hard &&
@ -247,11 +247,11 @@ test_expect_success 'apply binary file patch' '
test_expect_success 'apply binary file patch with 3way' '
git reset --hard main &&
cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-1.png" bin.png &&
git add bin.png &&
git commit -m "add binary file" &&
cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-2.png" bin.png &&
git diff --binary >bin.diff &&
git reset --hard &&
@ -262,11 +262,11 @@ test_expect_success 'apply binary file patch with 3way' '
test_expect_success 'apply full-index patch with 3way' '
git reset --hard main &&
cp "$TEST_DIRECTORY/test-binary-1.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-1.png" bin.png &&
git add bin.png &&
git commit -m "add binary file" &&
cp "$TEST_DIRECTORY/test-binary-2.png" bin.png &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-2.png" bin.png &&
git diff --full-index >bin.diff &&
git reset --hard &&

Просмотреть файл

@ -87,7 +87,7 @@ test_expect_success \
'mkdir a &&
echo simple textfile >a/a &&
mkdir a/bin &&
cp /bin/sh a/bin &&
cp "$TEST_DIRECTORY/lib-diff/test-binary-1.png" a/bin &&
printf "text\r" >a/text.cr &&
printf "text\r\n" >a/text.crlf &&
printf "text\n" >a/text.lf &&

Просмотреть файл

@ -27,7 +27,7 @@ test_expect_success 'setup proxy script' '
write_script proxy <<-\EOF
echo >&2 "proxying for $*"
cmd=$(./proxy-get-cmd)
cmd=$("$PERL_PATH" ./proxy-get-cmd)
echo >&2 "Running $cmd"
exec $cmd
EOF

Просмотреть файл

@ -11,6 +11,21 @@ repo_is_hardlinked() {
test_line_count = 0 output
}
if test_have_prereq MINGW,BUSYBOX
then
# BusyBox' `find` does not support `-links`. Besides, BusyBox-w32's
# lstat() does not report hard links, just like Git's mingw_lstat()
# (from where BusyBox-w32 got its initial implementation).
repo_is_hardlinked() {
for f in $(find "$1/objects" -type f)
do
"$SYSTEMROOT"/system32/fsutil.exe \
hardlink list $f >links &&
test_line_count -gt 1 links || return 1
done
}
fi
test_expect_success 'preparing origin repository' '
: >file && git add . && git commit -m1 &&
git clone --bare . a.git &&

Просмотреть файл

@ -40,7 +40,7 @@ test_expect_success 'access alternate via absolute path' '
'
test_expect_success 'access multiple alternates' '
check_obj "$PWD/one.git/objects:$PWD/two.git/objects" <<-EOF
check_obj "$PWD/one.git/objects$PATH_SEP$PWD/two.git/objects" <<-EOF
$one blob
$two blob
EOF
@ -76,7 +76,7 @@ test_expect_success 'access alternate via relative path (subdir)' '
quoted='"one.git\057objects"'
unquoted='two.git/objects'
test_expect_success 'mix of quoted and unquoted alternates' '
check_obj "$quoted:$unquoted" <<-EOF
check_obj "$quoted$PATH_SEP$unquoted" <<-EOF
$one blob
$two blob
EOF

Просмотреть файл

@ -85,7 +85,7 @@ test_expect_success 'set up fake git-daemon' '
"$TRASH_DIRECTORY/remote"
EOF
export TRASH_DIRECTORY &&
PATH=$TRASH_DIRECTORY:$PATH
PATH=$TRASH_DIRECTORY$PATH_SEP$PATH
'
test_expect_success 'ext command can connect to git daemon (no vhost)' '

Просмотреть файл

@ -14,8 +14,23 @@ test_expect_success 'setup repository to clone' '
'
test_proto "host:path" ssh "remote:repo.git"
test_proto "ssh://" ssh "ssh://remote$PWD/remote/repo.git"
test_proto "git+ssh://" ssh "git+ssh://remote$PWD/remote/repo.git"
hostdir="$PWD"
if test_have_prereq MINGW && test "/${PWD#/}" != "$PWD"
then
case "$PWD" in
[A-Za-z]:/*)
hostdir="${PWD#?:}"
;;
*)
skip_all="Unhandled PWD '$PWD'; skipping rest"
test_done
;;
esac
fi
test_proto "ssh://" ssh "ssh://remote$hostdir/remote/repo.git"
test_proto "git+ssh://" ssh "git+ssh://remote$hostdir/remote/repo.git"
# Don't even bother setting up a "-remote" directory, as ssh would generally
# complain about the bogus option rather than completing our request. Our

Просмотреть файл

@ -250,7 +250,7 @@ test_expect_success "expected conflict markers" '
test_expect_success 'binary files cannot be merged' '
test_must_fail git merge-file -p \
orig.txt "$TEST_DIRECTORY"/test-binary-1.png new1.txt 2> merge.err &&
orig.txt "$TEST_DIRECTORY"/lib-diff/test-binary-1.png new1.txt 2> merge.err &&
grep "Cannot merge binary files" merge.err
'

Просмотреть файл

@ -10,7 +10,7 @@ TEST_PASSES_SANITIZE_LEAK=true
test_expect_success setup '
cat "$TEST_DIRECTORY"/test-binary-1.png >m &&
cat "$TEST_DIRECTORY"/lib-diff/test-binary-1.png >m &&
git add m &&
git ls-files -s | sed -e "s/ 0 / 1 /" >E1 &&
test_tick &&

Просмотреть файл

@ -54,7 +54,7 @@ test_expect_success !MINGW,TTY 'LESS and LV envvars set by git-sh-setup' '
sane_unset LESS LV &&
PAGER="env >pager-env.out; wc" &&
export PAGER &&
PATH="$(git --exec-path):$PATH" &&
PATH="$(git --exec-path)$PATH_SEP$PATH" &&
export PATH &&
test_terminal sh -c ". git-sh-setup && git_pager"
) &&
@ -388,7 +388,7 @@ test_default_pager() {
EOF
chmod +x \$less &&
(
PATH=.:\$PATH &&
PATH=.$PATH_SEP\$PATH &&
export PATH &&
$full_command
) &&

Просмотреть файл

@ -23,7 +23,7 @@ test_expect_success 'set up custom strategy' '
EOF
chmod +x git-merge-theirs &&
PATH=.:$PATH &&
PATH=.$PATH_SEP$PATH &&
export PATH
'

Просмотреть файл

@ -53,7 +53,7 @@ test_expect_success SIMPLEPAGER 'git grep -O' '
EOF
echo grep.h >expect.notless &&
PATH=.:$PATH git grep -O GREP_PATTERN >out &&
PATH=.$PATH_SEP$PATH git grep -O GREP_PATTERN >out &&
{
test_cmp expect.less pager-args ||
test_cmp expect.notless pager-args

Просмотреть файл

@ -12,7 +12,7 @@ test_expect_success 'setup' '
echo distimdistim was called
EOF
PATH="$PATH:." &&
PATH="$PATH$PATH_SEP." &&
export PATH &&
git commit --allow-empty -m "a single log entry" &&

Просмотреть файл

@ -11,6 +11,13 @@ if ! test_have_prereq PERL; then
test_done
fi
case "$PWD" in
*:*)
skip_all='cvs would get confused by the colon in `pwd`; skipping tests'
test_done
;;
esac
cvs >/dev/null 2>&1
if test $? -ne 1
then
@ -55,8 +62,8 @@ test_expect_success \
'mkdir A B C D E F &&
echo hello1 >A/newfile1.txt &&
echo hello2 >B/newfile2.txt &&
cp "$TEST_DIRECTORY"/test-binary-1.png C/newfile3.png &&
cp "$TEST_DIRECTORY"/test-binary-1.png D/newfile4.png &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png C/newfile3.png &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png D/newfile4.png &&
git add A/newfile1.txt &&
git add B/newfile2.txt &&
git add C/newfile3.png &&
@ -81,8 +88,8 @@ test_expect_success \
rm -f B/newfile2.txt &&
rm -f C/newfile3.png &&
echo Hello5 >E/newfile5.txt &&
cp "$TEST_DIRECTORY"/test-binary-2.png D/newfile4.png &&
cp "$TEST_DIRECTORY"/test-binary-1.png F/newfile6.png &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-2.png D/newfile4.png &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png F/newfile6.png &&
git add E/newfile5.txt &&
git add F/newfile6.png &&
git commit -a -m "Test: Remove, add and update" &&
@ -170,7 +177,7 @@ test_expect_success \
'mkdir "G g" &&
echo ok then >"G g/with spaces.txt" &&
git add "G g/with spaces.txt" && \
cp "$TEST_DIRECTORY"/test-binary-1.png "G g/with spaces.png" && \
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png "G g/with spaces.png" && \
git add "G g/with spaces.png" &&
git commit -a -m "With spaces" &&
id=$(git rev-list --max-count=1 HEAD) &&
@ -182,7 +189,8 @@ test_expect_success \
test_expect_success \
'Update file with spaces in file name' \
'echo Ok then >>"G g/with spaces.txt" &&
cat "$TEST_DIRECTORY"/test-binary-1.png >>"G g/with spaces.png" && \
cat "$TEST_DIRECTORY"/lib-diff/test-binary-1.png \
>>"G g/with spaces.png" && \
git add "G g/with spaces.png" &&
git commit -a -m "Update with spaces" &&
id=$(git rev-list --max-count=1 HEAD) &&
@ -207,7 +215,7 @@ test_expect_success !MINGW \
'mkdir -p Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö &&
echo Foo >Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt &&
git add Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.txt &&
cp "$TEST_DIRECTORY"/test-binary-1.png Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png &&
cp "$TEST_DIRECTORY"/lib-diff/test-binary-1.png Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png &&
git add Å/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/å/ä/ö/gårdetsågårdet.png &&
git commit -a -m "Går det så går det" && \
id=$(git rev-list --max-count=1 HEAD) &&

Просмотреть файл

@ -286,7 +286,7 @@ test_expect_success 'exit when p4 fails to produce marshaled output' '
EOF
chmod 755 badp4dir/p4 &&
(
PATH="$TRASH_DIRECTORY/badp4dir:$PATH" &&
PATH="$TRASH_DIRECTORY/badp4dir$PATH_SEP$PATH" &&
export PATH &&
test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1
) &&

Просмотреть файл

@ -126,12 +126,7 @@ invalid_variable_name='${foo.bar}'
actual="$TRASH_DIRECTORY/actual"
if test_have_prereq MINGW
then
ROOT="$(pwd -W)"
else
ROOT="$(pwd)"
fi
ROOT="$(pwd)"
test_expect_success 'setup for __git_find_repo_path/__gitdir tests' '
mkdir -p subdir/subsubdir &&

Просмотреть файл

@ -1241,7 +1241,7 @@ test_expect_code () {
test_cmp () {
test "$#" -ne 2 && BUG "2 param"
eval "$GIT_TEST_CMP" '"$@"'
GIT_ALLOC_LIMIT=0 eval "$GIT_TEST_CMP" '"$@"'
}
# Check that the given config key has the expected value.
@ -1542,72 +1542,6 @@ test_skip_or_die () {
error "$2"
}
# The following mingw_* functions obey POSIX shell syntax, but are actually
# bash scripts, and are meant to be used only with bash on Windows.
# A test_cmp function that treats LF and CRLF equal and avoids to fork
# diff when possible.
mingw_test_cmp () {
# Read text into shell variables and compare them. If the results
# are different, use regular diff to report the difference.
local test_cmp_a= test_cmp_b=
# When text came from stdin (one argument is '-') we must feed it
# to diff.
local stdin_for_diff=
# Since it is difficult to detect the difference between an
# empty input file and a failure to read the files, we go straight
# to diff if one of the inputs is empty.
if test -s "$1" && test -s "$2"
then
# regular case: both files non-empty
mingw_read_file_strip_cr_ test_cmp_a <"$1"
mingw_read_file_strip_cr_ test_cmp_b <"$2"
elif test -s "$1" && test "$2" = -
then
# read 2nd file from stdin
mingw_read_file_strip_cr_ test_cmp_a <"$1"
mingw_read_file_strip_cr_ test_cmp_b
stdin_for_diff='<<<"$test_cmp_b"'
elif test "$1" = - && test -s "$2"
then
# read 1st file from stdin
mingw_read_file_strip_cr_ test_cmp_a
mingw_read_file_strip_cr_ test_cmp_b <"$2"
stdin_for_diff='<<<"$test_cmp_a"'
fi
test -n "$test_cmp_a" &&
test -n "$test_cmp_b" &&
test "$test_cmp_a" = "$test_cmp_b" ||
eval "diff -u \"\$@\" $stdin_for_diff"
}
# $1 is the name of the shell variable to fill in
mingw_read_file_strip_cr_ () {
# Read line-wise using LF as the line separator
# and use IFS to strip CR.
local line
while :
do
if IFS=$'\r' read -r -d $'\n' line
then
# good
line=$line$'\n'
else
# we get here at EOF, but also if the last line
# was not terminated by LF; in the latter case,
# some text was read
if test -z "$line"
then
# EOF, really
break
fi
fi
eval "$1=\$$1\$line"
done
}
# Like "env FOO=BAR some-program", but run inside a subshell, which means
# it also works for shell functions (though those functions cannot impact
# the environment outside of the test_env invocation).

Просмотреть файл

@ -15,6 +15,15 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/ .
# On Unix/Linux, the path separator is the colon, on other systems it
# may be different, though. On Windows, for example, it is a semicolon.
# If the PATH variable contains semicolons, it is pretty safe to assume
# that the path separator is a semicolon.
case "$PATH" in
*\;*) PATH_SEP=\; ;;
*) PATH_SEP=: ;;
esac
# Test the binaries we have just built. The tests are kept in
# t/ subdirectory and are run in 'trash directory' subdirectory.
if test -z "$TEST_DIRECTORY"
@ -468,23 +477,18 @@ EDITOR=:
# /usr/xpg4/bin/sh and /bin/ksh to bail out. So keep the unsets
# deriving from the command substitution clustered with the other
# ones.
unset VISUAL EMAIL LANGUAGE $("$PERL_PATH" -e '
my @env = keys %ENV;
my $ok = join("|", qw(
TRACE
DEBUG
TEST
.*_TEST
PROVE
VALGRIND
UNZIP
PERF_
CURL_VERBOSE
TRACE_CURL
));
my @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env);
print join("\n", @vars);
')
unset VISUAL EMAIL LANGUAGE $(env | sed -n \
-e '/^GIT_TRACE/d' \
-e '/^GIT_DEBUG/d' \
-e '/^GIT_TEST/d' \
-e '/^GIT_.*_TEST/d' \
-e '/^GIT_PROVE/d' \
-e '/^GIT_VALGRIND/d' \
-e '/^GIT_UNZIP/d' \
-e '/^GIT_PERF_/d' \
-e '/^GIT_CURL_VERBOSE/d' \
-e '/^GIT_TRACE_CURL/d' \
-e 's/^\(GIT_[^=]*\)=.*/\1/p')
unset XDG_CACHE_HOME
unset XDG_CONFIG_HOME
unset GITPERLLIB
@ -1332,7 +1336,7 @@ then
done
done
IFS=$OLDIFS
PATH=$GIT_VALGRIND/bin:$PATH
PATH=$GIT_VALGRIND/bin$PATH_SEP$PATH
GIT_EXEC_PATH=$GIT_VALGRIND/bin
export GIT_VALGRIND
GIT_VALGRIND_MODE="$valgrind"
@ -1344,7 +1348,7 @@ elif test -n "$GIT_TEST_INSTALLED"
then
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||
error "Cannot run git from $GIT_TEST_INSTALLED."
PATH=$GIT_TEST_INSTALLED:$GIT_BUILD_DIR/t/helper:$PATH
PATH=$GIT_TEST_INSTALLED$PATH_SEP$GIT_BUILD_DIR/t/helper$PATH_SEP$PATH
GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH}
else # normal case, use ../bin-wrappers only unless $with_dashes:
if test -n "$no_bin_wrappers"
@ -1360,12 +1364,12 @@ else # normal case, use ../bin-wrappers only unless $with_dashes:
fi
with_dashes=t
fi
PATH="$git_bin_dir:$PATH"
PATH="$git_bin_dir$PATH_SEP$PATH"
fi
GIT_EXEC_PATH=$GIT_BUILD_DIR
if test -n "$with_dashes"
then
PATH="$GIT_BUILD_DIR:$GIT_BUILD_DIR/t/helper:$PATH"
PATH="$GIT_BUILD_DIR$PATH_SEP$GIT_BUILD_DIR/t/helper$PATH_SEP$PATH"
fi
fi
GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt
@ -1525,17 +1529,30 @@ fi
uname_s=$(uname -s)
case $uname_s in
*MINGW*)
# Windows has its own (incompatible) sort and find
sort () {
/usr/bin/sort "$@"
}
find () {
/usr/bin/find "$@"
}
# git sees Windows-style pwd
pwd () {
builtin pwd -W
}
if test -x /usr/bin/sort
then
# Windows has its own (incompatible) sort; override
sort () {
/usr/bin/sort "$@"
}
fi
if test -x /usr/bin/find
then
# Windows has its own (incompatible) find; override
find () {
/usr/bin/find "$@"
}
fi
# On Windows, Git wants Windows paths. But /usr/bin/pwd spits out
# Unix-style paths. At least in Bash, we have a builtin pwd that
# understands the -W option to force "mixed" paths, i.e. with drive
# prefix but still with forward slashes. Let's use that, if available.
if type builtin >/dev/null 2>&1
then
pwd () {
builtin pwd -W
}
fi
# no POSIX permissions
# backslashes in pathspec are converted to '/'
# exec does not inherit the PID
@ -1544,7 +1561,13 @@ case $uname_s in
test_set_prereq SED_STRIPS_CR
test_set_prereq GREP_STRIPS_CR
test_set_prereq WINDOWS
GIT_TEST_CMP=mingw_test_cmp
GIT_TEST_CMP="test-tool cmp"
if ! type iconv >/dev/null 2>&1
then
iconv () {
test-tool iconv "$@"
}
fi
;;
*CYGWIN*)
test_set_prereq POSIXPERM
@ -1702,6 +1725,10 @@ test_lazy_prereq UNZIP '
test $? -ne 127
'
test_lazy_prereq BUSYBOX '
case "$($SHELL --help 2>&1)" in *BusyBox*) true;; *) false;; esac
'
run_with_limited_cmdline () {
(ulimit -s 128 && "$@")
}