Merge branch 'ab/test-2'
* ab/test-2: (51 commits) tests: factor HOME=$(pwd) in test-lib.sh test-lib: use subshell instead of cd $new && .. && cd $old tests: simplify "missing PREREQ" message t/t0000-basic.sh: Run the passing TODO test inside its own test-lib test-lib: Allow overriding of TEST_DIRECTORY test-lib: Use "$GIT_BUILD_DIR" instead of "$TEST_DIRECTORY"/../ test-lib: Use $TEST_DIRECTORY or $GIT_BUILD_DIR instead of $(pwd) and ../ test: Introduce $GIT_BUILD_DIR cvs tests: do not touch test CVS repositories shipped with source t/t9602-cvsimport-branches-tags.sh: Add a PERL prerequisite t/t9601-cvsimport-vendor-branch.sh: Add a PERL prerequisite t/t7105-reset-patch.sh: Add a PERL prerequisite t/t9001-send-email.sh: convert setup code to tests t/t9001-send-email.sh: change from skip_all=* to prereq skip t/t9001-send-email.sh: Remove needless PROG=* assignment t/t9600-cvsimport.sh: change from skip_all=* to prereq skip lib-patch-mode tests: change from skip_all=* to prereq skip t/t3701-add-interactive.sh: change from skip_all=* to prereq skip tests: Move FILEMODE prerequisite to lib-prereq-FILEMODE.sh t/Makefile: Create test-results dir for smoke target ... Conflicts: t/t6035-merge-dir-to-symlink.sh
This commit is contained in:
commit
a2c6726417
6
.gitignore
vendored
6
.gitignore
vendored
@ -186,6 +186,12 @@
|
||||
*.[aos]
|
||||
*.py[co]
|
||||
.depend/
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.gcov
|
||||
/coverage-untested-functions
|
||||
/cover_db/
|
||||
/cover_db_html/
|
||||
*+
|
||||
/config.mak
|
||||
/autom4te.cache
|
||||
|
25
Makefile
25
Makefile
@ -310,6 +310,7 @@ TCL_PATH = tclsh
|
||||
TCLTK_PATH = wish
|
||||
PTHREAD_LIBS = -lpthread
|
||||
PTHREAD_CFLAGS =
|
||||
GCOV = gcov
|
||||
|
||||
export TCL_PATH TCLTK_PATH
|
||||
|
||||
@ -1499,6 +1500,7 @@ ifndef V
|
||||
QUIET_BUILT_IN = @echo ' ' BUILTIN $@;
|
||||
QUIET_GEN = @echo ' ' GEN $@;
|
||||
QUIET_LNCP = @echo ' ' LN/CP $@;
|
||||
QUIET_GCOV = @echo ' ' GCOV $@;
|
||||
QUIET_SUBDIR0 = +@subdir=
|
||||
QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
|
||||
$(MAKE) $(PRINT_DIR) -C $$subdir
|
||||
@ -2324,11 +2326,18 @@ coverage:
|
||||
$(MAKE) coverage-build
|
||||
$(MAKE) coverage-report
|
||||
|
||||
object_dirs := $(sort $(dir $(OBJECTS)))
|
||||
coverage-clean:
|
||||
rm -f *.gcda *.gcno
|
||||
$(RM) $(addsuffix *.gcov,$(object_dirs))
|
||||
$(RM) $(addsuffix *.gcda,$(object_dirs))
|
||||
$(RM) $(addsuffix *.gcno,$(object_dirs))
|
||||
$(RM) coverage-untested-functions
|
||||
$(RM) -r cover_db/
|
||||
$(RM) -r cover_db_html/
|
||||
|
||||
COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
|
||||
COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov
|
||||
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
|
||||
|
||||
coverage-build: coverage-clean
|
||||
$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
|
||||
@ -2336,7 +2345,17 @@ coverage-build: coverage-clean
|
||||
-j1 test
|
||||
|
||||
coverage-report:
|
||||
gcov -b *.c
|
||||
$(QUIET_GCOV)for dir in $(object_dirs); do \
|
||||
$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
|
||||
done
|
||||
|
||||
coverage-untested-functions: coverage-report
|
||||
grep '^function.*called 0 ' *.c.gcov \
|
||||
| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
|
||||
| tee coverage-untested-functions
|
||||
> coverage-untested-functions
|
||||
|
||||
cover_db: coverage-report
|
||||
gcov2perl -db cover_db *.gcov
|
||||
|
||||
cover_db_html: cover_db
|
||||
cover -report html -outputdir cover_db_html cover_db
|
||||
|
42
t/Makefile
42
t/Makefile
@ -8,6 +8,7 @@
|
||||
|
||||
#GIT_TEST_OPTS=--verbose --debug
|
||||
SHELL_PATH ?= $(SHELL)
|
||||
PERL_PATH ?= /usr/bin/perl
|
||||
TAR ?= $(TAR)
|
||||
RM ?= rm -f
|
||||
|
||||
@ -28,7 +29,6 @@ pre-clean:
|
||||
|
||||
clean:
|
||||
$(RM) -r 'trash directory'.* test-results
|
||||
$(RM) t????/cvsroot/CVSROOT/?*
|
||||
$(RM) -r valgrind/bin
|
||||
$(RM) .prove
|
||||
|
||||
@ -49,4 +49,42 @@ full-svn-test:
|
||||
valgrind:
|
||||
GIT_TEST_OPTS=--valgrind $(MAKE)
|
||||
|
||||
.PHONY: pre-clean $(T) aggregate-results clean valgrind
|
||||
# Smoke testing targets
|
||||
-include ../GIT-VERSION-FILE
|
||||
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo unknown')
|
||||
uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo unknown')
|
||||
|
||||
test-results:
|
||||
mkdir -p test-results
|
||||
|
||||
test-results/git-smoke.tar.gz: test-results
|
||||
$(PERL_PATH) ./harness \
|
||||
--archive="test-results/git-smoke.tar.gz" \
|
||||
$(T)
|
||||
|
||||
smoke: test-results/git-smoke.tar.gz
|
||||
|
||||
SMOKE_UPLOAD_FLAGS =
|
||||
ifdef SMOKE_USERNAME
|
||||
SMOKE_UPLOAD_FLAGS += -F username="$(SMOKE_USERNAME)" -F password="$(SMOKE_PASSWORD)"
|
||||
endif
|
||||
ifdef SMOKE_COMMENT
|
||||
SMOKE_UPLOAD_FLAGS += -F comments="$(SMOKE_COMMENT)"
|
||||
endif
|
||||
ifdef SMOKE_TAGS
|
||||
SMOKE_UPLOAD_FLAGS += -F tags="$(SMOKE_TAGS)"
|
||||
endif
|
||||
|
||||
smoke_report: smoke
|
||||
curl \
|
||||
-H "Expect: " \
|
||||
-F project=Git \
|
||||
-F architecture="$(uname_M)" \
|
||||
-F platform="$(uname_S)" \
|
||||
-F revision="$(GIT_VERSION)" \
|
||||
-F report_file=@test-results/git-smoke.tar.gz \
|
||||
$(SMOKE_UPLOAD_FLAGS) \
|
||||
http://smoke.git.nix.is/app/projects/process_add_report/1 \
|
||||
| grep -v ^Redirecting
|
||||
|
||||
.PHONY: pre-clean $(T) aggregate-results clean valgrind smoke smoke_report
|
||||
|
201
t/README
201
t/README
@ -268,6 +268,18 @@ Do:
|
||||
git push gh &&
|
||||
test ...
|
||||
|
||||
- Check the test coverage for your tests. See the "Test coverage"
|
||||
below.
|
||||
|
||||
Don't blindly follow test coverage metrics, they're a good way to
|
||||
spot if you've missed something. If a new function you added
|
||||
doesn't have any coverage you're probably doing something wrong,
|
||||
but having 100% coverage doesn't necessarily mean that you tested
|
||||
everything.
|
||||
|
||||
Tests that are likely to smoke out future regressions are better
|
||||
than tests that just inflate the coverage metrics.
|
||||
|
||||
Don't:
|
||||
|
||||
- exit() within a <script> part.
|
||||
@ -307,9 +319,21 @@ Keep in mind:
|
||||
Skipping tests
|
||||
--------------
|
||||
|
||||
If you need to skip all the remaining tests you should set skip_all
|
||||
and immediately call test_done. The string you give to skip_all will
|
||||
be used as an explanation for why the test was skipped. for instance:
|
||||
If you need to skip tests you should do so be using the three-arg form
|
||||
of the test_* functions (see the "Test harness library" section
|
||||
below), e.g.:
|
||||
|
||||
test_expect_success PERL 'I need Perl' "
|
||||
'$PERL_PATH' -e 'hlagh() if unf_unf()'
|
||||
"
|
||||
|
||||
The advantage of skipping tests like this is that platforms that don't
|
||||
have the PERL and other optional dependencies get an indication of how
|
||||
many tests they're missing.
|
||||
|
||||
If the test code is too hairy for that (i.e. does a lot of setup work
|
||||
outside test assertions) you can also skip all remaining tests by
|
||||
setting skip_all and immediately call test_done:
|
||||
|
||||
if ! test_have_prereq PERL
|
||||
then
|
||||
@ -317,6 +341,9 @@ be used as an explanation for why the test was skipped. for instance:
|
||||
test_done
|
||||
fi
|
||||
|
||||
The string you give to skip_all will be used as an explanation for why
|
||||
the test was skipped.
|
||||
|
||||
End with test_done
|
||||
------------------
|
||||
|
||||
@ -350,6 +377,12 @@ library for your script to use.
|
||||
test_expect_success TTY 'git --paginate rev-list uses a pager' \
|
||||
' ... '
|
||||
|
||||
You can also supply a comma-separated list of prerequisites, in the
|
||||
rare case where your test depends on more than one:
|
||||
|
||||
test_expect_success PERL,PYTHON 'yo dawg' \
|
||||
' test $(perl -E 'print eval "1 +" . qx[python -c "print 2"]') == "4" '
|
||||
|
||||
- test_expect_failure [<prereq>] <message> <script>
|
||||
|
||||
This is NOT the opposite of test_expect_success, but is used
|
||||
@ -404,11 +437,12 @@ library for your script to use.
|
||||
- test_set_prereq SOME_PREREQ
|
||||
|
||||
Set a test prerequisite to be used later with test_have_prereq. The
|
||||
test-lib will set some prerequisites for you, e.g. PERL and PYTHON
|
||||
which are derived from ./GIT-BUILD-OPTIONS (grep test_set_prereq
|
||||
test-lib.sh for more). Others you can set yourself and use later
|
||||
with either test_have_prereq directly, or the three argument
|
||||
invocation of test_expect_success and test_expect_failure.
|
||||
test-lib will set some prerequisites for you, see the
|
||||
"Prerequisites" section below for a full list of these.
|
||||
|
||||
Others you can set yourself and use later with either
|
||||
test_have_prereq directly, or the three argument invocation of
|
||||
test_expect_success and test_expect_failure.
|
||||
|
||||
- test_have_prereq SOME PREREQ
|
||||
|
||||
@ -488,6 +522,45 @@ library for your script to use.
|
||||
...
|
||||
'
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
These are the prerequisites that the test library predefines with
|
||||
test_have_prereq.
|
||||
|
||||
See the prereq argument to the test_* functions in the "Test harness
|
||||
library" section above and the "test_have_prereq" function for how to
|
||||
use these, and "test_set_prereq" for how to define your own.
|
||||
|
||||
- PERL & PYTHON
|
||||
|
||||
Git wasn't compiled with NO_PERL=YesPlease or
|
||||
NO_PYTHON=YesPlease. Wrap any tests that need Perl or Python in
|
||||
these.
|
||||
|
||||
- POSIXPERM
|
||||
|
||||
The filesystem supports POSIX style permission bits.
|
||||
|
||||
- BSLASHPSPEC
|
||||
|
||||
Backslashes in pathspec are not directory separators. This is not
|
||||
set on Windows. See 6fd1106a for details.
|
||||
|
||||
- EXECKEEPSPID
|
||||
|
||||
The process retains the same pid across exec(2). See fb9a2bea for
|
||||
details.
|
||||
|
||||
- SYMLINKS
|
||||
|
||||
The filesystem we're on supports symbolic links. E.g. a FAT
|
||||
filesystem doesn't support these. See 704a3143 for details.
|
||||
|
||||
- SANITY
|
||||
|
||||
Test is not run by root user, and an attempt to write to an
|
||||
unwritable file is expected to fail correctly.
|
||||
|
||||
Tips for Writing Tests
|
||||
----------------------
|
||||
@ -515,3 +588,115 @@ the purpose of t0000-basic.sh, which is to isolate that level of
|
||||
validation in one place. Your test also ends up needing
|
||||
updating when such a change to the internal happens, so do _not_
|
||||
do it and leave the low level of validation to t0000-basic.sh.
|
||||
|
||||
Test coverage
|
||||
-------------
|
||||
|
||||
You can use the coverage tests to find code paths that are not being
|
||||
used or properly exercised yet.
|
||||
|
||||
To do that, run the coverage target at the top-level (not in the t/
|
||||
directory):
|
||||
|
||||
make coverage
|
||||
|
||||
That'll compile Git with GCC's coverage arguments, and generate a test
|
||||
report with gcov after the tests finish. Running the coverage tests
|
||||
can take a while, since running the tests in parallel is incompatible
|
||||
with GCC's coverage mode.
|
||||
|
||||
After the tests have run you can generate a list of untested
|
||||
functions:
|
||||
|
||||
make coverage-untested-functions
|
||||
|
||||
You can also generate a detailed per-file HTML report using the
|
||||
Devel::Cover module. To install it do:
|
||||
|
||||
# On Debian or Ubuntu:
|
||||
sudo aptitude install libdevel-cover-perl
|
||||
|
||||
# From the CPAN with cpanminus
|
||||
curl -L http://cpanmin.us | perl - --sudo --self-upgrade
|
||||
cpanm --sudo Devel::Cover
|
||||
|
||||
Then, at the top-level:
|
||||
|
||||
make cover_db_html
|
||||
|
||||
That'll generate a detailed cover report in the "cover_db_html"
|
||||
directory, which you can then copy to a webserver, or inspect locally
|
||||
in a browser.
|
||||
|
||||
Smoke testing
|
||||
-------------
|
||||
|
||||
The Git test suite has support for smoke testing. Smoke testing is
|
||||
when you submit the results of a test run to a central server for
|
||||
analysis and aggregation.
|
||||
|
||||
Running a smoke tester is an easy and valuable way of contributing to
|
||||
Git development, particularly if you have access to an uncommon OS on
|
||||
obscure hardware.
|
||||
|
||||
After building Git you can generate a smoke report like this in the
|
||||
"t" directory:
|
||||
|
||||
make clean smoke
|
||||
|
||||
You can also pass arguments via the environment. This should make it
|
||||
faster:
|
||||
|
||||
GIT_TEST_OPTS='--root=/dev/shm' TEST_JOBS=10 make clean smoke
|
||||
|
||||
The "smoke" target will run the Git test suite with Perl's
|
||||
"TAP::Harness" module, and package up the results in a .tar.gz archive
|
||||
with "TAP::Harness::Archive". The former is included with Perl v5.10.1
|
||||
or later, but you'll need to install the latter from the CPAN. See the
|
||||
"Test coverage" section above for how you might do that.
|
||||
|
||||
Once the "smoke" target finishes you'll see a message like this:
|
||||
|
||||
TAP Archive created at <path to git>/t/test-results/git-smoke.tar.gz
|
||||
|
||||
To upload the smoke report you need to have curl(1) installed, then
|
||||
do:
|
||||
|
||||
make smoke_report
|
||||
|
||||
To upload the report anonymously. Hopefully that'll return something
|
||||
like "Reported #7 added.".
|
||||
|
||||
If you're going to be uploading reports frequently please request a
|
||||
user account by E-Mailing gitsmoke@v.nix.is. Once you have a username
|
||||
and password you'll be able to do:
|
||||
|
||||
SMOKE_USERNAME=<username> SMOKE_PASSWORD=<password> make smoke_report
|
||||
|
||||
You can also add an additional comment to attach to the report, and/or
|
||||
a comma separated list of tags:
|
||||
|
||||
SMOKE_USERNAME=<username> SMOKE_PASSWORD=<password> \
|
||||
SMOKE_COMMENT=<comment> SMOKE_TAGS=<tags> \
|
||||
make smoke_report
|
||||
|
||||
Once the report is uploaded it'll be made available at
|
||||
http://smoke.git.nix.is, here's an overview of Recent Smoke Reports
|
||||
for Git:
|
||||
|
||||
http://smoke.git.nix.is/app/projects/smoke_reports/1
|
||||
|
||||
The reports will also be mirrored to GitHub every few hours:
|
||||
|
||||
http://github.com/gitsmoke/smoke-reports
|
||||
|
||||
The Smolder SQLite database is also mirrored and made available for
|
||||
download:
|
||||
|
||||
http://github.com/gitsmoke/smoke-database
|
||||
|
||||
Note that the database includes hashed (with crypt()) user passwords
|
||||
and E-Mail addresses. Don't use a valuable password for the smoke
|
||||
service if you have an account, or an E-Mail address you don't want to
|
||||
be publicly known. The user accounts are just meant to be convenient
|
||||
labels, they're not meant to be secure.
|
||||
|
21
t/harness
Executable file
21
t/harness
Executable file
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/perl
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long ();
|
||||
use TAP::Harness::Archive;
|
||||
|
||||
Getopt::Long::Parser->new(
|
||||
config => [ qw/ pass_through / ],
|
||||
)->getoptions(
|
||||
'jobs:1' => \(my $jobs = $ENV{TEST_JOBS}),
|
||||
'archive=s' => \my $archive,
|
||||
) or die "$0: Couldn't getoptions()";
|
||||
|
||||
TAP::Harness::Archive->new({
|
||||
jobs => $jobs,
|
||||
archive => $archive,
|
||||
($ENV{GIT_TEST_OPTS}
|
||||
? (test_args => [ split /\s+/, $ENV{GIT_TEST_OPTS} ])
|
||||
: ()),
|
||||
extra_properties => {},
|
||||
})->runtests(@ARGV);
|
@ -3,9 +3,6 @@
|
||||
. ./test-lib.sh
|
||||
|
||||
unset CVS_SERVER
|
||||
# for clean cvsps cache
|
||||
HOME=$(pwd)
|
||||
export HOME
|
||||
|
||||
if ! type cvs >/dev/null 2>&1
|
||||
then
|
||||
@ -30,6 +27,12 @@ case "$cvsps_version" in
|
||||
;;
|
||||
esac
|
||||
|
||||
setup_cvs_test_repository () {
|
||||
CVSROOT="$(pwd)/.cvsroot" &&
|
||||
cp -r "$TEST_DIRECTORY/$1/cvsroot" "$CVSROOT" &&
|
||||
export CVSROOT
|
||||
}
|
||||
|
||||
test_cvs_co () {
|
||||
# Usage: test_cvs_co BRANCH_NAME
|
||||
rm -rf module-cvs-"$1"
|
||||
|
@ -2,11 +2,6 @@
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping --patch tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
set_state () {
|
||||
echo "$3" > "$1" &&
|
||||
git add "$1" &&
|
||||
|
11
t/lib-prereq-FILEMODE.sh
Normal file
11
t/lib-prereq-FILEMODE.sh
Normal file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2010 Ævar Arnfjörð Bjarmason
|
||||
#
|
||||
|
||||
if test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
say 'filemode disabled on the filesystem'
|
||||
else
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
@ -54,9 +54,40 @@ test_expect_success 'success is reported like this' '
|
||||
test_expect_failure 'pretend we have a known breakage' '
|
||||
false
|
||||
'
|
||||
|
||||
test_expect_success 'pretend we have fixed a known breakage (run in sub test-lib)' "
|
||||
mkdir passing-todo &&
|
||||
(cd passing-todo &&
|
||||
cat >passing-todo.sh <<EOF &&
|
||||
#!$SHELL_PATH
|
||||
|
||||
test_description='A passing TODO test
|
||||
|
||||
This is run in a sub test-lib so that we do not get incorrect passing
|
||||
metrics
|
||||
'
|
||||
|
||||
# Point to the t/test-lib.sh, which isn't in ../ as usual
|
||||
TEST_DIRECTORY=\"$TEST_DIRECTORY\"
|
||||
. \"\$TEST_DIRECTORY\"/test-lib.sh
|
||||
|
||||
test_expect_failure 'pretend we have fixed a known breakage' '
|
||||
:
|
||||
'
|
||||
|
||||
test_done
|
||||
EOF
|
||||
chmod +x passing-todo.sh &&
|
||||
./passing-todo.sh >out 2>err &&
|
||||
! test -s err &&
|
||||
cat >expect <<EOF &&
|
||||
ok 1 - pretend we have fixed a known breakage # TODO known breakage
|
||||
# fixed 1 known breakage(s)
|
||||
# passed all 1 test(s)
|
||||
1..1
|
||||
EOF
|
||||
test_cmp expect out)
|
||||
"
|
||||
test_set_prereq HAVEIT
|
||||
haveit=no
|
||||
test_expect_success HAVEIT 'test runs if prerequisite is satisfied' '
|
||||
@ -73,6 +104,27 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test_set_prereq HAVETHIS
|
||||
haveit=no
|
||||
test_expect_success HAVETHIS,HAVEIT 'test runs if prerequisites are satisfied' '
|
||||
test_have_prereq HAVEIT &&
|
||||
test_have_prereq HAVETHIS &&
|
||||
haveit=yes
|
||||
'
|
||||
donthaveit=yes
|
||||
test_expect_success HAVEIT,DONTHAVEIT 'unmet prerequisites causes test to be skipped' '
|
||||
donthaveit=no
|
||||
'
|
||||
donthaveiteither=yes
|
||||
test_expect_success DONTHAVEIT,HAVEIT 'unmet prerequisites causes test to be skipped' '
|
||||
donthaveiteither=no
|
||||
'
|
||||
if test $haveit$donthaveit$donthaveiteither != yesyesyes
|
||||
then
|
||||
say "bug in test framework: multiple prerequisite tags do not work reliably"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clean=no
|
||||
test_expect_success 'tests clean up after themselves' '
|
||||
test_when_finished clean=yes
|
||||
|
@ -171,8 +171,6 @@ test_expect_success 'init with init.templatedir set' '
|
||||
mkdir templatedir-source &&
|
||||
echo Content >templatedir-source/file &&
|
||||
(
|
||||
HOME="`pwd`" &&
|
||||
export HOME &&
|
||||
test_config="${HOME}/.gitconfig" &&
|
||||
git config -f "$test_config" init.templatedir "${HOME}/templatedir-source" &&
|
||||
mkdir templatedir-set &&
|
||||
@ -188,8 +186,6 @@ test_expect_success 'init with init.templatedir set' '
|
||||
|
||||
test_expect_success 'init --bare/--shared overrides system/global config' '
|
||||
(
|
||||
HOME="`pwd`" &&
|
||||
export HOME &&
|
||||
test_config="$HOME"/.gitconfig &&
|
||||
unset GIT_CONFIG_NOGLOBAL &&
|
||||
git config -f "$test_config" core.bare false &&
|
||||
@ -205,8 +201,6 @@ test_expect_success 'init --bare/--shared overrides system/global config' '
|
||||
|
||||
test_expect_success 'init honors global core.sharedRepository' '
|
||||
(
|
||||
HOME="`pwd`" &&
|
||||
export HOME &&
|
||||
test_config="$HOME"/.gitconfig &&
|
||||
unset GIT_CONFIG_NOGLOBAL &&
|
||||
git config -f "$test_config" core.sharedRepository 0666 &&
|
||||
@ -301,7 +295,7 @@ test_expect_success 'init notices EEXIST (2)' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'init notices EPERM' '
|
||||
test_expect_success POSIXPERM,SANITY 'init notices EPERM' '
|
||||
rm -fr newdir &&
|
||||
(
|
||||
mkdir newdir &&
|
||||
|
@ -15,7 +15,7 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'write-tree should notice unwritable repository' '
|
||||
test_expect_success POSIXPERM,SANITY 'write-tree should notice unwritable repository' '
|
||||
|
||||
(
|
||||
chmod a-w .git/objects .git/objects/?? &&
|
||||
@ -27,7 +27,7 @@ test_expect_success POSIXPERM 'write-tree should notice unwritable repository' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'commit should notice unwritable repository' '
|
||||
test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository' '
|
||||
|
||||
(
|
||||
chmod a-w .git/objects .git/objects/?? &&
|
||||
@ -39,7 +39,7 @@ test_expect_success POSIXPERM 'commit should notice unwritable repository' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'update-index should notice unwritable repository' '
|
||||
test_expect_success POSIXPERM,SANITY 'update-index should notice unwritable repository' '
|
||||
|
||||
(
|
||||
echo 6O >file &&
|
||||
@ -52,7 +52,7 @@ test_expect_success POSIXPERM 'update-index should notice unwritable repository'
|
||||
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'add should notice unwritable repository' '
|
||||
test_expect_success POSIXPERM,SANITY 'add should notice unwritable repository' '
|
||||
|
||||
(
|
||||
echo b >file &&
|
||||
|
@ -177,7 +177,7 @@ test_expect_success SYMLINKS 'funny symlink in work tree' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success SYMLINKS 'funny symlink in work tree, un-unlink-able' '
|
||||
test_expect_success SYMLINKS,SANITY 'funny symlink in work tree, un-unlink-able' '
|
||||
|
||||
rm -fr a b &&
|
||||
git reset --hard &&
|
||||
|
@ -18,9 +18,11 @@ umask 077
|
||||
setfacl_out="$(setfacl -m u:root:rwx . 2>&1)"
|
||||
setfacl_ret=$?
|
||||
|
||||
if [ $setfacl_ret != 0 ]; then
|
||||
skip_all="Skipping ACL tests: unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')"
|
||||
test_done
|
||||
if test $setfacl_ret != 0
|
||||
then
|
||||
say "Unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')"
|
||||
else
|
||||
test_set_prereq SETFACL
|
||||
fi
|
||||
|
||||
check_perms_and_acl () {
|
||||
@ -34,7 +36,7 @@ check_perms_and_acl () {
|
||||
|
||||
dirs_to_set="./ .git/ .git/objects/ .git/objects/pack/"
|
||||
|
||||
test_expect_success 'Setup test repo' '
|
||||
test_expect_success SETFACL 'Setup test repo' '
|
||||
setfacl -m d:u::rwx,d:g::---,d:o:---,d:m:rwx $dirs_to_set &&
|
||||
setfacl -m m:rwx $dirs_to_set &&
|
||||
setfacl -m u:root:rwx $dirs_to_set &&
|
||||
@ -46,12 +48,12 @@ test_expect_success 'Setup test repo' '
|
||||
git commit -m "init"
|
||||
'
|
||||
|
||||
test_expect_success 'Objects creation does not break ACLs with restrictive umask' '
|
||||
test_expect_success SETFACL 'Objects creation does not break ACLs with restrictive umask' '
|
||||
# SHA1 for empty blob
|
||||
check_perms_and_acl .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
|
||||
'
|
||||
|
||||
test_expect_success 'git gc does not break ACLs with restrictive umask' '
|
||||
test_expect_success SETFACL 'git gc does not break ACLs with restrictive umask' '
|
||||
git gc &&
|
||||
check_perms_and_acl .git/objects/pack/*.pack
|
||||
'
|
||||
|
@ -6,13 +6,7 @@ test_description='git checkout to switch between branches with symlink<->dir'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all="symbolic links not supported - skipping tests"
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success SYMLINKS setup '
|
||||
|
||||
mkdir frotz &&
|
||||
echo hello >frotz/filfre &&
|
||||
@ -38,18 +32,18 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'switch from symlink to dir' '
|
||||
test_expect_success SYMLINKS 'switch from symlink to dir' '
|
||||
|
||||
git checkout master
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'Remove temporary directories & switch to master' '
|
||||
test_expect_success SYMLINKS 'Remove temporary directories & switch to master' '
|
||||
rm -fr frotz xyzzy nitfol &&
|
||||
git checkout -f master
|
||||
'
|
||||
|
||||
test_expect_success 'switch from dir to symlink' '
|
||||
test_expect_success SYMLINKS 'switch from dir to symlink' '
|
||||
|
||||
git checkout side
|
||||
|
||||
|
@ -4,7 +4,7 @@ test_description='git checkout --patch'
|
||||
|
||||
. ./lib-patch-mode.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
test_expect_success PERL 'setup' '
|
||||
mkdir dir &&
|
||||
echo parent > dir/foo &&
|
||||
echo dummy > bar &&
|
||||
@ -18,40 +18,40 @@ test_expect_success 'setup' '
|
||||
|
||||
# note: bar sorts before dir/foo, so the first 'n' is always to skip 'bar'
|
||||
|
||||
test_expect_success 'saying "n" does nothing' '
|
||||
test_expect_success PERL 'saying "n" does nothing' '
|
||||
set_and_save_state dir/foo work head &&
|
||||
(echo n; echo n) | git checkout -p &&
|
||||
verify_saved_state bar &&
|
||||
verify_saved_state dir/foo
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p' '
|
||||
test_expect_success PERL 'git checkout -p' '
|
||||
(echo n; echo y) | git checkout -p &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p with staged changes' '
|
||||
test_expect_success PERL 'git checkout -p with staged changes' '
|
||||
set_state dir/foo work index
|
||||
(echo n; echo y) | git checkout -p &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo index index
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p HEAD with NO staged changes: abort' '
|
||||
test_expect_success PERL 'git checkout -p HEAD with NO staged changes: abort' '
|
||||
set_and_save_state dir/foo work head &&
|
||||
(echo n; echo y; echo n) | git checkout -p HEAD &&
|
||||
verify_saved_state bar &&
|
||||
verify_saved_state dir/foo
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p HEAD with NO staged changes: apply' '
|
||||
test_expect_success PERL 'git checkout -p HEAD with NO staged changes: apply' '
|
||||
(echo n; echo y; echo y) | git checkout -p HEAD &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p HEAD with change already staged' '
|
||||
test_expect_success PERL 'git checkout -p HEAD with change already staged' '
|
||||
set_state dir/foo index index
|
||||
# the third n is to get out in case it mistakenly does not apply
|
||||
(echo n; echo y; echo n) | git checkout -p HEAD &&
|
||||
@ -59,14 +59,14 @@ test_expect_success 'git checkout -p HEAD with change already staged' '
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p HEAD^' '
|
||||
test_expect_success PERL 'git checkout -p HEAD^' '
|
||||
# the third n is to get out in case it mistakenly does not apply
|
||||
(echo n; echo y; echo n) | git checkout -p HEAD^ &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo parent parent
|
||||
'
|
||||
|
||||
test_expect_success 'git checkout -p handles deletion' '
|
||||
test_expect_success PERL 'git checkout -p handles deletion' '
|
||||
set_state dir/foo work index &&
|
||||
rm dir/foo &&
|
||||
(echo n; echo y) | git checkout -p &&
|
||||
@ -79,28 +79,28 @@ test_expect_success 'git checkout -p handles deletion' '
|
||||
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
|
||||
# the failure case (and thus get out of the loop).
|
||||
|
||||
test_expect_success 'path limiting works: dir' '
|
||||
test_expect_success PERL 'path limiting works: dir' '
|
||||
set_state dir/foo work head &&
|
||||
(echo y; echo n) | git checkout -p dir &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'path limiting works: -- dir' '
|
||||
test_expect_success PERL 'path limiting works: -- dir' '
|
||||
set_state dir/foo work head &&
|
||||
(echo y; echo n) | git checkout -p -- dir &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'path limiting works: HEAD^ -- dir' '
|
||||
test_expect_success PERL 'path limiting works: HEAD^ -- dir' '
|
||||
# the third n is to get out in case it mistakenly does not apply
|
||||
(echo y; echo n; echo n) | git checkout -p HEAD^ -- dir &&
|
||||
verify_saved_state bar &&
|
||||
verify_state dir/foo parent parent
|
||||
'
|
||||
|
||||
test_expect_success 'path limiting works: foo inside dir' '
|
||||
test_expect_success PERL 'path limiting works: foo inside dir' '
|
||||
set_state dir/foo work head &&
|
||||
# the third n is to get out in case it mistakenly does not apply
|
||||
(echo y; echo n; echo n) | (cd dir && git checkout -p foo) &&
|
||||
@ -108,7 +108,7 @@ test_expect_success 'path limiting works: foo inside dir' '
|
||||
verify_state dir/foo head head
|
||||
'
|
||||
|
||||
test_expect_success 'none of this moved HEAD' '
|
||||
test_expect_success PERL 'none of this moved HEAD' '
|
||||
verify_saved_head
|
||||
'
|
||||
|
||||
|
@ -24,19 +24,25 @@ EOF
|
||||
cat 2>/dev/null >"$p1" "$p0"
|
||||
echo 'Foo Bar Baz' >"$p2"
|
||||
|
||||
test -f "$p1" && cmp "$p0" "$p1" || {
|
||||
if test -f "$p1" && cmp "$p0" "$p1"
|
||||
then
|
||||
test_set_prereq TABS_IN_FILENAMES
|
||||
else
|
||||
# since FAT/NTFS does not allow tabs in filenames, skip this test
|
||||
skip_all='Your filesystem does not allow tabs in filenames, test skipped.'
|
||||
test_done
|
||||
}
|
||||
say 'Your filesystem does not allow tabs in filenames'
|
||||
fi
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' "
|
||||
echo 'just space
|
||||
no-funny' >expected
|
||||
test_expect_success 'git ls-files no-funny' \
|
||||
"
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git ls-files no-funny' \
|
||||
'git update-index --add "$p0" "$p2" &&
|
||||
git ls-files >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
t0=`git write-tree`
|
||||
echo "$t0" >t0
|
||||
|
||||
@ -45,18 +51,24 @@ just space
|
||||
no-funny
|
||||
"tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git ls-files with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git ls-files with-funny' \
|
||||
'git update-index --add "$p1" &&
|
||||
git ls-files >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' "
|
||||
echo 'just space
|
||||
no-funny
|
||||
tabs ," (dq) and spaces' >expected
|
||||
test_expect_success 'git ls-files -z with-funny' \
|
||||
tabs ,\" (dq) and spaces' >expected
|
||||
"
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
|
||||
'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
t1=`git write-tree`
|
||||
echo "$t1" >t1
|
||||
|
||||
@ -65,60 +77,78 @@ just space
|
||||
no-funny
|
||||
"tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git ls-tree with funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git ls-tree with funny' \
|
||||
'git ls-tree -r $t1 | sed -e "s/^[^ ]* //" >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat > expected <<\EOF
|
||||
A "tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git diff-index with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-index with-funny' \
|
||||
'git diff-index --name-status $t0 >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success 'git diff-tree with-funny' \
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree with-funny' \
|
||||
'git diff-tree --name-status $t0 $t1 >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' "
|
||||
echo 'A
|
||||
tabs ," (dq) and spaces' >expected
|
||||
test_expect_success 'git diff-index -z with-funny' \
|
||||
tabs ,\" (dq) and spaces' >expected
|
||||
"
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-index -z with-funny' \
|
||||
'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success 'git diff-tree -z with-funny' \
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree -z with-funny' \
|
||||
'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat > expected <<\EOF
|
||||
CNUM no-funny "tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git diff-tree -C with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree -C with-funny' \
|
||||
'git diff-tree -C --find-copies-harder --name-status \
|
||||
$t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat > expected <<\EOF
|
||||
RNUM no-funny "tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git diff-tree delete with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
|
||||
'git update-index --force-remove "$p0" &&
|
||||
git diff-index -M --name-status \
|
||||
$t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat > expected <<\EOF
|
||||
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
|
||||
similarity index NUM%
|
||||
rename from no-funny
|
||||
rename to "tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git diff-tree delete with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
|
||||
'git diff-index -M -p $t0 |
|
||||
sed -e "s/index [0-9]*%/index NUM%/" >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
chmod +x "$p1"
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
chmod +x "$p1" &&
|
||||
cat > expected <<\EOF
|
||||
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
|
||||
old mode 100644
|
||||
@ -127,31 +157,39 @@ similarity index NUM%
|
||||
rename from no-funny
|
||||
rename to "tabs\t,\" (dq) and spaces"
|
||||
EOF
|
||||
test_expect_success 'git diff-tree delete with-funny' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \
|
||||
'git diff-index -M -p $t0 |
|
||||
sed -e "s/index [0-9]*%/index NUM%/" >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat >expected <<\EOF
|
||||
"tabs\t,\" (dq) and spaces"
|
||||
1 files changed, 0 insertions(+), 0 deletions(-)
|
||||
EOF
|
||||
test_expect_success 'git diff-tree rename with-funny applied' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree rename with-funny applied' \
|
||||
'git diff-index -M -p $t0 |
|
||||
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expect' '
|
||||
cat > expected <<\EOF
|
||||
no-funny
|
||||
"tabs\t,\" (dq) and spaces"
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
EOF
|
||||
test_expect_success 'git diff-tree delete with-funny applied' \
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny applied' \
|
||||
'git diff-index -p $t0 |
|
||||
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
|
||||
test_cmp expected current'
|
||||
|
||||
test_expect_success 'git apply non-git diff' \
|
||||
test_expect_success TABS_IN_FILENAMES 'git apply non-git diff' \
|
||||
'git diff-index -p $t0 |
|
||||
sed -ne "/^[-+@]/p" |
|
||||
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
|
||||
|
@ -7,11 +7,9 @@ test_description='Test commit notes index (expensive!)'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test -z "$GIT_NOTES_TIMING_TESTS" && {
|
||||
skip_all="Skipping timing tests"
|
||||
test_done
|
||||
exit
|
||||
}
|
||||
test_set_prereq NOT_EXPENSIVE
|
||||
test -n "$GIT_NOTES_TIMING_TESTS" && test_set_prereq EXPENSIVE
|
||||
test -x /usr/bin/time && test_set_prereq USR_BIN_TIME
|
||||
|
||||
create_repo () {
|
||||
number_of_commits=$1
|
||||
@ -102,17 +100,27 @@ time_notes () {
|
||||
done
|
||||
}
|
||||
|
||||
for count in 10 100 1000 10000; do
|
||||
do_tests () {
|
||||
pr=$1
|
||||
count=$2
|
||||
|
||||
mkdir $count
|
||||
(cd $count;
|
||||
test_expect_success $pr 'setup / mkdir' '
|
||||
mkdir $count &&
|
||||
cd $count
|
||||
'
|
||||
|
||||
test_expect_success "setup $count" "create_repo $count"
|
||||
test_expect_success $pr "setup $count" "create_repo $count"
|
||||
|
||||
test_expect_success 'notes work' "test_notes $count"
|
||||
test_expect_success $pr 'notes work' "test_notes $count"
|
||||
|
||||
test_expect_success 'notes timing' "time_notes 100"
|
||||
)
|
||||
test_expect_success USR_BIN_TIME,$pr 'notes timing with /usr/bin/time' "time_notes 100"
|
||||
|
||||
test_expect_success $pr 'teardown / cd ..' 'cd ..'
|
||||
}
|
||||
|
||||
do_tests NOT_EXPENSIVE 10
|
||||
for count in 100 1000 10000; do
|
||||
do_tests EXPENSIVE $count
|
||||
done
|
||||
|
||||
test_done
|
||||
|
@ -28,22 +28,6 @@ embedded' &&
|
||||
git commit -m 'add files with tabs and newlines'
|
||||
"
|
||||
|
||||
# Determine rm behavior
|
||||
# Later we will try removing an unremovable path to make sure
|
||||
# git rm barfs, but if the test is run as root that cannot be
|
||||
# arranged.
|
||||
: >test-file
|
||||
chmod a-w .
|
||||
rm -f test-file 2>/dev/null
|
||||
if test -f test-file
|
||||
then
|
||||
test_set_prereq RO_DIR
|
||||
else
|
||||
skip_all='skipping removal failure test (perhaps running as root?)'
|
||||
fi
|
||||
chmod 775 .
|
||||
rm -f test-file
|
||||
|
||||
test_expect_success \
|
||||
'Pre-check that foo exists and is in index before git rm foo' \
|
||||
'[ -f foo ] && git ls-files --error-unmatch foo'
|
||||
|
@ -179,7 +179,7 @@ test_expect_success 'git add --refresh' '
|
||||
test -z "`git diff-index HEAD -- foo`"
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'git add should fail atomically upon an unreadable file' '
|
||||
test_expect_success POSIXPERM,SANITY 'git add should fail atomically upon an unreadable file' '
|
||||
git reset --hard &&
|
||||
date >foo1 &&
|
||||
date >foo2 &&
|
||||
@ -190,7 +190,7 @@ test_expect_success POSIXPERM 'git add should fail atomically upon an unreadable
|
||||
|
||||
rm -f foo2
|
||||
|
||||
test_expect_success POSIXPERM 'git add --ignore-errors' '
|
||||
test_expect_success POSIXPERM,SANITY 'git add --ignore-errors' '
|
||||
git reset --hard &&
|
||||
date >foo1 &&
|
||||
date >foo2 &&
|
||||
@ -201,7 +201,7 @@ test_expect_success POSIXPERM 'git add --ignore-errors' '
|
||||
|
||||
rm -f foo2
|
||||
|
||||
test_expect_success POSIXPERM 'git add (add.ignore-errors)' '
|
||||
test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors)' '
|
||||
git config add.ignore-errors 1 &&
|
||||
git reset --hard &&
|
||||
date >foo1 &&
|
||||
@ -212,7 +212,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors)' '
|
||||
'
|
||||
rm -f foo2
|
||||
|
||||
test_expect_success POSIXPERM 'git add (add.ignore-errors = false)' '
|
||||
test_expect_success POSIXPERM,SANITY 'git add (add.ignore-errors = false)' '
|
||||
git config add.ignore-errors 0 &&
|
||||
git reset --hard &&
|
||||
date >foo1 &&
|
||||
@ -223,7 +223,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors = false)' '
|
||||
'
|
||||
rm -f foo2
|
||||
|
||||
test_expect_success POSIXPERM '--no-ignore-errors overrides config' '
|
||||
test_expect_success POSIXPERM,SANITY '--no-ignore-errors overrides config' '
|
||||
git config add.ignore-errors 1 &&
|
||||
git reset --hard &&
|
||||
date >foo1 &&
|
||||
|
@ -2,22 +2,20 @@
|
||||
|
||||
test_description='add -i basic tests'
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping git add -i tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success 'setup (initial)' '
|
||||
test_expect_success PERL 'setup (initial)' '
|
||||
echo content >file &&
|
||||
git add file &&
|
||||
echo more >>file &&
|
||||
echo lines >>file
|
||||
'
|
||||
test_expect_success 'status works (initial)' '
|
||||
test_expect_success PERL 'status works (initial)' '
|
||||
git add -i </dev/null >output &&
|
||||
grep "+1/-0 *+2/-0 file" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
new file mode 100644
|
||||
index 0000000..d95f3ad
|
||||
@ -26,19 +24,21 @@ index 0000000..d95f3ad
|
||||
@@ -0,0 +1 @@
|
||||
+content
|
||||
EOF
|
||||
test_expect_success 'diff works (initial)' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'diff works (initial)' '
|
||||
(echo d; echo 1) | git add -i >output &&
|
||||
sed -ne "/new file/,/content/p" <output >diff &&
|
||||
test_cmp expected diff
|
||||
'
|
||||
test_expect_success 'revert works (initial)' '
|
||||
test_expect_success PERL 'revert works (initial)' '
|
||||
git add file &&
|
||||
(echo r; echo 1) | git add -i &&
|
||||
git ls-files >output &&
|
||||
! grep . output
|
||||
'
|
||||
|
||||
test_expect_success 'setup (commit)' '
|
||||
test_expect_success PERL 'setup (commit)' '
|
||||
echo baseline >file &&
|
||||
git add file &&
|
||||
git commit -m commit &&
|
||||
@ -47,10 +47,12 @@ test_expect_success 'setup (commit)' '
|
||||
echo more >>file &&
|
||||
echo lines >>file
|
||||
'
|
||||
test_expect_success 'status works (commit)' '
|
||||
test_expect_success PERL 'status works (commit)' '
|
||||
git add -i </dev/null >output &&
|
||||
grep "+1/-0 *+2/-0 file" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
index 180b47c..b6f2c08 100644
|
||||
--- a/file
|
||||
@ -59,60 +61,79 @@ index 180b47c..b6f2c08 100644
|
||||
baseline
|
||||
+content
|
||||
EOF
|
||||
test_expect_success 'diff works (commit)' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'diff works (commit)' '
|
||||
(echo d; echo 1) | git add -i >output &&
|
||||
sed -ne "/^index/,/content/p" <output >diff &&
|
||||
test_cmp expected diff
|
||||
'
|
||||
test_expect_success 'revert works (commit)' '
|
||||
test_expect_success PERL 'revert works (commit)' '
|
||||
git add file &&
|
||||
(echo r; echo 1) | git add -i &&
|
||||
git add -i </dev/null >output &&
|
||||
grep "unchanged *+3/-0 file" output
|
||||
'
|
||||
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
EOF
|
||||
cat >fake_editor.sh <<EOF
|
||||
EOF
|
||||
chmod a+x fake_editor.sh
|
||||
test_set_editor "$(pwd)/fake_editor.sh"
|
||||
test_expect_success 'dummy edit works' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup fake editor' '
|
||||
cat >fake_editor.sh <<EOF
|
||||
EOF
|
||||
chmod a+x fake_editor.sh &&
|
||||
test_set_editor "$(pwd)/fake_editor.sh" &&
|
||||
'
|
||||
|
||||
test_expect_success PERL 'dummy edit works' '
|
||||
(echo e; echo a) | git add -p &&
|
||||
git diff > diff &&
|
||||
test_cmp expected diff
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup patch' '
|
||||
cat >patch <<EOF
|
||||
@@ -1,1 +1,4 @@
|
||||
this
|
||||
+patch
|
||||
-doesn't
|
||||
-does not
|
||||
apply
|
||||
EOF
|
||||
echo "#!$SHELL_PATH" >fake_editor.sh
|
||||
cat >>fake_editor.sh <<\EOF
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup fake editor' '
|
||||
echo "#!$SHELL_PATH" >fake_editor.sh &&
|
||||
cat >>fake_editor.sh <<\EOF &&
|
||||
mv -f "$1" oldpatch &&
|
||||
mv -f patch "$1"
|
||||
EOF
|
||||
chmod a+x fake_editor.sh
|
||||
test_set_editor "$(pwd)/fake_editor.sh"
|
||||
test_expect_success 'bad edit rejected' '
|
||||
chmod a+x fake_editor.sh &&
|
||||
test_set_editor "$(pwd)/fake_editor.sh"
|
||||
'
|
||||
|
||||
test_expect_success PERL 'bad edit rejected' '
|
||||
git reset &&
|
||||
(echo e; echo n; echo d) | git add -p >output &&
|
||||
grep "hunk does not apply" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup patch' '
|
||||
cat >patch <<EOF
|
||||
this patch
|
||||
is garbage
|
||||
EOF
|
||||
test_expect_success 'garbage edit rejected' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'garbage edit rejected' '
|
||||
git reset &&
|
||||
(echo e; echo n; echo d) | git add -p >output &&
|
||||
grep "hunk does not apply" output
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup patch' '
|
||||
cat >patch <<EOF
|
||||
@@ -1,0 +1,0 @@
|
||||
baseline
|
||||
@ -120,6 +141,9 @@ cat >patch <<EOF
|
||||
+newcontent
|
||||
+lines
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
diff --git a/file b/file
|
||||
index b5dd6c9..f910ae9 100644
|
||||
@ -132,13 +156,15 @@ index b5dd6c9..f910ae9 100644
|
||||
+more
|
||||
lines
|
||||
EOF
|
||||
test_expect_success 'real edit works' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'real edit works' '
|
||||
(echo e; echo n; echo d) | git add -p &&
|
||||
git diff >output &&
|
||||
test_cmp expected output
|
||||
'
|
||||
|
||||
test_expect_success 'skip files similarly as commit -a' '
|
||||
test_expect_success PERL 'skip files similarly as commit -a' '
|
||||
git reset &&
|
||||
echo file >.gitignore &&
|
||||
echo changed >file &&
|
||||
@ -152,14 +178,7 @@ test_expect_success 'skip files similarly as commit -a' '
|
||||
'
|
||||
rm -f .gitignore
|
||||
|
||||
if test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
say '# skipping filemode tests (filesystem does not properly support modes)'
|
||||
else
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
||||
|
||||
test_expect_success FILEMODE 'patch does not affect mode' '
|
||||
test_expect_success PERL,FILEMODE 'patch does not affect mode' '
|
||||
git reset --hard &&
|
||||
echo content >>file &&
|
||||
chmod +x file &&
|
||||
@ -168,7 +187,7 @@ test_expect_success FILEMODE 'patch does not affect mode' '
|
||||
git diff file | grep "new mode"
|
||||
'
|
||||
|
||||
test_expect_success FILEMODE 'stage mode but not hunk' '
|
||||
test_expect_success PERL,FILEMODE 'stage mode but not hunk' '
|
||||
git reset --hard &&
|
||||
echo content >>file &&
|
||||
chmod +x file &&
|
||||
@ -178,7 +197,7 @@ test_expect_success FILEMODE 'stage mode but not hunk' '
|
||||
'
|
||||
|
||||
|
||||
test_expect_success FILEMODE 'stage mode and hunk' '
|
||||
test_expect_success PERL,FILEMODE 'stage mode and hunk' '
|
||||
git reset --hard &&
|
||||
echo content >>file &&
|
||||
chmod +x file &&
|
||||
@ -190,13 +209,14 @@ test_expect_success FILEMODE 'stage mode and hunk' '
|
||||
|
||||
# end of tests disabled when filemode is not usable
|
||||
|
||||
test_expect_success 'setup again' '
|
||||
test_expect_success PERL 'setup again' '
|
||||
git reset --hard &&
|
||||
test_chmod +x file &&
|
||||
echo content >>file
|
||||
'
|
||||
|
||||
# Write the patch file with a new line at the top and bottom
|
||||
test_expect_success PERL 'setup patch' '
|
||||
cat >patch <<EOF
|
||||
index 180b47c..b6f2c08 100644
|
||||
--- a/file
|
||||
@ -207,7 +227,10 @@ index 180b47c..b6f2c08 100644
|
||||
content
|
||||
+lastline
|
||||
EOF
|
||||
'
|
||||
|
||||
# Expected output, similar to the patch but w/ diff at the top
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
diff --git a/file b/file
|
||||
index b6f2c08..61b9053 100755
|
||||
@ -219,8 +242,10 @@ index b6f2c08..61b9053 100755
|
||||
content
|
||||
+lastline
|
||||
EOF
|
||||
'
|
||||
|
||||
# Test splitting the first patch, then adding both
|
||||
test_expect_success 'add first line works' '
|
||||
test_expect_success PERL 'add first line works' '
|
||||
git commit -am "clear local changes" &&
|
||||
git apply patch &&
|
||||
(echo s; echo y; echo y) | git add -p file &&
|
||||
@ -228,6 +253,7 @@ test_expect_success 'add first line works' '
|
||||
test_cmp expected diff
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
diff --git a/non-empty b/non-empty
|
||||
deleted file mode 100644
|
||||
@ -237,7 +263,9 @@ index d95f3ad..0000000
|
||||
@@ -1 +0,0 @@
|
||||
-content
|
||||
EOF
|
||||
test_expect_success 'deleting a non-empty file' '
|
||||
'
|
||||
|
||||
test_expect_success PERL 'deleting a non-empty file' '
|
||||
git reset --hard &&
|
||||
echo content >non-empty &&
|
||||
git add non-empty &&
|
||||
@ -248,13 +276,15 @@ test_expect_success 'deleting a non-empty file' '
|
||||
test_cmp expected diff
|
||||
'
|
||||
|
||||
test_expect_success PERL 'setup expected' '
|
||||
cat >expected <<EOF
|
||||
diff --git a/empty b/empty
|
||||
deleted file mode 100644
|
||||
index e69de29..0000000
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'deleting an empty file' '
|
||||
test_expect_success PERL 'deleting an empty file' '
|
||||
git reset --hard &&
|
||||
> empty &&
|
||||
git add empty &&
|
||||
|
@ -15,11 +15,13 @@ LF='
|
||||
DQ='"'
|
||||
|
||||
echo foo 2>/dev/null > "Name and an${HT}HT"
|
||||
test -f "Name and an${HT}HT" || {
|
||||
# since FAT/NTFS does not allow tabs in filenames, skip this test
|
||||
skip_all='Your filesystem does not allow tabs in filenames, test skipped.'
|
||||
test_done
|
||||
}
|
||||
if ! test -f "Name and an${HT}HT"
|
||||
then
|
||||
# FAT/NTFS does not allow tabs in filenames
|
||||
say 'Your filesystem does not allow tabs in filenames'
|
||||
else
|
||||
test_set_prereq TABS_IN_FILENAMES
|
||||
fi
|
||||
|
||||
for_each_name () {
|
||||
for name in \
|
||||
@ -31,7 +33,7 @@ for_each_name () {
|
||||
done
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success TABS_IN_FILENAMES 'setup' '
|
||||
|
||||
mkdir "$FN" &&
|
||||
for_each_name "echo initial >\"\$name\""
|
||||
@ -45,6 +47,7 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expected files' '
|
||||
cat >expect.quoted <<\EOF
|
||||
Name
|
||||
"Name and a\nLF"
|
||||
@ -72,75 +75,76 @@ With SP in it
|
||||
濱野/file
|
||||
濱野純
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from ls-files' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from ls-files' '
|
||||
|
||||
git ls-files >current && test_cmp expect.quoted current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-files' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-files' '
|
||||
|
||||
git diff --name-only >current &&
|
||||
test_cmp expect.quoted current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-index' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-index' '
|
||||
|
||||
git diff --name-only HEAD >current &&
|
||||
test_cmp expect.quoted current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-tree' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-tree' '
|
||||
|
||||
git diff --name-only HEAD^ HEAD >current &&
|
||||
test_cmp expect.quoted current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from ls-tree' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from ls-tree' '
|
||||
|
||||
git ls-tree --name-only -r HEAD >current &&
|
||||
test_cmp expect.quoted current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'setting core.quotepath' '
|
||||
test_expect_success TABS_IN_FILENAMES 'setting core.quotepath' '
|
||||
|
||||
git config --bool core.quotepath false
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from ls-files' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from ls-files' '
|
||||
|
||||
git ls-files >current && test_cmp expect.raw current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-files' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-files' '
|
||||
|
||||
git diff --name-only >current &&
|
||||
test_cmp expect.raw current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-index' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-index' '
|
||||
|
||||
git diff --name-only HEAD >current &&
|
||||
test_cmp expect.raw current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from diff-tree' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from diff-tree' '
|
||||
|
||||
git diff --name-only HEAD^ HEAD >current &&
|
||||
test_cmp expect.raw current
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check fully quoted output from ls-tree' '
|
||||
test_expect_success TABS_IN_FILENAMES 'check fully quoted output from ls-tree' '
|
||||
|
||||
git ls-tree --name-only -r HEAD >current &&
|
||||
test_cmp expect.raw current
|
||||
|
@ -3,7 +3,7 @@
|
||||
test_description='git checkout --patch'
|
||||
. ./lib-patch-mode.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
test_expect_success PERL 'setup' '
|
||||
mkdir dir &&
|
||||
echo parent > dir/foo &&
|
||||
echo dummy > bar &&
|
||||
@ -19,14 +19,14 @@ test_expect_success 'setup' '
|
||||
|
||||
# note: bar sorts before dir, so the first 'n' is always to skip 'bar'
|
||||
|
||||
test_expect_success 'saying "n" does nothing' '
|
||||
test_expect_success PERL 'saying "n" does nothing' '
|
||||
set_state dir/foo work index
|
||||
(echo n; echo n) | test_must_fail git stash save -p &&
|
||||
verify_state dir/foo work index &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'git stash -p' '
|
||||
test_expect_success PERL 'git stash -p' '
|
||||
(echo n; echo y) | git stash save -p &&
|
||||
verify_state dir/foo head index &&
|
||||
verify_saved_state bar &&
|
||||
@ -36,7 +36,7 @@ test_expect_success 'git stash -p' '
|
||||
verify_state bar dummy dummy
|
||||
'
|
||||
|
||||
test_expect_success 'git stash -p --no-keep-index' '
|
||||
test_expect_success PERL 'git stash -p --no-keep-index' '
|
||||
set_state dir/foo work index &&
|
||||
set_state bar bar_work bar_index &&
|
||||
(echo n; echo y) | git stash save -p --no-keep-index &&
|
||||
@ -48,7 +48,7 @@ test_expect_success 'git stash -p --no-keep-index' '
|
||||
verify_state bar dummy bar_index
|
||||
'
|
||||
|
||||
test_expect_success 'none of this moved HEAD' '
|
||||
test_expect_success PERL 'none of this moved HEAD' '
|
||||
verify_saved_head
|
||||
'
|
||||
|
||||
|
@ -12,13 +12,7 @@ by an edit for them.
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/diff-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'prepare reference tree' \
|
||||
'echo xyzzy | tr -d '\\\\'012 >yomin &&
|
||||
ln -s xyzzy frotz &&
|
||||
@ -26,7 +20,7 @@ test_expect_success \
|
||||
tree=$(git write-tree) &&
|
||||
echo $tree'
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'prepare work tree' \
|
||||
'mv frotz rezrov &&
|
||||
rm -f yomin &&
|
||||
@ -40,8 +34,9 @@ test_expect_success \
|
||||
# rezrov and nitfol are rename/copy of frotz and bozbar should be
|
||||
# a new creation.
|
||||
|
||||
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current
|
||||
cat >expected <<\EOF
|
||||
test_expect_success SYMLINKS 'setup diff output' "
|
||||
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
|
||||
cat >expected <<\EOF
|
||||
diff --git a/bozbar b/bozbar
|
||||
new file mode 120000
|
||||
--- /dev/null
|
||||
@ -65,8 +60,9 @@ deleted file mode 100644
|
||||
-xyzzy
|
||||
\ No newline at end of file
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'validate diff output' \
|
||||
'compare_diff_patch current expected'
|
||||
|
||||
|
@ -9,12 +9,6 @@ test_description='Test diff of symlinks.
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/diff-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
cat > expected << EOF
|
||||
diff --git a/frotz b/frotz
|
||||
new file mode 120000
|
||||
@ -26,7 +20,7 @@ index 0000000..7c465af
|
||||
\ No newline at end of file
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff new symlink' \
|
||||
'ln -s xyzzy frotz &&
|
||||
git update-index &&
|
||||
@ -35,7 +29,7 @@ test_expect_success \
|
||||
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree > current &&
|
||||
compare_diff_patch current expected'
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff unchanged symlink' \
|
||||
'tree=$(git write-tree) &&
|
||||
git update-index frotz &&
|
||||
@ -52,7 +46,7 @@ index 7c465af..0000000
|
||||
\ No newline at end of file
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff removed symlink' \
|
||||
'mv frotz frotz2 &&
|
||||
git diff-index -M -p $tree > current &&
|
||||
@ -62,7 +56,7 @@ cat > expected << EOF
|
||||
diff --git a/frotz b/frotz
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff identical, but newly created symlink' \
|
||||
'ln -s xyzzy frotz &&
|
||||
git diff-index -M -p $tree > current &&
|
||||
@ -80,14 +74,14 @@ index 7c465af..df1db54 120000
|
||||
\ No newline at end of file
|
||||
EOF
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff different symlink' \
|
||||
'rm frotz &&
|
||||
ln -s yxyyz frotz &&
|
||||
git diff-index -M -p $tree > current &&
|
||||
compare_diff_patch current expected'
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success SYMLINKS \
|
||||
'diff symlinks with non-existing targets' \
|
||||
'ln -s narf pinky &&
|
||||
ln -s take\ over brain &&
|
||||
|
@ -13,12 +13,14 @@ P1='pathname with HT'
|
||||
P2='pathname with SP'
|
||||
P3='pathname
|
||||
with LF'
|
||||
: 2>/dev/null >"$P1" && test -f "$P1" && rm -f "$P1" || {
|
||||
skip_all='Your filesystem does not allow tabs in filenames, test skipped.'
|
||||
test_done
|
||||
}
|
||||
if : 2>/dev/null >"$P1" && test -f "$P1" && rm -f "$P1"
|
||||
then
|
||||
test_set_prereq TABS_IN_FILENAMES
|
||||
else
|
||||
say 'Your filesystem does not allow tabs in filenames'
|
||||
fi
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success TABS_IN_FILENAMES setup '
|
||||
echo P0.0 >"$P0.0" &&
|
||||
echo P0.1 >"$P0.1" &&
|
||||
echo P0.2 >"$P0.2" &&
|
||||
@ -38,6 +40,7 @@ test_expect_success setup '
|
||||
:
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expected files' '
|
||||
cat >expect <<\EOF
|
||||
rename pathname.1 => "Rpathname\twith HT.0" (100%)
|
||||
rename pathname.3 => "Rpathname\nwith LF.0" (100%)
|
||||
@ -47,11 +50,14 @@ cat >expect <<\EOF
|
||||
rename pathname.0 => Rpathname.0 (100%)
|
||||
rename "pathname\twith HT.0" => Rpathname.1 (100%)
|
||||
EOF
|
||||
test_expect_success 'git diff --summary -M HEAD' '
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff --summary -M HEAD' '
|
||||
git diff --summary -M HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'setup expected files' '
|
||||
cat >expect <<\EOF
|
||||
pathname.1 => "Rpathname\twith HT.0" | 0
|
||||
pathname.3 => "Rpathname\nwith LF.0" | 0
|
||||
@ -62,7 +68,9 @@ cat >expect <<\EOF
|
||||
"pathname\twith HT.0" => Rpathname.1 | 0
|
||||
7 files changed, 0 insertions(+), 0 deletions(-)
|
||||
EOF
|
||||
test_expect_success 'git diff --stat -M HEAD' '
|
||||
'
|
||||
|
||||
test_expect_success TABS_IN_FILENAMES 'git diff --stat -M HEAD' '
|
||||
git diff --stat -M HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
@ -4,13 +4,7 @@ test_description='typechange rename detection'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success SYMLINKS setup '
|
||||
|
||||
rm -f foo bar &&
|
||||
cat "$TEST_DIRECTORY"/../COPYING >foo &&
|
||||
@ -56,7 +50,7 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'cross renames to be detected for regular files' '
|
||||
test_expect_success SYMLINKS 'cross renames to be detected for regular files' '
|
||||
|
||||
git diff-tree five six -r --name-status -B -M | sort >actual &&
|
||||
{
|
||||
@ -67,7 +61,7 @@ test_expect_success 'cross renames to be detected for regular files' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'cross renames to be detected for typechange' '
|
||||
test_expect_success SYMLINKS 'cross renames to be detected for typechange' '
|
||||
|
||||
git diff-tree one two -r --name-status -B -M | sort >actual &&
|
||||
{
|
||||
@ -78,7 +72,7 @@ test_expect_success 'cross renames to be detected for typechange' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'moves and renames' '
|
||||
test_expect_success SYMLINKS 'moves and renames' '
|
||||
|
||||
git diff-tree three four -r --name-status -B -M | sort >actual &&
|
||||
{
|
||||
|
@ -7,6 +7,7 @@ test_description='git apply handling copy/rename patch.
|
||||
|
||||
'
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
|
||||
|
||||
# setup
|
||||
|
||||
@ -31,13 +32,6 @@ test_expect_success setup \
|
||||
test_expect_success apply \
|
||||
'git apply --index --stat --summary --apply test-patch'
|
||||
|
||||
if test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
say 'filemode disabled on the filesystem'
|
||||
else
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
||||
|
||||
test_expect_success FILEMODE validate \
|
||||
'test -f bar && ls -l bar | grep "^-..x......"'
|
||||
|
||||
|
@ -9,13 +9,7 @@ test_description='git apply should not get confused with type changes.
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success 'setup repository and commits' '
|
||||
test_expect_success SYMLINKS 'setup repository and commits' '
|
||||
echo "hello world" > foo &&
|
||||
echo "hi planet" > bar &&
|
||||
git update-index --add foo bar &&
|
||||
@ -48,7 +42,7 @@ test_expect_success 'setup repository and commits' '
|
||||
git branch foo-baz-renamed-from-foo
|
||||
'
|
||||
|
||||
test_expect_success 'file renamed from foo to foo/baz' '
|
||||
test_expect_success SYMLINKS 'file renamed from foo to foo/baz' '
|
||||
git checkout -f initial &&
|
||||
git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
|
||||
git apply --index < patch
|
||||
@ -56,7 +50,7 @@ test_expect_success 'file renamed from foo to foo/baz' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'file renamed from foo/baz to foo' '
|
||||
test_expect_success SYMLINKS 'file renamed from foo/baz to foo' '
|
||||
git checkout -f foo-baz-renamed-from-foo &&
|
||||
git diff-tree -M -p HEAD initial > patch &&
|
||||
git apply --index < patch
|
||||
@ -64,7 +58,7 @@ test_expect_success 'file renamed from foo/baz to foo' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'directory becomes file' '
|
||||
test_expect_success SYMLINKS 'directory becomes file' '
|
||||
git checkout -f foo-becomes-a-directory &&
|
||||
git diff-tree -p HEAD initial > patch &&
|
||||
git apply --index < patch
|
||||
@ -72,7 +66,7 @@ test_expect_success 'directory becomes file' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'file becomes directory' '
|
||||
test_expect_success SYMLINKS 'file becomes directory' '
|
||||
git checkout -f initial &&
|
||||
git diff-tree -p HEAD foo-becomes-a-directory > patch &&
|
||||
git apply --index < patch
|
||||
@ -80,7 +74,7 @@ test_expect_success 'file becomes directory' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'file becomes symlink' '
|
||||
test_expect_success SYMLINKS 'file becomes symlink' '
|
||||
git checkout -f initial &&
|
||||
git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
|
||||
git apply --index < patch
|
||||
@ -88,21 +82,21 @@ test_expect_success 'file becomes symlink' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'symlink becomes file' '
|
||||
test_expect_success SYMLINKS 'symlink becomes file' '
|
||||
git checkout -f foo-symlinked-to-bar &&
|
||||
git diff-tree -p HEAD foo-back-to-file > patch &&
|
||||
git apply --index < patch
|
||||
'
|
||||
test_debug 'cat patch'
|
||||
|
||||
test_expect_success 'binary file becomes symlink' '
|
||||
test_expect_success SYMLINKS 'binary file becomes symlink' '
|
||||
git checkout -f foo-becomes-binary &&
|
||||
git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
|
||||
git apply --index < patch
|
||||
'
|
||||
test_debug 'cat patch'
|
||||
|
||||
test_expect_success 'symlink becomes binary file' '
|
||||
test_expect_success SYMLINKS 'symlink becomes binary file' '
|
||||
git checkout -f foo-symlinked-to-bar &&
|
||||
git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
|
||||
git apply --index < patch
|
||||
@ -110,7 +104,7 @@ test_expect_success 'symlink becomes binary file' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'symlink becomes directory' '
|
||||
test_expect_success SYMLINKS 'symlink becomes directory' '
|
||||
git checkout -f foo-symlinked-to-bar &&
|
||||
git diff-tree -p HEAD foo-becomes-a-directory > patch &&
|
||||
git apply --index < patch
|
||||
@ -118,7 +112,7 @@ test_expect_success 'symlink becomes directory' '
|
||||
test_debug 'cat patch'
|
||||
|
||||
|
||||
test_expect_success 'directory becomes symlink' '
|
||||
test_expect_success SYMLINKS 'directory becomes symlink' '
|
||||
git checkout -f foo-becomes-a-directory &&
|
||||
git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
|
||||
git apply --index < patch
|
||||
|
@ -9,13 +9,7 @@ test_description='git apply symlinks and partial files
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success SYMLINKS setup '
|
||||
|
||||
ln -s path1/path2/path3/path4/path5 link1 &&
|
||||
git add link? &&
|
||||
@ -34,7 +28,7 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'apply symlink patch' '
|
||||
test_expect_success SYMLINKS 'apply symlink patch' '
|
||||
|
||||
git checkout side &&
|
||||
git apply patch &&
|
||||
@ -43,7 +37,7 @@ test_expect_success 'apply symlink patch' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'apply --index symlink patch' '
|
||||
test_expect_success SYMLINKS 'apply --index symlink patch' '
|
||||
|
||||
git checkout -f side &&
|
||||
git apply --index patch &&
|
||||
|
@ -3,12 +3,6 @@
|
||||
test_description='apply to deeper directory without getting fooled with symlink'
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
lecho () {
|
||||
for l_
|
||||
do
|
||||
@ -16,7 +10,7 @@ lecho () {
|
||||
done
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success SYMLINKS setup '
|
||||
|
||||
mkdir -p arch/i386/boot arch/x86_64 &&
|
||||
lecho 1 2 3 4 5 >arch/i386/boot/Makefile &&
|
||||
@ -37,7 +31,7 @@ test_expect_success setup '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success apply '
|
||||
test_expect_success SYMLINKS apply '
|
||||
|
||||
git checkout test &&
|
||||
git diff --exit-code test &&
|
||||
@ -46,7 +40,7 @@ test_expect_success apply '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check result' '
|
||||
test_expect_success SYMLINKS 'check result' '
|
||||
|
||||
git diff --exit-code master &&
|
||||
git diff --exit-code --cached master &&
|
||||
|
@ -3,13 +3,7 @@
|
||||
test_description='applying patch with mode bits'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
say 'filemode disabled on the filesystem'
|
||||
else
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
||||
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
|
||||
|
||||
test_expect_success setup '
|
||||
echo original >file &&
|
||||
|
@ -6,8 +6,11 @@ test_description='test automatic tag following'
|
||||
|
||||
case $(uname -s) in
|
||||
*MINGW*)
|
||||
skip_all="GIT_DEBUG_SEND_PACK not supported - skipping tests"
|
||||
test_done
|
||||
say "GIT_DEBUG_SEND_PACK not supported - skipping tests"
|
||||
;;
|
||||
*)
|
||||
test_set_prereq NOT_MINGW
|
||||
;;
|
||||
esac
|
||||
|
||||
# End state of the repository:
|
||||
@ -19,7 +22,7 @@ esac
|
||||
# \ C - origin/cat \
|
||||
# origin/master master
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success NOT_MINGW setup '
|
||||
test_tick &&
|
||||
echo ichi >file &&
|
||||
git add file &&
|
||||
@ -42,12 +45,15 @@ test_expect_success setup '
|
||||
|
||||
U=UPLOAD_LOG
|
||||
|
||||
test_expect_success NOT_MINGW 'setup expect' '
|
||||
cat - <<EOF >expect
|
||||
#S
|
||||
want $A
|
||||
#E
|
||||
EOF
|
||||
test_expect_success 'fetch A (new commit : 1 connection)' '
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'fetch A (new commit : 1 connection)' '
|
||||
rm -f $U
|
||||
(
|
||||
cd cloned &&
|
||||
@ -59,7 +65,7 @@ test_expect_success 'fetch A (new commit : 1 connection)' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success "create tag T on A, create C on branch cat" '
|
||||
test_expect_success NOT_MINGW "create tag T on A, create C on branch cat" '
|
||||
git tag -a -m tag1 tag1 $A &&
|
||||
T=$(git rev-parse --verify tag1) &&
|
||||
|
||||
@ -71,13 +77,16 @@ test_expect_success "create tag T on A, create C on branch cat" '
|
||||
git checkout master
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'setup expect' '
|
||||
cat - <<EOF >expect
|
||||
#S
|
||||
want $C
|
||||
want $T
|
||||
#E
|
||||
EOF
|
||||
test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'fetch C, T (new branch, tag : 1 connection)' '
|
||||
rm -f $U
|
||||
(
|
||||
cd cloned &&
|
||||
@ -91,7 +100,7 @@ test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success "create commits O, B, tag S on B" '
|
||||
test_expect_success NOT_MINGW "create commits O, B, tag S on B" '
|
||||
test_tick &&
|
||||
echo O >file &&
|
||||
git add file &&
|
||||
@ -107,13 +116,16 @@ test_expect_success "create commits O, B, tag S on B" '
|
||||
S=$(git rev-parse --verify tag2)
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'setup expect' '
|
||||
cat - <<EOF >expect
|
||||
#S
|
||||
want $B
|
||||
want $S
|
||||
#E
|
||||
EOF
|
||||
test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'fetch B, S (commit and tag : 1 connection)' '
|
||||
rm -f $U
|
||||
(
|
||||
cd cloned &&
|
||||
@ -127,13 +139,16 @@ test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'setup expect' '
|
||||
cat - <<EOF >expect
|
||||
#S
|
||||
want $B
|
||||
want $S
|
||||
#E
|
||||
EOF
|
||||
test_expect_success 'new clone fetch master and tags' '
|
||||
'
|
||||
|
||||
test_expect_success NOT_MINGW 'new clone fetch master and tags' '
|
||||
git branch -D cat
|
||||
rm -f $U
|
||||
(
|
||||
|
@ -4,12 +4,6 @@ test_description='pulling from symlinked subdir'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
# The scenario we are building:
|
||||
#
|
||||
# trash\ directory/
|
||||
@ -20,7 +14,7 @@ fi
|
||||
#
|
||||
# The working directory is subdir-link.
|
||||
|
||||
test_expect_success setup '
|
||||
test_expect_success SYMLINKS setup '
|
||||
mkdir subdir &&
|
||||
echo file >subdir/file &&
|
||||
git add subdir/file &&
|
||||
@ -36,7 +30,7 @@ test_expect_success setup '
|
||||
|
||||
# Demonstrate that things work if we just avoid the symlink
|
||||
#
|
||||
test_expect_success 'pulling from real subdir' '
|
||||
test_expect_success SYMLINKS 'pulling from real subdir' '
|
||||
(
|
||||
echo real >subdir/file &&
|
||||
git commit -m real subdir/file &&
|
||||
@ -64,7 +58,7 @@ test_expect_success 'pulling from real subdir' '
|
||||
# directory. A POSIX shell's "cd" works a little differently
|
||||
# than chdir() in C; "cd -P" is much closer to chdir().
|
||||
#
|
||||
test_expect_success 'pulling from symlinked subdir' '
|
||||
test_expect_success SYMLINKS 'pulling from symlinked subdir' '
|
||||
(
|
||||
echo link >subdir/file &&
|
||||
git commit -m link subdir/file &&
|
||||
@ -77,7 +71,7 @@ test_expect_success 'pulling from symlinked subdir' '
|
||||
# Prove that the remote end really is a repo, and other commands
|
||||
# work fine in this context. It's just that "git pull" breaks.
|
||||
#
|
||||
test_expect_success 'pushing from symlinked subdir' '
|
||||
test_expect_success SYMLINKS 'pushing from symlinked subdir' '
|
||||
(
|
||||
cd subdir-link/ &&
|
||||
echo push >file &&
|
||||
|
@ -163,8 +163,6 @@ test_expect_success 'clone a void' '
|
||||
|
||||
test_expect_success 'clone respects global branch.autosetuprebase' '
|
||||
(
|
||||
HOME=$(pwd) &&
|
||||
export HOME &&
|
||||
test_config="$HOME/.gitconfig" &&
|
||||
unset GIT_CONFIG_NOGLOBAL &&
|
||||
git config -f "$test_config" branch.autosetuprebase remote &&
|
||||
|
@ -3,12 +3,14 @@
|
||||
test_description='Test cloning a repository larger than 2 gigabyte'
|
||||
. ./test-lib.sh
|
||||
|
||||
test -z "$GIT_TEST_CLONE_2GB" &&
|
||||
skip_all="Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t" &&
|
||||
test_done &&
|
||||
exit
|
||||
if test -z "$GIT_TEST_CLONE_2GB"
|
||||
then
|
||||
say 'Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t'
|
||||
else
|
||||
test_set_prereq CLONE_2GB
|
||||
fi
|
||||
|
||||
test_expect_success 'setup' '
|
||||
test_expect_success CLONE_2GB 'setup' '
|
||||
|
||||
git config pack.compression 0 &&
|
||||
git config pack.depth 0 &&
|
||||
@ -36,13 +38,13 @@ test_expect_success 'setup' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'clone - bare' '
|
||||
test_expect_success CLONE_2GB 'clone - bare' '
|
||||
|
||||
git clone --bare --no-hardlinks . clone-bare
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'clone - with worktree, file:// protocol' '
|
||||
test_expect_success CLONE_2GB 'clone - with worktree, file:// protocol' '
|
||||
|
||||
git clone file://. clone-wt
|
||||
|
||||
|
@ -13,13 +13,11 @@ if sys.hexversion < 0x02040000:
|
||||
sys.exit(1)
|
||||
'
|
||||
then
|
||||
:
|
||||
else
|
||||
skip_all='skipping git remote-testgit tests: requires Python 2.4 or newer'
|
||||
test_done
|
||||
# Requires Python 2.4 or newer
|
||||
test_set_prereq PYTHON_24
|
||||
fi
|
||||
|
||||
test_expect_success 'setup repository' '
|
||||
test_expect_success PYTHON_24 'setup repository' '
|
||||
git init --bare server/.git &&
|
||||
git clone server public &&
|
||||
(cd public &&
|
||||
@ -29,34 +27,34 @@ test_expect_success 'setup repository' '
|
||||
git push origin master)
|
||||
'
|
||||
|
||||
test_expect_success 'cloning from local repo' '
|
||||
test_expect_success PYTHON_24 'cloning from local repo' '
|
||||
git clone "testgit::${PWD}/server" localclone &&
|
||||
test_cmp public/file localclone/file
|
||||
'
|
||||
|
||||
test_expect_success 'cloning from remote repo' '
|
||||
test_expect_success PYTHON_24 'cloning from remote repo' '
|
||||
git clone "testgit::file://${PWD}/server" clone &&
|
||||
test_cmp public/file clone/file
|
||||
'
|
||||
|
||||
test_expect_success 'create new commit on remote' '
|
||||
test_expect_success PYTHON_24 'create new commit on remote' '
|
||||
(cd public &&
|
||||
echo content >>file &&
|
||||
git commit -a -m two &&
|
||||
git push)
|
||||
'
|
||||
|
||||
test_expect_success 'pulling from local repo' '
|
||||
test_expect_success PYTHON_24 'pulling from local repo' '
|
||||
(cd localclone && git pull) &&
|
||||
test_cmp public/file localclone/file
|
||||
'
|
||||
|
||||
test_expect_success 'pulling from remote remote' '
|
||||
test_expect_success PYTHON_24 'pulling from remote remote' '
|
||||
(cd clone && git pull) &&
|
||||
test_cmp public/file clone/file
|
||||
'
|
||||
|
||||
test_expect_success 'pushing to local repo' '
|
||||
test_expect_success PYTHON_24 'pushing to local repo' '
|
||||
(cd localclone &&
|
||||
echo content >>file &&
|
||||
git commit -a -m three &&
|
||||
@ -65,12 +63,12 @@ test_expect_success 'pushing to local repo' '
|
||||
test $HEAD = $(git --git-dir=server/.git rev-parse --verify HEAD)
|
||||
'
|
||||
|
||||
test_expect_success 'synch with changes from localclone' '
|
||||
test_expect_success PYTHON_24 'synch with changes from localclone' '
|
||||
(cd clone &&
|
||||
git pull)
|
||||
'
|
||||
|
||||
test_expect_success 'pushing remote local repo' '
|
||||
test_expect_success PYTHON_24 'pushing remote local repo' '
|
||||
(cd clone &&
|
||||
echo content >>file &&
|
||||
git commit -a -m four &&
|
||||
|
@ -2,11 +2,7 @@
|
||||
|
||||
test_description='merge-recursive: handle file mode'
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
||||
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
|
||||
|
||||
test_expect_success 'mode change in one branch: keep changed version' '
|
||||
: >file1 &&
|
||||
|
@ -3,13 +3,7 @@
|
||||
test_description='merging when a directory was replaced with a symlink'
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq SYMLINKS
|
||||
then
|
||||
skip_all='Symbolic links not supported, skipping tests.'
|
||||
test_done
|
||||
fi
|
||||
|
||||
test_expect_success 'create a commit where dir a/b changed to symlink' '
|
||||
test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
|
||||
mkdir -p a/b/c a/b-2/c &&
|
||||
> a/b/c/d &&
|
||||
> a/b-2/c/d &&
|
||||
@ -23,7 +17,7 @@ test_expect_success 'create a commit where dir a/b changed to symlink' '
|
||||
git commit -m "dir to symlink"
|
||||
'
|
||||
|
||||
test_expect_success 'keep a/b-2/c/d across checkout' '
|
||||
test_expect_success SYMLINKS 'keep a/b-2/c/d across checkout' '
|
||||
git checkout HEAD^0 &&
|
||||
git reset --hard master &&
|
||||
git rm --cached a/b &&
|
||||
@ -32,14 +26,14 @@ test_expect_success 'keep a/b-2/c/d across checkout' '
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'checkout should not have deleted a/b-2/c/d' '
|
||||
test_expect_success SYMLINKS 'checkout should not have deleted a/b-2/c/d' '
|
||||
git checkout HEAD^0 &&
|
||||
git reset --hard master &&
|
||||
git checkout start^0 &&
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'setup for merge test' '
|
||||
test_expect_success SYMLINKS 'setup for merge test' '
|
||||
git reset --hard &&
|
||||
test -f a/b-2/c/d &&
|
||||
echo x > a/x &&
|
||||
@ -48,7 +42,7 @@ test_expect_success 'setup for merge test' '
|
||||
git tag baseline
|
||||
'
|
||||
|
||||
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
||||
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
git merge -s resolve master &&
|
||||
@ -56,7 +50,7 @@ test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolv
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
||||
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
git merge -s recursive master &&
|
||||
@ -64,7 +58,7 @@ test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recurs
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
||||
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
|
||||
git reset --hard &&
|
||||
git checkout master^0 &&
|
||||
git merge -s resolve baseline^0 &&
|
||||
@ -72,7 +66,7 @@ test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolv
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
||||
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout master^0 &&
|
||||
git merge -s recursive baseline^0 &&
|
||||
@ -80,7 +74,7 @@ test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recurs
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_failure 'do not lose untracked in merge (resolve)' '
|
||||
test_expect_failure SYMLINKS 'do not lose untracked in merge (resolve)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
>a/b/c/e &&
|
||||
@ -89,7 +83,7 @@ test_expect_failure 'do not lose untracked in merge (resolve)' '
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'do not lose untracked in merge (recursive)' '
|
||||
test_expect_success SYMLINKS 'do not lose untracked in merge (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
>a/b/c/e &&
|
||||
@ -98,21 +92,21 @@ test_expect_success 'do not lose untracked in merge (recursive)' '
|
||||
test -f a/b-2/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'do not lose modifications in merge (resolve)' '
|
||||
test_expect_success SYMLINKS 'do not lose modifications in merge (resolve)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
echo more content >>a/b/c/d &&
|
||||
test_must_fail git merge -s resolve master
|
||||
'
|
||||
|
||||
test_expect_success 'do not lose modifications in merge (recursive)' '
|
||||
test_expect_success SYMLINKS 'do not lose modifications in merge (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
echo more content >>a/b/c/d &&
|
||||
test_must_fail git merge -s recursive master
|
||||
'
|
||||
|
||||
test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
|
||||
test_expect_success SYMLINKS 'setup a merge where dir a/b-2 changed to symlink' '
|
||||
git reset --hard &&
|
||||
git checkout start^0 &&
|
||||
rm -rf a/b-2 &&
|
||||
@ -122,7 +116,7 @@ test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
|
||||
git tag test2
|
||||
'
|
||||
|
||||
test_expect_success 'merge should not have D/F conflicts (resolve)' '
|
||||
test_expect_success SYMLINKS 'merge should not have D/F conflicts (resolve)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
git merge -s resolve test2 &&
|
||||
@ -130,7 +124,7 @@ test_expect_success 'merge should not have D/F conflicts (resolve)' '
|
||||
test -f a/b/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'merge should not have D/F conflicts (recursive)' '
|
||||
test_expect_success SYMLINKS 'merge should not have D/F conflicts (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout baseline^0 &&
|
||||
git merge -s recursive test2 &&
|
||||
@ -138,7 +132,7 @@ test_expect_success 'merge should not have D/F conflicts (recursive)' '
|
||||
test -f a/b/c/d
|
||||
'
|
||||
|
||||
test_expect_success 'merge should not have F/D conflicts (recursive)' '
|
||||
test_expect_success SYMLINKS 'merge should not have F/D conflicts (recursive)' '
|
||||
git reset --hard &&
|
||||
git checkout -b foo test2 &&
|
||||
git merge -s recursive baseline^0 &&
|
||||
|
@ -111,13 +111,13 @@ do
|
||||
'
|
||||
done
|
||||
|
||||
if ! echo 'echo space > "$1"' > "e space.sh"
|
||||
if echo 'echo space > "$1"' > "e space.sh"
|
||||
then
|
||||
skip_all="Skipping; FS does not support spaces in filenames"
|
||||
test_done
|
||||
# FS supports spaces in filenames
|
||||
test_set_prereq SPACES_IN_FILENAMES
|
||||
fi
|
||||
|
||||
test_expect_success 'editor with a space' '
|
||||
test_expect_success SPACES_IN_FILENAMES 'editor with a space' '
|
||||
|
||||
chmod a+x "e space.sh" &&
|
||||
GIT_EDITOR="./e\ space.sh" git commit --amend &&
|
||||
@ -126,7 +126,7 @@ test_expect_success 'editor with a space' '
|
||||
'
|
||||
|
||||
unset GIT_EDITOR
|
||||
test_expect_success 'core.editor with a space' '
|
||||
test_expect_success SPACES_IN_FILENAMES 'core.editor with a space' '
|
||||
|
||||
git config core.editor \"./e\ space.sh\" &&
|
||||
git commit --amend &&
|
||||
|
@ -3,7 +3,7 @@
|
||||
test_description='git reset --patch'
|
||||
. ./lib-patch-mode.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
test_expect_success PERL 'setup' '
|
||||
mkdir dir &&
|
||||
echo parent > dir/foo &&
|
||||
echo dummy > bar &&
|
||||
@ -17,20 +17,20 @@ test_expect_success 'setup' '
|
||||
|
||||
# note: bar sorts before foo, so the first 'n' is always to skip 'bar'
|
||||
|
||||
test_expect_success 'saying "n" does nothing' '
|
||||
test_expect_success PERL 'saying "n" does nothing' '
|
||||
set_and_save_state dir/foo work work
|
||||
(echo n; echo n) | git reset -p &&
|
||||
verify_saved_state dir/foo &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'git reset -p' '
|
||||
test_expect_success PERL 'git reset -p' '
|
||||
(echo n; echo y) | git reset -p &&
|
||||
verify_state dir/foo work head &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'git reset -p HEAD^' '
|
||||
test_expect_success PERL 'git reset -p HEAD^' '
|
||||
(echo n; echo y) | git reset -p HEAD^ &&
|
||||
verify_state dir/foo work parent &&
|
||||
verify_saved_state bar
|
||||
@ -41,27 +41,27 @@ test_expect_success 'git reset -p HEAD^' '
|
||||
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
|
||||
# the failure case (and thus get out of the loop).
|
||||
|
||||
test_expect_success 'git reset -p dir' '
|
||||
test_expect_success PERL 'git reset -p dir' '
|
||||
set_state dir/foo work work
|
||||
(echo y; echo n) | git reset -p dir &&
|
||||
verify_state dir/foo work head &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'git reset -p -- foo (inside dir)' '
|
||||
test_expect_success PERL 'git reset -p -- foo (inside dir)' '
|
||||
set_state dir/foo work work
|
||||
(echo y; echo n) | (cd dir && git reset -p -- foo) &&
|
||||
verify_state dir/foo work head &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'git reset -p HEAD^ -- dir' '
|
||||
test_expect_success PERL 'git reset -p HEAD^ -- dir' '
|
||||
(echo y; echo n) | git reset -p HEAD^ -- dir &&
|
||||
verify_state dir/foo work parent &&
|
||||
verify_saved_state bar
|
||||
'
|
||||
|
||||
test_expect_success 'none of this moved HEAD' '
|
||||
test_expect_success PERL 'none of this moved HEAD' '
|
||||
verify_saved_head
|
||||
'
|
||||
|
||||
|
@ -388,16 +388,15 @@ test_expect_success 'core.excludesfile' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'removal failure' '
|
||||
test_expect_success SANITY 'removal failure' '
|
||||
|
||||
mkdir foo &&
|
||||
touch foo/bar &&
|
||||
(exec <foo/bar &&
|
||||
chmod 0 foo &&
|
||||
test_must_fail git clean -f -d)
|
||||
|
||||
test_must_fail git clean -f -d &&
|
||||
chmod 755 foo)
|
||||
'
|
||||
chmod 755 foo
|
||||
|
||||
test_expect_success 'nested git work tree' '
|
||||
rm -fr foo bar &&
|
||||
|
@ -793,7 +793,7 @@ test_expect_success 'commit --dry-run submodule summary (--amend)' '
|
||||
test_cmp expect output
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'status succeeds in a read-only repository' '
|
||||
test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
|
||||
(
|
||||
chmod a-w .git &&
|
||||
# make dir1/tracked stat-dirty
|
||||
|
@ -10,11 +10,6 @@ Testing basic diff tool invocation
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping difftool tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
LF='
|
||||
'
|
||||
|
||||
@ -50,7 +45,7 @@ prompt_given()
|
||||
}
|
||||
|
||||
# Create a file on master and change it on branch
|
||||
test_expect_success 'setup' '
|
||||
test_expect_success PERL 'setup' '
|
||||
echo master >file &&
|
||||
git add file &&
|
||||
git commit -m "added file" &&
|
||||
@ -62,7 +57,7 @@ test_expect_success 'setup' '
|
||||
'
|
||||
|
||||
# Configure a custom difftool.<tool>.cmd and use it
|
||||
test_expect_success 'custom commands' '
|
||||
test_expect_success PERL 'custom commands' '
|
||||
restore_test_defaults &&
|
||||
git config difftool.test-tool.cmd "cat \$REMOTE" &&
|
||||
|
||||
@ -75,13 +70,13 @@ test_expect_success 'custom commands' '
|
||||
'
|
||||
|
||||
# Ensures that git-difftool ignores bogus --tool values
|
||||
test_expect_success 'difftool ignores bad --tool values' '
|
||||
test_expect_success PERL 'difftool ignores bad --tool values' '
|
||||
diff=$(git difftool --no-prompt --tool=bad-tool branch)
|
||||
test "$?" = 1 &&
|
||||
test "$diff" = ""
|
||||
'
|
||||
|
||||
test_expect_success 'difftool honors --gui' '
|
||||
test_expect_success PERL 'difftool honors --gui' '
|
||||
git config merge.tool bogus-tool &&
|
||||
git config diff.tool bogus-tool &&
|
||||
git config diff.guitool test-tool &&
|
||||
@ -92,7 +87,7 @@ test_expect_success 'difftool honors --gui' '
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --gui works without configured diff.guitool' '
|
||||
test_expect_success PERL 'difftool --gui works without configured diff.guitool' '
|
||||
git config diff.tool test-tool &&
|
||||
|
||||
diff=$(git difftool --no-prompt --gui branch) &&
|
||||
@ -102,7 +97,7 @@ test_expect_success 'difftool --gui works without configured diff.guitool' '
|
||||
'
|
||||
|
||||
# Specify the diff tool using $GIT_DIFF_TOOL
|
||||
test_expect_success 'GIT_DIFF_TOOL variable' '
|
||||
test_expect_success PERL 'GIT_DIFF_TOOL variable' '
|
||||
git config --unset diff.tool
|
||||
GIT_DIFF_TOOL=test-tool &&
|
||||
export GIT_DIFF_TOOL &&
|
||||
@ -115,7 +110,7 @@ test_expect_success 'GIT_DIFF_TOOL variable' '
|
||||
|
||||
# Test the $GIT_*_TOOL variables and ensure
|
||||
# that $GIT_DIFF_TOOL always wins unless --tool is specified
|
||||
test_expect_success 'GIT_DIFF_TOOL overrides' '
|
||||
test_expect_success PERL 'GIT_DIFF_TOOL overrides' '
|
||||
git config diff.tool bogus-tool &&
|
||||
git config merge.tool bogus-tool &&
|
||||
|
||||
@ -136,7 +131,7 @@ test_expect_success 'GIT_DIFF_TOOL overrides' '
|
||||
|
||||
# Test that we don't have to pass --no-prompt to difftool
|
||||
# when $GIT_DIFFTOOL_NO_PROMPT is true
|
||||
test_expect_success 'GIT_DIFFTOOL_NO_PROMPT variable' '
|
||||
test_expect_success PERL 'GIT_DIFFTOOL_NO_PROMPT variable' '
|
||||
GIT_DIFFTOOL_NO_PROMPT=true &&
|
||||
export GIT_DIFFTOOL_NO_PROMPT &&
|
||||
|
||||
@ -148,7 +143,7 @@ test_expect_success 'GIT_DIFFTOOL_NO_PROMPT variable' '
|
||||
|
||||
# git-difftool supports the difftool.prompt variable.
|
||||
# Test that GIT_DIFFTOOL_PROMPT can override difftool.prompt = false
|
||||
test_expect_success 'GIT_DIFFTOOL_PROMPT variable' '
|
||||
test_expect_success PERL 'GIT_DIFFTOOL_PROMPT variable' '
|
||||
git config difftool.prompt false &&
|
||||
GIT_DIFFTOOL_PROMPT=true &&
|
||||
export GIT_DIFFTOOL_PROMPT &&
|
||||
@ -160,7 +155,7 @@ test_expect_success 'GIT_DIFFTOOL_PROMPT variable' '
|
||||
'
|
||||
|
||||
# Test that we don't have to pass --no-prompt when difftool.prompt is false
|
||||
test_expect_success 'difftool.prompt config variable is false' '
|
||||
test_expect_success PERL 'difftool.prompt config variable is false' '
|
||||
git config difftool.prompt false &&
|
||||
|
||||
diff=$(git difftool branch) &&
|
||||
@ -170,7 +165,7 @@ test_expect_success 'difftool.prompt config variable is false' '
|
||||
'
|
||||
|
||||
# Test that we don't have to pass --no-prompt when mergetool.prompt is false
|
||||
test_expect_success 'difftool merge.prompt = false' '
|
||||
test_expect_success PERL 'difftool merge.prompt = false' '
|
||||
git config --unset difftool.prompt
|
||||
git config mergetool.prompt false &&
|
||||
|
||||
@ -181,7 +176,7 @@ test_expect_success 'difftool merge.prompt = false' '
|
||||
'
|
||||
|
||||
# Test that the -y flag can override difftool.prompt = true
|
||||
test_expect_success 'difftool.prompt can overridden with -y' '
|
||||
test_expect_success PERL 'difftool.prompt can overridden with -y' '
|
||||
git config difftool.prompt true &&
|
||||
|
||||
diff=$(git difftool -y branch) &&
|
||||
@ -191,7 +186,7 @@ test_expect_success 'difftool.prompt can overridden with -y' '
|
||||
'
|
||||
|
||||
# Test that the --prompt flag can override difftool.prompt = false
|
||||
test_expect_success 'difftool.prompt can overridden with --prompt' '
|
||||
test_expect_success PERL 'difftool.prompt can overridden with --prompt' '
|
||||
git config difftool.prompt false &&
|
||||
|
||||
prompt=$(echo | git difftool --prompt branch | tail -1) &&
|
||||
@ -201,7 +196,7 @@ test_expect_success 'difftool.prompt can overridden with --prompt' '
|
||||
'
|
||||
|
||||
# Test that the last flag passed on the command-line wins
|
||||
test_expect_success 'difftool last flag wins' '
|
||||
test_expect_success PERL 'difftool last flag wins' '
|
||||
diff=$(git difftool --prompt --no-prompt branch) &&
|
||||
test "$diff" = "branch" &&
|
||||
|
||||
@ -215,7 +210,7 @@ test_expect_success 'difftool last flag wins' '
|
||||
|
||||
# git-difftool falls back to git-mergetool config variables
|
||||
# so test that behavior here
|
||||
test_expect_success 'difftool + mergetool config variables' '
|
||||
test_expect_success PERL 'difftool + mergetool config variables' '
|
||||
remove_config_vars
|
||||
git config merge.tool test-tool &&
|
||||
git config mergetool.test-tool.cmd "cat \$LOCAL" &&
|
||||
@ -233,7 +228,7 @@ test_expect_success 'difftool + mergetool config variables' '
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
test_expect_success 'difftool.<tool>.path' '
|
||||
test_expect_success PERL 'difftool.<tool>.path' '
|
||||
git config difftool.tkdiff.path echo &&
|
||||
diff=$(git difftool --tool=tkdiff --no-prompt branch) &&
|
||||
git config --unset difftool.tkdiff.path &&
|
||||
@ -243,32 +238,32 @@ test_expect_success 'difftool.<tool>.path' '
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --extcmd=cat' '
|
||||
test_expect_success PERL 'difftool --extcmd=cat' '
|
||||
diff=$(git difftool --no-prompt --extcmd=cat branch) &&
|
||||
test "$diff" = branch"$LF"master
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --extcmd cat' '
|
||||
test_expect_success PERL 'difftool --extcmd cat' '
|
||||
diff=$(git difftool --no-prompt --extcmd cat branch) &&
|
||||
test "$diff" = branch"$LF"master
|
||||
'
|
||||
|
||||
test_expect_success 'difftool -x cat' '
|
||||
test_expect_success PERL 'difftool -x cat' '
|
||||
diff=$(git difftool --no-prompt -x cat branch) &&
|
||||
test "$diff" = branch"$LF"master
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --extcmd echo arg1' '
|
||||
test_expect_success PERL 'difftool --extcmd echo arg1' '
|
||||
diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"echo\ \$1\" branch)
|
||||
test "$diff" = file
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --extcmd cat arg1' '
|
||||
test_expect_success PERL 'difftool --extcmd cat arg1' '
|
||||
diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$1\" branch)
|
||||
test "$diff" = master
|
||||
'
|
||||
|
||||
test_expect_success 'difftool --extcmd cat arg2' '
|
||||
test_expect_success PERL 'difftool --extcmd cat arg2' '
|
||||
diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$2\" branch)
|
||||
test "$diff" = branch
|
||||
'
|
||||
|
@ -3,20 +3,17 @@
|
||||
test_description='git send-email'
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping git send-email tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
# May be altered later in the test
|
||||
PREREQ="PERL"
|
||||
|
||||
PROG='git send-email'
|
||||
test_expect_success \
|
||||
test_expect_success $PREREQ \
|
||||
'prepare reference tree' \
|
||||
'echo "1A quick brown fox jumps over the" >file &&
|
||||
echo "lazy dog" >>file &&
|
||||
git add file &&
|
||||
GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
|
||||
|
||||
test_expect_success \
|
||||
test_expect_success $PREREQ \
|
||||
'Setup helper tool' \
|
||||
'(echo "#!$SHELL_PATH"
|
||||
echo shift
|
||||
@ -36,7 +33,7 @@ clean_fake_sendmail() {
|
||||
rm -f commandline* msgtxt*
|
||||
}
|
||||
|
||||
test_expect_success 'Extract patches' '
|
||||
test_expect_success $PREREQ 'Extract patches' '
|
||||
patches=`git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
|
||||
'
|
||||
|
||||
@ -57,49 +54,56 @@ test_no_confirm () {
|
||||
|
||||
# Exit immediately to prevent hang if a no-confirm test fails
|
||||
check_no_confirm () {
|
||||
test -f no_confirm_okay || {
|
||||
skip_all='confirm test failed; skipping remaining tests to prevent hanging'
|
||||
test_done
|
||||
}
|
||||
if ! test -f no_confirm_okay
|
||||
then
|
||||
say 'confirm test failed; skipping remaining tests to prevent hanging'
|
||||
PREREQ="$PREREQ,CHECK_NO_CONFIRM"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
test_expect_success 'No confirm with --suppress-cc' '
|
||||
test_no_confirm --suppress-cc=sob
|
||||
test_expect_success $PREREQ 'No confirm with --suppress-cc' '
|
||||
test_no_confirm --suppress-cc=sob &&
|
||||
check_no_confirm
|
||||
'
|
||||
check_no_confirm
|
||||
|
||||
test_expect_success 'No confirm with --confirm=never' '
|
||||
test_no_confirm --confirm=never
|
||||
|
||||
test_expect_success $PREREQ 'No confirm with --confirm=never' '
|
||||
test_no_confirm --confirm=never &&
|
||||
check_no_confirm
|
||||
'
|
||||
check_no_confirm
|
||||
|
||||
# leave sendemail.confirm set to never after this so that none of the
|
||||
# remaining tests prompt unintentionally.
|
||||
test_expect_success 'No confirm with sendemail.confirm=never' '
|
||||
test_expect_success $PREREQ 'No confirm with sendemail.confirm=never' '
|
||||
git config sendemail.confirm never &&
|
||||
test_no_confirm --compose --subject=foo
|
||||
test_no_confirm --compose --subject=foo &&
|
||||
check_no_confirm
|
||||
'
|
||||
check_no_confirm
|
||||
|
||||
test_expect_success 'Send patches' '
|
||||
test_expect_success $PREREQ 'Send patches' '
|
||||
git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >expected <<\EOF
|
||||
!nobody@example.com!
|
||||
!author@example.com!
|
||||
!one@example.com!
|
||||
!two@example.com!
|
||||
EOF
|
||||
test_expect_success \
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ \
|
||||
'Verify commandline' \
|
||||
'test_cmp expected commandline1'
|
||||
|
||||
test_expect_success 'Send patches with --envelope-sender' '
|
||||
test_expect_success $PREREQ 'Send patches with --envelope-sender' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email --envelope-sender="Patch Contributer <patch@example.com>" --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >expected <<\EOF
|
||||
!patch@example.com!
|
||||
!-i!
|
||||
@ -108,15 +112,18 @@ cat >expected <<\EOF
|
||||
!one@example.com!
|
||||
!two@example.com!
|
||||
EOF
|
||||
test_expect_success \
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ \
|
||||
'Verify commandline' \
|
||||
'test_cmp expected commandline1'
|
||||
|
||||
test_expect_success 'Send patches with --envelope-sender=auto' '
|
||||
test_expect_success $PREREQ 'Send patches with --envelope-sender=auto' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email --envelope-sender=auto --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >expected <<\EOF
|
||||
!nobody@example.com!
|
||||
!-i!
|
||||
@ -125,10 +132,13 @@ cat >expected <<\EOF
|
||||
!one@example.com!
|
||||
!two@example.com!
|
||||
EOF
|
||||
test_expect_success \
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ \
|
||||
'Verify commandline' \
|
||||
'test_cmp expected commandline1'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-show-all-headers <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -158,8 +168,9 @@ References: <unique-message-id@example.com>
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'Show all headers' '
|
||||
test_expect_success $PREREQ 'Show all headers' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--suppress-cc=sob \
|
||||
@ -177,7 +188,7 @@ test_expect_success 'Show all headers' '
|
||||
test_cmp expected-show-all-headers actual-show-all-headers
|
||||
'
|
||||
|
||||
test_expect_success 'Prompting works' '
|
||||
test_expect_success $PREREQ 'Prompting works' '
|
||||
clean_fake_sendmail &&
|
||||
(echo "Example <from@example.com>"
|
||||
echo "to@example.com"
|
||||
@ -190,7 +201,7 @@ test_expect_success 'Prompting works' '
|
||||
grep "^To: to@example.com\$" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success 'cccmd works' '
|
||||
test_expect_success $PREREQ 'cccmd works' '
|
||||
clean_fake_sendmail &&
|
||||
cp $patches cccmd.patch &&
|
||||
echo cccmd--cccmd@example.com >>cccmd.patch &&
|
||||
@ -209,10 +220,10 @@ test_expect_success 'cccmd works' '
|
||||
grep "^ cccmd@example.com" msgtxt1
|
||||
'
|
||||
|
||||
z8=zzzzzzzz
|
||||
z64=$z8$z8$z8$z8$z8$z8$z8$z8
|
||||
z512=$z64$z64$z64$z64$z64$z64$z64$z64
|
||||
test_expect_success 'reject long lines' '
|
||||
test_expect_success $PREREQ 'reject long lines' '
|
||||
z8=zzzzzzzz &&
|
||||
z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
|
||||
z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
|
||||
clean_fake_sendmail &&
|
||||
cp $patches longline.patch &&
|
||||
echo $z512$z512 >>longline.patch &&
|
||||
@ -225,11 +236,11 @@ test_expect_success 'reject long lines' '
|
||||
grep longline.patch errors
|
||||
'
|
||||
|
||||
test_expect_success 'no patch was sent' '
|
||||
test_expect_success $PREREQ 'no patch was sent' '
|
||||
! test -e commandline1
|
||||
'
|
||||
|
||||
test_expect_success 'Author From: in message body' '
|
||||
test_expect_success $PREREQ 'Author From: in message body' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -240,7 +251,7 @@ test_expect_success 'Author From: in message body' '
|
||||
grep "From: A <author@example.com>" msgbody1
|
||||
'
|
||||
|
||||
test_expect_success 'Author From: not in message body' '
|
||||
test_expect_success $PREREQ 'Author From: not in message body' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email \
|
||||
--from="A <author@example.com>" \
|
||||
@ -251,7 +262,7 @@ test_expect_success 'Author From: not in message body' '
|
||||
! grep "From: A <author@example.com>" msgbody1
|
||||
'
|
||||
|
||||
test_expect_success 'allow long lines with --no-validate' '
|
||||
test_expect_success $PREREQ 'allow long lines with --no-validate' '
|
||||
git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
@ -261,7 +272,7 @@ test_expect_success 'allow long lines with --no-validate' '
|
||||
2>errors
|
||||
'
|
||||
|
||||
test_expect_success 'Invalid In-Reply-To' '
|
||||
test_expect_success $PREREQ 'Invalid In-Reply-To' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -273,7 +284,7 @@ test_expect_success 'Invalid In-Reply-To' '
|
||||
! grep "^In-Reply-To: < *>" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success 'Valid In-Reply-To when prompting' '
|
||||
test_expect_success $PREREQ 'Valid In-Reply-To when prompting' '
|
||||
clean_fake_sendmail &&
|
||||
(echo "From Example <from@example.com>"
|
||||
echo "To Example <to@example.com>"
|
||||
@ -284,7 +295,7 @@ test_expect_success 'Valid In-Reply-To when prompting' '
|
||||
! grep "^In-Reply-To: < *>" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success 'setup fake editor' '
|
||||
test_expect_success $PREREQ 'setup fake editor' '
|
||||
(echo "#!$SHELL_PATH" &&
|
||||
echo "echo fake edit >>\"\$1\""
|
||||
) >fake-editor &&
|
||||
@ -293,7 +304,7 @@ test_expect_success 'setup fake editor' '
|
||||
|
||||
test_set_editor "$(pwd)/fake-editor"
|
||||
|
||||
test_expect_success '--compose works' '
|
||||
test_expect_success $PREREQ '--compose works' '
|
||||
clean_fake_sendmail &&
|
||||
git send-email \
|
||||
--compose --subject foo \
|
||||
@ -304,14 +315,15 @@ test_expect_success '--compose works' '
|
||||
2>errors
|
||||
'
|
||||
|
||||
test_expect_success 'first message is compose text' '
|
||||
test_expect_success $PREREQ 'first message is compose text' '
|
||||
grep "^fake edit" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success 'second message is patch' '
|
||||
test_expect_success $PREREQ 'second message is patch' '
|
||||
grep "Subject:.*Second" msgtxt2
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-sob <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -338,6 +350,7 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_suppression () {
|
||||
git send-email \
|
||||
@ -354,11 +367,12 @@ test_suppression () {
|
||||
test_cmp expected-suppress-$1${2+"-$2"} actual-suppress-$1${2+"-$2"}
|
||||
}
|
||||
|
||||
test_expect_success 'sendemail.cc set' '
|
||||
test_expect_success $PREREQ 'sendemail.cc set' '
|
||||
git config sendemail.cc cc@example.com &&
|
||||
test_suppression sob
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-sob <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -383,12 +397,14 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'sendemail.cc unset' '
|
||||
test_expect_success $PREREQ 'sendemail.cc unset' '
|
||||
git config --unset sendemail.cc &&
|
||||
test_suppression sob
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-cccmd <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -416,14 +432,16 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'sendemail.cccmd' '
|
||||
test_expect_success $PREREQ 'sendemail.cccmd' '
|
||||
echo echo cc-cmd@example.com > cccmd &&
|
||||
chmod +x cccmd &&
|
||||
git config sendemail.cccmd ./cccmd &&
|
||||
test_suppression cccmd
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >expected-suppress-all <<\EOF
|
||||
0001-Second.patch
|
||||
Dry-OK. Log says:
|
||||
@ -439,11 +457,13 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success '--suppress-cc=all' '
|
||||
test_expect_success $PREREQ '--suppress-cc=all' '
|
||||
test_suppression all
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-body <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -471,11 +491,13 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success '--suppress-cc=body' '
|
||||
test_expect_success $PREREQ '--suppress-cc=body' '
|
||||
test_suppression body
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-body-cccmd <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -500,11 +522,13 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success '--suppress-cc=body --suppress-cc=cccmd' '
|
||||
test_expect_success $PREREQ '--suppress-cc=body --suppress-cc=cccmd' '
|
||||
test_suppression body cccmd
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-sob <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -529,12 +553,14 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success '--suppress-cc=sob' '
|
||||
test_expect_success $PREREQ '--suppress-cc=sob' '
|
||||
git config --unset sendemail.cccmd
|
||||
test_suppression sob
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-bodycc <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -562,11 +588,13 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success '--suppress-cc=bodycc' '
|
||||
test_expect_success $PREREQ '--suppress-cc=bodycc' '
|
||||
test_suppression bodycc
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' "
|
||||
cat >expected-suppress-cc <<\EOF
|
||||
0001-Second.patch
|
||||
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
|
||||
@ -588,8 +616,9 @@ X-Mailer: X-MAILER-STRING
|
||||
|
||||
Result: OK
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success '--suppress-cc=cc' '
|
||||
test_expect_success $PREREQ '--suppress-cc=cc' '
|
||||
test_suppression cc
|
||||
'
|
||||
|
||||
@ -604,23 +633,23 @@ test_confirm () {
|
||||
grep "Send this email" stdout
|
||||
}
|
||||
|
||||
test_expect_success '--confirm=always' '
|
||||
test_expect_success $PREREQ '--confirm=always' '
|
||||
test_confirm --confirm=always --suppress-cc=all
|
||||
'
|
||||
|
||||
test_expect_success '--confirm=auto' '
|
||||
test_expect_success $PREREQ '--confirm=auto' '
|
||||
test_confirm --confirm=auto
|
||||
'
|
||||
|
||||
test_expect_success '--confirm=cc' '
|
||||
test_expect_success $PREREQ '--confirm=cc' '
|
||||
test_confirm --confirm=cc
|
||||
'
|
||||
|
||||
test_expect_success '--confirm=compose' '
|
||||
test_expect_success $PREREQ '--confirm=compose' '
|
||||
test_confirm --confirm=compose --compose
|
||||
'
|
||||
|
||||
test_expect_success 'confirm by default (due to cc)' '
|
||||
test_expect_success $PREREQ 'confirm by default (due to cc)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config --unset sendemail.confirm &&
|
||||
test_confirm
|
||||
@ -629,7 +658,7 @@ test_expect_success 'confirm by default (due to cc)' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm by default (due to --compose)' '
|
||||
test_expect_success $PREREQ 'confirm by default (due to --compose)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config --unset sendemail.confirm &&
|
||||
test_confirm --suppress-cc=all --compose
|
||||
@ -638,7 +667,7 @@ test_expect_success 'confirm by default (due to --compose)' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm detects EOF (inform assumes y)' '
|
||||
test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config --unset sendemail.confirm &&
|
||||
rm -fr outdir &&
|
||||
@ -654,7 +683,7 @@ test_expect_success 'confirm detects EOF (inform assumes y)' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm detects EOF (auto causes failure)' '
|
||||
test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config sendemail.confirm auto &&
|
||||
GIT_SEND_EMAIL_NOTTY=1 &&
|
||||
@ -669,7 +698,7 @@ test_expect_success 'confirm detects EOF (auto causes failure)' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm doesnt loop forever' '
|
||||
test_expect_success $PREREQ 'confirm doesnt loop forever' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config sendemail.confirm auto &&
|
||||
GIT_SEND_EMAIL_NOTTY=1 &&
|
||||
@ -684,7 +713,7 @@ test_expect_success 'confirm doesnt loop forever' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'utf8 Cc is rfc2047 encoded' '
|
||||
test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' '
|
||||
clean_fake_sendmail &&
|
||||
rm -fr outdir &&
|
||||
git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" &&
|
||||
@ -697,7 +726,7 @@ test_expect_success 'utf8 Cc is rfc2047 encoded' '
|
||||
grep "=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>"
|
||||
'
|
||||
|
||||
test_expect_success '--compose adds MIME for utf8 body' '
|
||||
test_expect_success $PREREQ '--compose adds MIME for utf8 body' '
|
||||
clean_fake_sendmail &&
|
||||
(echo "#!$SHELL_PATH" &&
|
||||
echo "echo utf8 body: àéìöú >>\"\$1\""
|
||||
@ -714,7 +743,7 @@ test_expect_success '--compose adds MIME for utf8 body' '
|
||||
grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success '--compose respects user mime type' '
|
||||
test_expect_success $PREREQ '--compose respects user mime type' '
|
||||
clean_fake_sendmail &&
|
||||
(echo "#!$SHELL_PATH" &&
|
||||
echo "(echo MIME-Version: 1.0"
|
||||
@ -737,7 +766,7 @@ test_expect_success '--compose respects user mime type' '
|
||||
! grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success '--compose adds MIME for utf8 subject' '
|
||||
test_expect_success $PREREQ '--compose adds MIME for utf8 subject' '
|
||||
clean_fake_sendmail &&
|
||||
GIT_EDITOR="\"$(pwd)/fake-editor\"" \
|
||||
git send-email \
|
||||
@ -750,7 +779,7 @@ test_expect_success '--compose adds MIME for utf8 subject' '
|
||||
grep "^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
|
||||
'
|
||||
|
||||
test_expect_success 'detects ambiguous reference/file conflict' '
|
||||
test_expect_success $PREREQ 'detects ambiguous reference/file conflict' '
|
||||
echo master > master &&
|
||||
git add master &&
|
||||
git commit -m"add master" &&
|
||||
@ -758,7 +787,7 @@ test_expect_success 'detects ambiguous reference/file conflict' '
|
||||
grep disambiguate errors
|
||||
'
|
||||
|
||||
test_expect_success 'feed two files' '
|
||||
test_expect_success $PREREQ 'feed two files' '
|
||||
rm -fr outdir &&
|
||||
git format-patch -2 -o outdir &&
|
||||
git send-email \
|
||||
@ -771,7 +800,7 @@ test_expect_success 'feed two files' '
|
||||
test "z$(sed -n -e 2p subjects)" = "zSubject: [PATCH 2/2] add master"
|
||||
'
|
||||
|
||||
test_expect_success 'in-reply-to but no threading' '
|
||||
test_expect_success $PREREQ 'in-reply-to but no threading' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -782,7 +811,7 @@ test_expect_success 'in-reply-to but no threading' '
|
||||
grep "In-Reply-To: <in-reply-id@example.com>"
|
||||
'
|
||||
|
||||
test_expect_success 'no in-reply-to and no threading' '
|
||||
test_expect_success $PREREQ 'no in-reply-to and no threading' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -792,7 +821,7 @@ test_expect_success 'no in-reply-to and no threading' '
|
||||
! grep "In-Reply-To: " stdout
|
||||
'
|
||||
|
||||
test_expect_success 'threading but no chain-reply-to' '
|
||||
test_expect_success $PREREQ 'threading but no chain-reply-to' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -803,7 +832,7 @@ test_expect_success 'threading but no chain-reply-to' '
|
||||
grep "In-Reply-To: " stdout
|
||||
'
|
||||
|
||||
test_expect_success 'warning with an implicit --chain-reply-to' '
|
||||
test_expect_success $PREREQ 'warning with an implicit --chain-reply-to' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -812,7 +841,7 @@ test_expect_success 'warning with an implicit --chain-reply-to' '
|
||||
grep "no-chain-reply-to" errors
|
||||
'
|
||||
|
||||
test_expect_success 'no warning with an explicit --chain-reply-to' '
|
||||
test_expect_success $PREREQ 'no warning with an explicit --chain-reply-to' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -822,7 +851,7 @@ test_expect_success 'no warning with an explicit --chain-reply-to' '
|
||||
! grep "no-chain-reply-to" errors
|
||||
'
|
||||
|
||||
test_expect_success 'no warning with an explicit --no-chain-reply-to' '
|
||||
test_expect_success $PREREQ 'no warning with an explicit --no-chain-reply-to' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -832,7 +861,7 @@ test_expect_success 'no warning with an explicit --no-chain-reply-to' '
|
||||
! grep "no-chain-reply-to" errors
|
||||
'
|
||||
|
||||
test_expect_success 'no warning with sendemail.chainreplyto = false' '
|
||||
test_expect_success $PREREQ 'no warning with sendemail.chainreplyto = false' '
|
||||
git config sendemail.chainreplyto false &&
|
||||
git send-email \
|
||||
--dry-run \
|
||||
@ -842,7 +871,7 @@ test_expect_success 'no warning with sendemail.chainreplyto = false' '
|
||||
! grep "no-chain-reply-to" errors
|
||||
'
|
||||
|
||||
test_expect_success 'no warning with sendemail.chainreplyto = true' '
|
||||
test_expect_success $PREREQ 'no warning with sendemail.chainreplyto = true' '
|
||||
git config sendemail.chainreplyto true &&
|
||||
git send-email \
|
||||
--dry-run \
|
||||
@ -852,7 +881,7 @@ test_expect_success 'no warning with sendemail.chainreplyto = true' '
|
||||
! grep "no-chain-reply-to" errors
|
||||
'
|
||||
|
||||
test_expect_success 'sendemail.to works' '
|
||||
test_expect_success $PREREQ 'sendemail.to works' '
|
||||
git config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
|
||||
git send-email \
|
||||
--dry-run \
|
||||
@ -861,7 +890,7 @@ test_expect_success 'sendemail.to works' '
|
||||
grep "To: Somebody <somebody@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success '--no-to overrides sendemail.to' '
|
||||
test_expect_success $PREREQ '--no-to overrides sendemail.to' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -872,7 +901,7 @@ test_expect_success '--no-to overrides sendemail.to' '
|
||||
! grep "To: Somebody <somebody@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success 'sendemail.cc works' '
|
||||
test_expect_success $PREREQ 'sendemail.cc works' '
|
||||
git config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
|
||||
git send-email \
|
||||
--dry-run \
|
||||
@ -882,7 +911,7 @@ test_expect_success 'sendemail.cc works' '
|
||||
grep "Cc: Somebody <somebody@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success '--no-cc overrides sendemail.cc' '
|
||||
test_expect_success $PREREQ '--no-cc overrides sendemail.cc' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -894,7 +923,7 @@ test_expect_success '--no-cc overrides sendemail.cc' '
|
||||
! grep "Cc: Somebody <somebody@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success 'sendemail.bcc works' '
|
||||
test_expect_success $PREREQ 'sendemail.bcc works' '
|
||||
git config --replace-all sendemail.bcc "Other <other@ex.com>" &&
|
||||
git send-email \
|
||||
--dry-run \
|
||||
@ -905,7 +934,7 @@ test_expect_success 'sendemail.bcc works' '
|
||||
grep "RCPT TO:<other@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success '--no-bcc overrides sendemail.bcc' '
|
||||
test_expect_success $PREREQ '--no-bcc overrides sendemail.bcc' '
|
||||
git send-email \
|
||||
--dry-run \
|
||||
--from="Example <nobody@example.com>" \
|
||||
@ -918,6 +947,7 @@ test_expect_success '--no-bcc overrides sendemail.bcc' '
|
||||
! grep "RCPT TO:<other@ex.com>" stdout
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >email-using-8bit <<EOF
|
||||
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <bogus-message-id@example.com>
|
||||
@ -927,14 +957,17 @@ Subject: subject goes here
|
||||
|
||||
Dieser deutsche Text enthält einen Umlaut!
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >content-type-decl <<EOF
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'asks about and fixes 8bit encodings' '
|
||||
test_expect_success $PREREQ 'asks about and fixes 8bit encodings' '
|
||||
clean_fake_sendmail &&
|
||||
echo |
|
||||
git send-email --from=author@example.com --to=nobody@example.com \
|
||||
@ -947,7 +980,7 @@ test_expect_success 'asks about and fixes 8bit encodings' '
|
||||
test_cmp actual content-type-decl
|
||||
'
|
||||
|
||||
test_expect_success 'sendemail.8bitEncoding works' '
|
||||
test_expect_success $PREREQ 'sendemail.8bitEncoding works' '
|
||||
clean_fake_sendmail &&
|
||||
git config sendemail.assume8bitEncoding UTF-8 &&
|
||||
echo bogus |
|
||||
@ -958,7 +991,7 @@ test_expect_success 'sendemail.8bitEncoding works' '
|
||||
test_cmp actual content-type-decl
|
||||
'
|
||||
|
||||
test_expect_success '--8bit-encoding overrides sendemail.8bitEncoding' '
|
||||
test_expect_success $PREREQ '--8bit-encoding overrides sendemail.8bitEncoding' '
|
||||
clean_fake_sendmail &&
|
||||
git config sendemail.assume8bitEncoding "bogus too" &&
|
||||
echo bogus |
|
||||
@ -970,6 +1003,7 @@ test_expect_success '--8bit-encoding overrides sendemail.8bitEncoding' '
|
||||
test_cmp actual content-type-decl
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >email-using-8bit <<EOF
|
||||
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <bogus-message-id@example.com>
|
||||
@ -979,12 +1013,15 @@ Subject: Dieser Betreff enthält auch einen Umlaut!
|
||||
|
||||
Nothing to see here.
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success $PREREQ 'setup expect' '
|
||||
cat >expected <<EOF
|
||||
Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success '--8bit-encoding also treats subject' '
|
||||
test_expect_success $PREREQ '--8bit-encoding also treats subject' '
|
||||
clean_fake_sendmail &&
|
||||
echo bogus |
|
||||
git send-email --from=author@example.com --to=nobody@example.com \
|
||||
|
@ -95,8 +95,6 @@ test_expect_success 'fresh clone with svn.authors-file in config' '
|
||||
(
|
||||
rm -r "$GIT_DIR" &&
|
||||
test x = x"$(git config svn.authorsfile)" &&
|
||||
HOME="`pwd`" &&
|
||||
export HOME &&
|
||||
test_config="$HOME"/.gitconfig &&
|
||||
unset GIT_CONFIG_NOGLOBAL &&
|
||||
unset GIT_DIR &&
|
||||
|
@ -5,6 +5,7 @@
|
||||
test_description='Test export of commits to CVS'
|
||||
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping git cvsexportcommit tests, perl not available'
|
||||
@ -229,11 +230,6 @@ test_expect_success \
|
||||
test_must_fail git cvsexportcommit -c $id
|
||||
)'
|
||||
|
||||
if ! test "$(git config --bool core.filemode)" = false
|
||||
then
|
||||
test_set_prereq FILEMODE
|
||||
fi
|
||||
|
||||
test_expect_success FILEMODE \
|
||||
'Retain execute bit' \
|
||||
'mkdir G &&
|
||||
|
@ -3,17 +3,14 @@
|
||||
test_description='git cvsimport basic tests'
|
||||
. ./lib-cvs.sh
|
||||
|
||||
if ! test_have_prereq PERL; then
|
||||
skip_all='skipping git cvsimport tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
test_expect_success PERL 'setup cvsroot environment' '
|
||||
CVSROOT=$(pwd)/cvsroot &&
|
||||
export CVSROOT
|
||||
'
|
||||
|
||||
CVSROOT=$(pwd)/cvsroot
|
||||
export CVSROOT
|
||||
test_expect_success PERL 'setup cvsroot' '$CVS init'
|
||||
|
||||
test_expect_success 'setup cvsroot' '$CVS init'
|
||||
|
||||
test_expect_success 'setup a cvs module' '
|
||||
test_expect_success PERL 'setup a cvs module' '
|
||||
|
||||
mkdir "$CVSROOT/module" &&
|
||||
$CVS co -d module-cvs module &&
|
||||
@ -45,23 +42,23 @@ EOF
|
||||
cd ..
|
||||
'
|
||||
|
||||
test_expect_success 'import a trivial module' '
|
||||
test_expect_success PERL 'import a trivial module' '
|
||||
|
||||
git cvsimport -a -R -z 0 -C module-git module &&
|
||||
test_cmp module-cvs/o_fortuna module-git/o_fortuna
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'pack refs' 'cd module-git && git gc && cd ..'
|
||||
test_expect_success PERL 'pack refs' 'cd module-git && git gc && cd ..'
|
||||
|
||||
test_expect_success 'initial import has correct .git/cvs-revisions' '
|
||||
test_expect_success PERL 'initial import has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1) > expected &&
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'update cvs module' '
|
||||
test_expect_success PERL 'update cvs module' '
|
||||
|
||||
cd module-cvs &&
|
||||
cat <<EOF >o_fortuna &&
|
||||
@ -90,7 +87,7 @@ EOF
|
||||
cd ..
|
||||
'
|
||||
|
||||
test_expect_success 'update git module' '
|
||||
test_expect_success PERL 'update git module' '
|
||||
|
||||
cd module-git &&
|
||||
git cvsimport -a -R -z 0 module &&
|
||||
@ -100,7 +97,7 @@ test_expect_success 'update git module' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'update has correct .git/cvs-revisions' '
|
||||
test_expect_success PERL 'update has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1 HEAD^ &&
|
||||
@ -108,7 +105,7 @@ test_expect_success 'update has correct .git/cvs-revisions' '
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'update cvs module' '
|
||||
test_expect_success PERL 'update cvs module' '
|
||||
|
||||
cd module-cvs &&
|
||||
echo 1 >tick &&
|
||||
@ -118,7 +115,7 @@ test_expect_success 'update cvs module' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'cvsimport.module config works' '
|
||||
test_expect_success PERL 'cvsimport.module config works' '
|
||||
|
||||
cd module-git &&
|
||||
git config cvsimport.module module &&
|
||||
@ -129,7 +126,7 @@ test_expect_success 'cvsimport.module config works' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'second update has correct .git/cvs-revisions' '
|
||||
test_expect_success PERL 'second update has correct .git/cvs-revisions' '
|
||||
|
||||
(cd module-git &&
|
||||
git log --format="o_fortuna 1.1 %H" -1 HEAD^^ &&
|
||||
@ -138,7 +135,7 @@ test_expect_success 'second update has correct .git/cvs-revisions' '
|
||||
test_cmp expected module-git/.git/cvs-revisions
|
||||
'
|
||||
|
||||
test_expect_success 'import from a CVS working tree' '
|
||||
test_expect_success PERL 'import from a CVS working tree' '
|
||||
|
||||
$CVS co -d import-from-wt module &&
|
||||
cd import-from-wt &&
|
||||
@ -150,12 +147,12 @@ test_expect_success 'import from a CVS working tree' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'no .git/cvs-revisions created by default' '
|
||||
test_expect_success PERL 'no .git/cvs-revisions created by default' '
|
||||
|
||||
! test -e import-from-wt/.git/cvs-revisions
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test entire HEAD' 'test_cmp_branch_tree master'
|
||||
test_expect_success PERL 'test entire HEAD' 'test_cmp_branch_tree master'
|
||||
|
||||
test_done
|
||||
|
@ -34,50 +34,49 @@
|
||||
test_description='git cvsimport handling of vendor branches'
|
||||
. ./lib-cvs.sh
|
||||
|
||||
CVSROOT="$TEST_DIRECTORY"/t9601/cvsroot
|
||||
export CVSROOT
|
||||
setup_cvs_test_repository t9601
|
||||
|
||||
test_expect_success 'import a module with a vendor branch' '
|
||||
test_expect_success PERL 'import a module with a vendor branch' '
|
||||
|
||||
git cvsimport -C module-git module
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check HEAD out of cvs repository' 'test_cvs_co master'
|
||||
test_expect_success PERL 'check HEAD out of cvs repository' 'test_cvs_co master'
|
||||
|
||||
test_expect_success 'check master out of git repository' 'test_git_co master'
|
||||
test_expect_success PERL 'check master out of git repository' 'test_git_co master'
|
||||
|
||||
test_expect_success 'check a file that was imported once' '
|
||||
test_expect_success PERL 'check a file that was imported once' '
|
||||
|
||||
test_cmp_branch_file master imported-once.txt
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'check a file that was imported twice' '
|
||||
test_expect_failure PERL 'check a file that was imported twice' '
|
||||
|
||||
test_cmp_branch_file master imported-twice.txt
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check a file that was imported then modified on HEAD' '
|
||||
test_expect_success PERL 'check a file that was imported then modified on HEAD' '
|
||||
|
||||
test_cmp_branch_file master imported-modified.txt
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check a file that was imported, modified, then imported again' '
|
||||
test_expect_success PERL 'check a file that was imported, modified, then imported again' '
|
||||
|
||||
test_cmp_branch_file master imported-modified-imported.txt
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'check a file that was added to HEAD then imported' '
|
||||
test_expect_success PERL 'check a file that was added to HEAD then imported' '
|
||||
|
||||
test_cmp_branch_file master added-imported.txt
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'a vendor branch whose tag has been removed' '
|
||||
test_expect_success PERL 'a vendor branch whose tag has been removed' '
|
||||
|
||||
test_cmp_branch_file master imported-anonymously.txt
|
||||
|
||||
|
@ -6,70 +6,69 @@
|
||||
test_description='git cvsimport handling of branches and tags'
|
||||
. ./lib-cvs.sh
|
||||
|
||||
CVSROOT="$TEST_DIRECTORY"/t9602/cvsroot
|
||||
export CVSROOT
|
||||
setup_cvs_test_repository t9602
|
||||
|
||||
test_expect_success 'import module' '
|
||||
test_expect_success PERL 'import module' '
|
||||
|
||||
git cvsimport -C module-git module
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test branch master' '
|
||||
test_expect_success PERL 'test branch master' '
|
||||
|
||||
test_cmp_branch_tree master
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test branch vendorbranch' '
|
||||
test_expect_success PERL 'test branch vendorbranch' '
|
||||
|
||||
test_cmp_branch_tree vendorbranch
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test branch B_FROM_INITIALS' '
|
||||
test_expect_failure PERL 'test branch B_FROM_INITIALS' '
|
||||
|
||||
test_cmp_branch_tree B_FROM_INITIALS
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test branch B_FROM_INITIALS_BUT_ONE' '
|
||||
test_expect_failure PERL 'test branch B_FROM_INITIALS_BUT_ONE' '
|
||||
|
||||
test_cmp_branch_tree B_FROM_INITIALS_BUT_ONE
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test branch B_MIXED' '
|
||||
test_expect_failure PERL 'test branch B_MIXED' '
|
||||
|
||||
test_cmp_branch_tree B_MIXED
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test branch B_SPLIT' '
|
||||
test_expect_success PERL 'test branch B_SPLIT' '
|
||||
|
||||
test_cmp_branch_tree B_SPLIT
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test tag vendortag' '
|
||||
test_expect_failure PERL 'test tag vendortag' '
|
||||
|
||||
test_cmp_branch_tree vendortag
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'test tag T_ALL_INITIAL_FILES' '
|
||||
test_expect_success PERL 'test tag T_ALL_INITIAL_FILES' '
|
||||
|
||||
test_cmp_branch_tree T_ALL_INITIAL_FILES
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test tag T_ALL_INITIAL_FILES_BUT_ONE' '
|
||||
test_expect_failure PERL 'test tag T_ALL_INITIAL_FILES_BUT_ONE' '
|
||||
|
||||
test_cmp_branch_tree T_ALL_INITIAL_FILES_BUT_ONE
|
||||
|
||||
'
|
||||
|
||||
test_expect_failure 'test tag T_MIXED' '
|
||||
test_expect_failure PERL 'test tag T_MIXED' '
|
||||
|
||||
test_cmp_branch_tree T_MIXED
|
||||
|
||||
|
@ -14,8 +14,7 @@
|
||||
test_description='git cvsimport testing for correct patchset estimation'
|
||||
. ./lib-cvs.sh
|
||||
|
||||
CVSROOT="$TEST_DIRECTORY"/t9603/cvsroot
|
||||
export CVSROOT
|
||||
setup_cvs_test_repository t9603
|
||||
|
||||
test_expect_failure 'import with criss cross times on revisions' '
|
||||
|
||||
|
119
t/test-lib.sh
119
t/test-lib.sh
@ -331,12 +331,35 @@ test_set_prereq () {
|
||||
satisfied=" "
|
||||
|
||||
test_have_prereq () {
|
||||
case $satisfied in
|
||||
*" $1 "*)
|
||||
: yes, have it ;;
|
||||
*)
|
||||
! : nope ;;
|
||||
esac
|
||||
# prerequisites can be concatenated with ','
|
||||
save_IFS=$IFS
|
||||
IFS=,
|
||||
set -- $*
|
||||
IFS=$save_IFS
|
||||
|
||||
total_prereq=0
|
||||
ok_prereq=0
|
||||
missing_prereq=
|
||||
|
||||
for prerequisite
|
||||
do
|
||||
total_prereq=$(($total_prereq + 1))
|
||||
case $satisfied in
|
||||
*" $prerequisite "*)
|
||||
ok_prereq=$(($ok_prereq + 1))
|
||||
;;
|
||||
*)
|
||||
# Keep a list of missing prerequisites
|
||||
if test -z "$missing_prereq"
|
||||
then
|
||||
missing_prereq=$prerequisite
|
||||
else
|
||||
missing_prereq="$prerequisite,$missing_prereq"
|
||||
fi
|
||||
esac
|
||||
done
|
||||
|
||||
test $total_prereq = $ok_prereq
|
||||
}
|
||||
|
||||
# You are not expected to call test_ok_ and test_failure_ directly, use
|
||||
@ -398,8 +421,14 @@ test_skip () {
|
||||
fi
|
||||
case "$to_skip" in
|
||||
t)
|
||||
of_prereq=
|
||||
if test "$missing_prereq" != "$prereq"
|
||||
then
|
||||
of_prereq=" of $prereq"
|
||||
fi
|
||||
|
||||
say_color skip >&3 "skipping test: $@"
|
||||
say_color skip "ok $test_count # skip $1"
|
||||
say_color skip "ok $test_count # skip $1 (missing $missing_prereq${of_prereq})"
|
||||
: true
|
||||
;;
|
||||
*)
|
||||
@ -657,28 +686,31 @@ test_when_finished () {
|
||||
test_create_repo () {
|
||||
test "$#" = 1 ||
|
||||
error "bug in the test script: not 1 parameter to test-create-repo"
|
||||
owd=`pwd`
|
||||
repo="$1"
|
||||
mkdir -p "$repo"
|
||||
cd "$repo" || error "Cannot setup test environment"
|
||||
"$GIT_EXEC_PATH/git-init" "--template=$TEST_DIRECTORY/../templates/blt/" >&3 2>&4 ||
|
||||
error "cannot run git init -- have you built things yet?"
|
||||
mv .git/hooks .git/hooks-disabled
|
||||
cd "$owd"
|
||||
(
|
||||
cd "$repo" || error "Cannot setup test environment"
|
||||
"$GIT_EXEC_PATH/git-init" "--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
|
||||
error "cannot run git init -- have you built things yet?"
|
||||
mv .git/hooks .git/hooks-disabled
|
||||
) || exit
|
||||
}
|
||||
|
||||
test_done () {
|
||||
GIT_EXIT_OK=t
|
||||
test_results_dir="$TEST_DIRECTORY/test-results"
|
||||
mkdir -p "$test_results_dir"
|
||||
test_results_path="$test_results_dir/${0%.sh}-$$.counts"
|
||||
|
||||
echo "total $test_count" >> $test_results_path
|
||||
echo "success $test_success" >> $test_results_path
|
||||
echo "fixed $test_fixed" >> $test_results_path
|
||||
echo "broken $test_broken" >> $test_results_path
|
||||
echo "failed $test_failure" >> $test_results_path
|
||||
echo "" >> $test_results_path
|
||||
if test -z "$HARNESS_ACTIVE"; then
|
||||
test_results_dir="$TEST_DIRECTORY/test-results"
|
||||
mkdir -p "$test_results_dir"
|
||||
test_results_path="$test_results_dir/${0%.sh}-$$.counts"
|
||||
|
||||
echo "total $test_count" >> $test_results_path
|
||||
echo "success $test_success" >> $test_results_path
|
||||
echo "fixed $test_fixed" >> $test_results_path
|
||||
echo "broken $test_broken" >> $test_results_path
|
||||
echo "failed $test_failure" >> $test_results_path
|
||||
echo "" >> $test_results_path
|
||||
fi
|
||||
|
||||
if test "$test_fixed" != 0
|
||||
then
|
||||
@ -720,7 +752,15 @@ test_done () {
|
||||
|
||||
# Test the binaries we have just built. The tests are kept in
|
||||
# t/ subdirectory and are run in 'trash directory' subdirectory.
|
||||
TEST_DIRECTORY=$(pwd)
|
||||
if test -z "$TEST_DIRECTORY"
|
||||
then
|
||||
# We allow tests to override this, in case they want to run tests
|
||||
# outside of t/, e.g. for running tests on the test library
|
||||
# itself.
|
||||
TEST_DIRECTORY=$(pwd)
|
||||
fi
|
||||
GIT_BUILD_DIR="$TEST_DIRECTORY"/..
|
||||
|
||||
if test -n "$valgrind"
|
||||
then
|
||||
make_symlink () {
|
||||
@ -747,7 +787,7 @@ then
|
||||
test -x "$1" || return
|
||||
|
||||
base=$(basename "$1")
|
||||
symlink_target=$TEST_DIRECTORY/../$base
|
||||
symlink_target=$GIT_BUILD_DIR/$base
|
||||
# do not override scripts
|
||||
if test -x "$symlink_target" &&
|
||||
test ! -d "$symlink_target" &&
|
||||
@ -766,7 +806,7 @@ then
|
||||
# override all git executables in TEST_DIRECTORY/..
|
||||
GIT_VALGRIND=$TEST_DIRECTORY/valgrind
|
||||
mkdir -p "$GIT_VALGRIND"/bin
|
||||
for file in $TEST_DIRECTORY/../git* $TEST_DIRECTORY/../test-*
|
||||
for file in $GIT_BUILD_DIR/git* $GIT_BUILD_DIR/test-*
|
||||
do
|
||||
make_valgrind_symlink $file
|
||||
done
|
||||
@ -787,10 +827,10 @@ then
|
||||
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:$TEST_DIRECTORY/..:$PATH
|
||||
PATH=$GIT_TEST_INSTALLED:$GIT_BUILD_DIR:$PATH
|
||||
GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH}
|
||||
else # normal case, use ../bin-wrappers only unless $with_dashes:
|
||||
git_bin_dir="$TEST_DIRECTORY/../bin-wrappers"
|
||||
git_bin_dir="$GIT_BUILD_DIR/bin-wrappers"
|
||||
if ! test -x "$git_bin_dir/git" ; then
|
||||
if test -z "$with_dashes" ; then
|
||||
say "$git_bin_dir/git is not executable; using GIT_EXEC_PATH"
|
||||
@ -798,18 +838,18 @@ else # normal case, use ../bin-wrappers only unless $with_dashes:
|
||||
with_dashes=t
|
||||
fi
|
||||
PATH="$git_bin_dir:$PATH"
|
||||
GIT_EXEC_PATH=$TEST_DIRECTORY/..
|
||||
GIT_EXEC_PATH=$GIT_BUILD_DIR
|
||||
if test -n "$with_dashes" ; then
|
||||
PATH="$TEST_DIRECTORY/..:$PATH"
|
||||
PATH="$GIT_BUILD_DIR:$PATH"
|
||||
fi
|
||||
fi
|
||||
GIT_TEMPLATE_DIR=$(pwd)/../templates/blt
|
||||
GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt
|
||||
unset GIT_CONFIG
|
||||
GIT_CONFIG_NOSYSTEM=1
|
||||
GIT_CONFIG_NOGLOBAL=1
|
||||
export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR GIT_CONFIG_NOSYSTEM GIT_CONFIG_NOGLOBAL
|
||||
|
||||
. ../GIT-BUILD-OPTIONS
|
||||
. "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
|
||||
|
||||
if test -z "$GIT_TEST_CMP"
|
||||
then
|
||||
@ -821,22 +861,22 @@ then
|
||||
fi
|
||||
fi
|
||||
|
||||
GITPERLLIB=$(pwd)/../perl/blib/lib:$(pwd)/../perl/blib/arch/auto/Git
|
||||
GITPERLLIB="$GIT_BUILD_DIR"/perl/blib/lib:"$GIT_BUILD_DIR"/perl/blib/arch/auto/Git
|
||||
export GITPERLLIB
|
||||
test -d ../templates/blt || {
|
||||
test -d "$GIT_BUILD_DIR"/templates/blt || {
|
||||
error "You haven't built things yet, have you?"
|
||||
}
|
||||
|
||||
if test -z "$GIT_TEST_INSTALLED" && test -z "$NO_PYTHON"
|
||||
then
|
||||
GITPYTHONLIB="$(pwd)/../git_remote_helpers/build/lib"
|
||||
GITPYTHONLIB="$GIT_BUILD_DIR/git_remote_helpers/build/lib"
|
||||
export GITPYTHONLIB
|
||||
test -d ../git_remote_helpers/build || {
|
||||
test -d "$GIT_BUILD_DIR"/git_remote_helpers/build || {
|
||||
error "You haven't built git_remote_helpers yet, have you?"
|
||||
}
|
||||
fi
|
||||
|
||||
if ! test -x ../test-chmtime; then
|
||||
if ! test -x "$GIT_BUILD_DIR"/test-chmtime; then
|
||||
echo >&2 'You need to build test-chmtime:'
|
||||
echo >&2 'Run "make test-chmtime" in the source (toplevel) directory'
|
||||
exit 1
|
||||
@ -861,6 +901,9 @@ test_create_repo "$test"
|
||||
# in subprocesses like git equals our $PWD (for pathname comparisons).
|
||||
cd -P "$test" || exit 1
|
||||
|
||||
HOME=$(pwd)
|
||||
export HOME
|
||||
|
||||
this_test=${0##*/}
|
||||
this_test=${this_test%%-*}
|
||||
for skp in $GIT_SKIP_TESTS
|
||||
@ -922,3 +965,7 @@ test -z "$NO_PYTHON" && test_set_prereq PYTHON
|
||||
# test whether the filesystem supports symbolic links
|
||||
ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS
|
||||
rm -f y
|
||||
|
||||
# When the tests are run as root, permission tests will report that
|
||||
# things are writable when they shouldn't be.
|
||||
test -w / || test_set_prereq SANITY
|
||||
|
Loading…
Reference in New Issue
Block a user