зеркало из https://github.com/microsoft/git.git
Merge branch 'busybox-w32'
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Коммит
d987d082db
|
@ -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
|
||||
|
|
2
Makefile
2
Makefile
|
@ -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]:*)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 && "$@")
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче