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:
Junio C Hamano 2010-09-04 08:15:36 -07:00
commit a2c6726417
51 changed files with 968 additions and 559 deletions

6
.gitignore vendored
View File

@ -186,6 +186,12 @@
*.[aos] *.[aos]
*.py[co] *.py[co]
.depend/ .depend/
*.gcda
*.gcno
*.gcov
/coverage-untested-functions
/cover_db/
/cover_db_html/
*+ *+
/config.mak /config.mak
/autom4te.cache /autom4te.cache

View File

@ -310,6 +310,7 @@ TCL_PATH = tclsh
TCLTK_PATH = wish TCLTK_PATH = wish
PTHREAD_LIBS = -lpthread PTHREAD_LIBS = -lpthread
PTHREAD_CFLAGS = PTHREAD_CFLAGS =
GCOV = gcov
export TCL_PATH TCLTK_PATH export TCL_PATH TCLTK_PATH
@ -1499,6 +1500,7 @@ ifndef V
QUIET_BUILT_IN = @echo ' ' BUILTIN $@; QUIET_BUILT_IN = @echo ' ' BUILTIN $@;
QUIET_GEN = @echo ' ' GEN $@; QUIET_GEN = @echo ' ' GEN $@;
QUIET_LNCP = @echo ' ' LN/CP $@; QUIET_LNCP = @echo ' ' LN/CP $@;
QUIET_GCOV = @echo ' ' GCOV $@;
QUIET_SUBDIR0 = +@subdir= QUIET_SUBDIR0 = +@subdir=
QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
$(MAKE) $(PRINT_DIR) -C $$subdir $(MAKE) $(PRINT_DIR) -C $$subdir
@ -2324,11 +2326,18 @@ coverage:
$(MAKE) coverage-build $(MAKE) coverage-build
$(MAKE) coverage-report $(MAKE) coverage-report
object_dirs := $(sort $(dir $(OBJECTS)))
coverage-clean: 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_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
coverage-build: coverage-clean coverage-build: coverage-clean
$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all $(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
@ -2336,7 +2345,17 @@ coverage-build: coverage-clean
-j1 test -j1 test
coverage-report: 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 \ grep '^function.*called 0 ' *.c.gcov \
| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \ | 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

View File

@ -8,6 +8,7 @@
#GIT_TEST_OPTS=--verbose --debug #GIT_TEST_OPTS=--verbose --debug
SHELL_PATH ?= $(SHELL) SHELL_PATH ?= $(SHELL)
PERL_PATH ?= /usr/bin/perl
TAR ?= $(TAR) TAR ?= $(TAR)
RM ?= rm -f RM ?= rm -f
@ -28,7 +29,6 @@ pre-clean:
clean: clean:
$(RM) -r 'trash directory'.* test-results $(RM) -r 'trash directory'.* test-results
$(RM) t????/cvsroot/CVSROOT/?*
$(RM) -r valgrind/bin $(RM) -r valgrind/bin
$(RM) .prove $(RM) .prove
@ -49,4 +49,42 @@ full-svn-test:
valgrind: valgrind:
GIT_TEST_OPTS=--valgrind $(MAKE) 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
View File

@ -268,6 +268,18 @@ Do:
git push gh && git push gh &&
test ... 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: Don't:
- exit() within a <script> part. - exit() within a <script> part.
@ -307,9 +319,21 @@ Keep in mind:
Skipping tests Skipping tests
-------------- --------------
If you need to skip all the remaining tests you should set skip_all If you need to skip tests you should do so be using the three-arg form
and immediately call test_done. The string you give to skip_all will of the test_* functions (see the "Test harness library" section
be used as an explanation for why the test was skipped. for instance: 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 if ! test_have_prereq PERL
then then
@ -317,6 +341,9 @@ be used as an explanation for why the test was skipped. for instance:
test_done test_done
fi fi
The string you give to skip_all will be used as an explanation for why
the test was skipped.
End with test_done 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' \ 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> - test_expect_failure [<prereq>] <message> <script>
This is NOT the opposite of test_expect_success, but is used 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 - test_set_prereq SOME_PREREQ
Set a test prerequisite to be used later with test_have_prereq. The 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 test-lib will set some prerequisites for you, see the
which are derived from ./GIT-BUILD-OPTIONS (grep test_set_prereq "Prerequisites" section below for a full list of these.
test-lib.sh for more). Others you can set yourself and use later
with either test_have_prereq directly, or the three argument Others you can set yourself and use later with either
invocation of test_expect_success and test_expect_failure. test_have_prereq directly, or the three argument invocation of
test_expect_success and test_expect_failure.
- test_have_prereq SOME PREREQ - 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 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 validation in one place. Your test also ends up needing
updating when such a change to the internal happens, so do _not_ 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. 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
View 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);

View File

@ -3,9 +3,6 @@
. ./test-lib.sh . ./test-lib.sh
unset CVS_SERVER unset CVS_SERVER
# for clean cvsps cache
HOME=$(pwd)
export HOME
if ! type cvs >/dev/null 2>&1 if ! type cvs >/dev/null 2>&1
then then
@ -30,6 +27,12 @@ case "$cvsps_version" in
;; ;;
esac esac
setup_cvs_test_repository () {
CVSROOT="$(pwd)/.cvsroot" &&
cp -r "$TEST_DIRECTORY/$1/cvsroot" "$CVSROOT" &&
export CVSROOT
}
test_cvs_co () { test_cvs_co () {
# Usage: test_cvs_co BRANCH_NAME # Usage: test_cvs_co BRANCH_NAME
rm -rf module-cvs-"$1" rm -rf module-cvs-"$1"

View File

@ -2,11 +2,6 @@
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq PERL; then
skip_all='skipping --patch tests, perl not available'
test_done
fi
set_state () { set_state () {
echo "$3" > "$1" && echo "$3" > "$1" &&
git add "$1" && git add "$1" &&

11
t/lib-prereq-FILEMODE.sh Normal file
View 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

View File

@ -54,9 +54,40 @@ test_expect_success 'success is reported like this' '
test_expect_failure 'pretend we have a known breakage' ' test_expect_failure 'pretend we have a known breakage' '
false 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_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 test_set_prereq HAVEIT
haveit=no haveit=no
test_expect_success HAVEIT 'test runs if prerequisite is satisfied' ' test_expect_success HAVEIT 'test runs if prerequisite is satisfied' '
@ -73,6 +104,27 @@ then
exit 1 exit 1
fi 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 clean=no
test_expect_success 'tests clean up after themselves' ' test_expect_success 'tests clean up after themselves' '
test_when_finished clean=yes test_when_finished clean=yes

View File

@ -171,8 +171,6 @@ test_expect_success 'init with init.templatedir set' '
mkdir templatedir-source && mkdir templatedir-source &&
echo Content >templatedir-source/file && echo Content >templatedir-source/file &&
( (
HOME="`pwd`" &&
export HOME &&
test_config="${HOME}/.gitconfig" && test_config="${HOME}/.gitconfig" &&
git config -f "$test_config" init.templatedir "${HOME}/templatedir-source" && git config -f "$test_config" init.templatedir "${HOME}/templatedir-source" &&
mkdir templatedir-set && 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' ' test_expect_success 'init --bare/--shared overrides system/global config' '
( (
HOME="`pwd`" &&
export HOME &&
test_config="$HOME"/.gitconfig && test_config="$HOME"/.gitconfig &&
unset GIT_CONFIG_NOGLOBAL && unset GIT_CONFIG_NOGLOBAL &&
git config -f "$test_config" core.bare false && 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' ' test_expect_success 'init honors global core.sharedRepository' '
( (
HOME="`pwd`" &&
export HOME &&
test_config="$HOME"/.gitconfig && test_config="$HOME"/.gitconfig &&
unset GIT_CONFIG_NOGLOBAL && unset GIT_CONFIG_NOGLOBAL &&
git config -f "$test_config" core.sharedRepository 0666 && 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 && rm -fr newdir &&
( (
mkdir newdir && mkdir newdir &&

View File

@ -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/?? && 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/?? && 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 && 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 && echo b >file &&

View 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 && rm -fr a b &&
git reset --hard && git reset --hard &&

View File

@ -18,9 +18,11 @@ umask 077
setfacl_out="$(setfacl -m u:root:rwx . 2>&1)" setfacl_out="$(setfacl -m u:root:rwx . 2>&1)"
setfacl_ret=$? setfacl_ret=$?
if [ $setfacl_ret != 0 ]; then if test $setfacl_ret != 0
skip_all="Skipping ACL tests: unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')" then
test_done say "Unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')"
else
test_set_prereq SETFACL
fi fi
check_perms_and_acl () { check_perms_and_acl () {
@ -34,7 +36,7 @@ check_perms_and_acl () {
dirs_to_set="./ .git/ .git/objects/ .git/objects/pack/" 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 d:u::rwx,d:g::---,d:o:---,d:m:rwx $dirs_to_set &&
setfacl -m m:rwx $dirs_to_set && setfacl -m m:rwx $dirs_to_set &&
setfacl -m u:root: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" 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 # SHA1 for empty blob
check_perms_and_acl .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 && git gc &&
check_perms_and_acl .git/objects/pack/*.pack check_perms_and_acl .git/objects/pack/*.pack
' '

View File

@ -6,13 +6,7 @@ test_description='git checkout to switch between branches with symlink<->dir'
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS setup '
then
skip_all="symbolic links not supported - skipping tests"
test_done
fi
test_expect_success setup '
mkdir frotz && mkdir frotz &&
echo hello >frotz/filfre && 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 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 && rm -fr frotz xyzzy nitfol &&
git checkout -f master git checkout -f master
' '
test_expect_success 'switch from dir to symlink' ' test_expect_success SYMLINKS 'switch from dir to symlink' '
git checkout side git checkout side

View File

@ -4,7 +4,7 @@ test_description='git checkout --patch'
. ./lib-patch-mode.sh . ./lib-patch-mode.sh
test_expect_success 'setup' ' test_expect_success PERL 'setup' '
mkdir dir && mkdir dir &&
echo parent > dir/foo && echo parent > dir/foo &&
echo dummy > bar && 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' # 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 && set_and_save_state dir/foo work head &&
(echo n; echo n) | git checkout -p && (echo n; echo n) | git checkout -p &&
verify_saved_state bar && verify_saved_state bar &&
verify_saved_state dir/foo 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 && (echo n; echo y) | git checkout -p &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo head head 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 set_state dir/foo work index
(echo n; echo y) | git checkout -p && (echo n; echo y) | git checkout -p &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo index index 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 && set_and_save_state dir/foo work head &&
(echo n; echo y; echo n) | git checkout -p HEAD && (echo n; echo y; echo n) | git checkout -p HEAD &&
verify_saved_state bar && verify_saved_state bar &&
verify_saved_state dir/foo 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 && (echo n; echo y; echo y) | git checkout -p HEAD &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo head head 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 set_state dir/foo index index
# the third n is to get out in case it mistakenly does not apply # the third n is to get out in case it mistakenly does not apply
(echo n; echo y; echo n) | git checkout -p HEAD && (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 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 # the third n is to get out in case it mistakenly does not apply
(echo n; echo y; echo n) | git checkout -p HEAD^ && (echo n; echo y; echo n) | git checkout -p HEAD^ &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo parent parent 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 && set_state dir/foo work index &&
rm dir/foo && rm dir/foo &&
(echo n; echo y) | git checkout -p && (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 # 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). # 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 && set_state dir/foo work head &&
(echo y; echo n) | git checkout -p dir && (echo y; echo n) | git checkout -p dir &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo head head 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 && set_state dir/foo work head &&
(echo y; echo n) | git checkout -p -- dir && (echo y; echo n) | git checkout -p -- dir &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo head head 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 # 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 && (echo y; echo n; echo n) | git checkout -p HEAD^ -- dir &&
verify_saved_state bar && verify_saved_state bar &&
verify_state dir/foo parent parent 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 && set_state dir/foo work head &&
# the third n is to get out in case it mistakenly does not apply # 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) && (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 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 verify_saved_head
' '

View File

@ -24,19 +24,25 @@ EOF
cat 2>/dev/null >"$p1" "$p0" cat 2>/dev/null >"$p1" "$p0"
echo 'Foo Bar Baz' >"$p2" 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 # since FAT/NTFS does not allow tabs in filenames, skip this test
skip_all='Your filesystem does not allow tabs in filenames, test skipped.' say 'Your filesystem does not allow tabs in filenames'
test_done fi
}
test_expect_success TABS_IN_FILENAMES 'setup expect' "
echo 'just space echo 'just space
no-funny' >expected 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 update-index --add "$p0" "$p2" &&
git ls-files >current && git ls-files >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
t0=`git write-tree` t0=`git write-tree`
echo "$t0" >t0 echo "$t0" >t0
@ -45,18 +51,24 @@ just space
no-funny no-funny
"tabs\t,\" (dq) and spaces" "tabs\t,\" (dq) and spaces"
EOF 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 update-index --add "$p1" &&
git ls-files >current && git ls-files >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' "
echo 'just space echo 'just space
no-funny no-funny
tabs ," (dq) and spaces' >expected tabs ,\" (dq) and spaces' >expected
test_expect_success 'git ls-files -z with-funny' \ "
test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
'git ls-files -z | perl -pe y/\\000/\\012/ >current && 'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
t1=`git write-tree` t1=`git write-tree`
echo "$t1" >t1 echo "$t1" >t1
@ -65,60 +77,78 @@ just space
no-funny no-funny
"tabs\t,\" (dq) and spaces" "tabs\t,\" (dq) and spaces"
EOF 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 && 'git ls-tree -r $t1 | sed -e "s/^[^ ]* //" >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF cat > expected <<\EOF
A "tabs\t,\" (dq) and spaces" A "tabs\t,\" (dq) and spaces"
EOF 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 && 'git diff-index --name-status $t0 >current &&
test_cmp expected 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 && 'git diff-tree --name-status $t0 $t1 >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' "
echo 'A echo 'A
tabs ," (dq) and spaces' >expected tabs ,\" (dq) and spaces' >expected
test_expect_success 'git diff-index -z with-funny' \ "
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 && 'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
test_cmp expected 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 && 'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF cat > expected <<\EOF
CNUM no-funny "tabs\t,\" (dq) and spaces" CNUM no-funny "tabs\t,\" (dq) and spaces"
EOF 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 \ 'git diff-tree -C --find-copies-harder --name-status \
$t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current && $t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF cat > expected <<\EOF
RNUM no-funny "tabs\t,\" (dq) and spaces" RNUM no-funny "tabs\t,\" (dq) and spaces"
EOF 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 update-index --force-remove "$p0" &&
git diff-index -M --name-status \ git diff-index -M --name-status \
$t0 | sed -e 's/^R[0-9]*/RNUM/' >current && $t0 | sed -e 's/^R[0-9]*/RNUM/' >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF cat > expected <<\EOF
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
similarity index NUM% similarity index NUM%
rename from no-funny rename from no-funny
rename to "tabs\t,\" (dq) and spaces" rename to "tabs\t,\" (dq) and spaces"
EOF 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 | 'git diff-index -M -p $t0 |
sed -e "s/index [0-9]*%/index NUM%/" >current && sed -e "s/index [0-9]*%/index NUM%/" >current &&
test_cmp expected current' test_cmp expected current'
chmod +x "$p1" test_expect_success TABS_IN_FILENAMES 'setup expect' '
chmod +x "$p1" &&
cat > expected <<\EOF cat > expected <<\EOF
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces" diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
old mode 100644 old mode 100644
@ -127,31 +157,39 @@ similarity index NUM%
rename from no-funny rename from no-funny
rename to "tabs\t,\" (dq) and spaces" rename to "tabs\t,\" (dq) and spaces"
EOF 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 | 'git diff-index -M -p $t0 |
sed -e "s/index [0-9]*%/index NUM%/" >current && sed -e "s/index [0-9]*%/index NUM%/" >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat >expected <<\EOF cat >expected <<\EOF
"tabs\t,\" (dq) and spaces" "tabs\t,\" (dq) and spaces"
1 files changed, 0 insertions(+), 0 deletions(-) 1 files changed, 0 insertions(+), 0 deletions(-)
EOF 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 diff-index -M -p $t0 |
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current && git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
test_cmp expected current' test_cmp expected current'
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF cat > expected <<\EOF
no-funny no-funny
"tabs\t,\" (dq) and spaces" "tabs\t,\" (dq) and spaces"
2 files changed, 3 insertions(+), 3 deletions(-) 2 files changed, 3 insertions(+), 3 deletions(-)
EOF 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 diff-index -p $t0 |
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current && git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&
test_cmp expected 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 | 'git diff-index -p $t0 |
sed -ne "/^[-+@]/p" | sed -ne "/^[-+@]/p" |
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current && git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current &&

View File

@ -7,11 +7,9 @@ test_description='Test commit notes index (expensive!)'
. ./test-lib.sh . ./test-lib.sh
test -z "$GIT_NOTES_TIMING_TESTS" && { test_set_prereq NOT_EXPENSIVE
skip_all="Skipping timing tests" test -n "$GIT_NOTES_TIMING_TESTS" && test_set_prereq EXPENSIVE
test_done test -x /usr/bin/time && test_set_prereq USR_BIN_TIME
exit
}
create_repo () { create_repo () {
number_of_commits=$1 number_of_commits=$1
@ -102,17 +100,27 @@ time_notes () {
done done
} }
for count in 10 100 1000 10000; do do_tests () {
pr=$1
count=$2
mkdir $count test_expect_success $pr 'setup / mkdir' '
(cd $count; 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 done
test_done test_done

View File

@ -28,22 +28,6 @@ embedded' &&
git commit -m 'add files with tabs and newlines' 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 \ test_expect_success \
'Pre-check that foo exists and is in index before git rm foo' \ 'Pre-check that foo exists and is in index before git rm foo' \
'[ -f foo ] && git ls-files --error-unmatch foo' '[ -f foo ] && git ls-files --error-unmatch foo'

View File

@ -179,7 +179,7 @@ test_expect_success 'git add --refresh' '
test -z "`git diff-index HEAD -- foo`" 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 && git reset --hard &&
date >foo1 && date >foo1 &&
date >foo2 && date >foo2 &&
@ -190,7 +190,7 @@ test_expect_success POSIXPERM 'git add should fail atomically upon an unreadable
rm -f foo2 rm -f foo2
test_expect_success POSIXPERM 'git add --ignore-errors' ' test_expect_success POSIXPERM,SANITY 'git add --ignore-errors' '
git reset --hard && git reset --hard &&
date >foo1 && date >foo1 &&
date >foo2 && date >foo2 &&
@ -201,7 +201,7 @@ test_expect_success POSIXPERM 'git add --ignore-errors' '
rm -f foo2 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 config add.ignore-errors 1 &&
git reset --hard && git reset --hard &&
date >foo1 && date >foo1 &&
@ -212,7 +212,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors)' '
' '
rm -f foo2 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 config add.ignore-errors 0 &&
git reset --hard && git reset --hard &&
date >foo1 && date >foo1 &&
@ -223,7 +223,7 @@ test_expect_success POSIXPERM 'git add (add.ignore-errors = false)' '
' '
rm -f foo2 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 config add.ignore-errors 1 &&
git reset --hard && git reset --hard &&
date >foo1 && date >foo1 &&

View File

@ -2,22 +2,20 @@
test_description='add -i basic tests' test_description='add -i basic tests'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
if ! test_have_prereq PERL; then test_expect_success PERL 'setup (initial)' '
skip_all='skipping git add -i tests, perl not available'
test_done
fi
test_expect_success 'setup (initial)' '
echo content >file && echo content >file &&
git add file && git add file &&
echo more >>file && echo more >>file &&
echo lines >>file echo lines >>file
' '
test_expect_success 'status works (initial)' ' test_expect_success PERL 'status works (initial)' '
git add -i </dev/null >output && git add -i </dev/null >output &&
grep "+1/-0 *+2/-0 file" output grep "+1/-0 *+2/-0 file" output
' '
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
new file mode 100644 new file mode 100644
index 0000000..d95f3ad index 0000000..d95f3ad
@ -26,19 +24,21 @@ index 0000000..d95f3ad
@@ -0,0 +1 @@ @@ -0,0 +1 @@
+content +content
EOF EOF
test_expect_success 'diff works (initial)' ' '
test_expect_success PERL 'diff works (initial)' '
(echo d; echo 1) | git add -i >output && (echo d; echo 1) | git add -i >output &&
sed -ne "/new file/,/content/p" <output >diff && sed -ne "/new file/,/content/p" <output >diff &&
test_cmp expected diff test_cmp expected diff
' '
test_expect_success 'revert works (initial)' ' test_expect_success PERL 'revert works (initial)' '
git add file && git add file &&
(echo r; echo 1) | git add -i && (echo r; echo 1) | git add -i &&
git ls-files >output && git ls-files >output &&
! grep . output ! grep . output
' '
test_expect_success 'setup (commit)' ' test_expect_success PERL 'setup (commit)' '
echo baseline >file && echo baseline >file &&
git add file && git add file &&
git commit -m commit && git commit -m commit &&
@ -47,10 +47,12 @@ test_expect_success 'setup (commit)' '
echo more >>file && echo more >>file &&
echo lines >>file echo lines >>file
' '
test_expect_success 'status works (commit)' ' test_expect_success PERL 'status works (commit)' '
git add -i </dev/null >output && git add -i </dev/null >output &&
grep "+1/-0 *+2/-0 file" output grep "+1/-0 *+2/-0 file" output
' '
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
index 180b47c..b6f2c08 100644 index 180b47c..b6f2c08 100644
--- a/file --- a/file
@ -59,60 +61,79 @@ index 180b47c..b6f2c08 100644
baseline baseline
+content +content
EOF EOF
test_expect_success 'diff works (commit)' ' '
test_expect_success PERL 'diff works (commit)' '
(echo d; echo 1) | git add -i >output && (echo d; echo 1) | git add -i >output &&
sed -ne "/^index/,/content/p" <output >diff && sed -ne "/^index/,/content/p" <output >diff &&
test_cmp expected diff test_cmp expected diff
' '
test_expect_success 'revert works (commit)' ' test_expect_success PERL 'revert works (commit)' '
git add file && git add file &&
(echo r; echo 1) | git add -i && (echo r; echo 1) | git add -i &&
git add -i </dev/null >output && git add -i </dev/null >output &&
grep "unchanged *+3/-0 file" output grep "unchanged *+3/-0 file" output
' '
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
EOF EOF
cat >fake_editor.sh <<EOF '
EOF
chmod a+x fake_editor.sh test_expect_success PERL 'setup fake editor' '
test_set_editor "$(pwd)/fake_editor.sh" cat >fake_editor.sh <<EOF
test_expect_success 'dummy edit works' ' 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 && (echo e; echo a) | git add -p &&
git diff > diff && git diff > diff &&
test_cmp expected diff test_cmp expected diff
' '
test_expect_success PERL 'setup patch' '
cat >patch <<EOF cat >patch <<EOF
@@ -1,1 +1,4 @@ @@ -1,1 +1,4 @@
this this
+patch +patch
-doesn't -does not
apply apply
EOF 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 "$1" oldpatch &&
mv -f patch "$1" mv -f patch "$1"
EOF EOF
chmod a+x fake_editor.sh chmod a+x fake_editor.sh &&
test_set_editor "$(pwd)/fake_editor.sh" test_set_editor "$(pwd)/fake_editor.sh"
test_expect_success 'bad edit rejected' ' '
test_expect_success PERL 'bad edit rejected' '
git reset && git reset &&
(echo e; echo n; echo d) | git add -p >output && (echo e; echo n; echo d) | git add -p >output &&
grep "hunk does not apply" output grep "hunk does not apply" output
' '
test_expect_success PERL 'setup patch' '
cat >patch <<EOF cat >patch <<EOF
this patch this patch
is garbage is garbage
EOF EOF
test_expect_success 'garbage edit rejected' ' '
test_expect_success PERL 'garbage edit rejected' '
git reset && git reset &&
(echo e; echo n; echo d) | git add -p >output && (echo e; echo n; echo d) | git add -p >output &&
grep "hunk does not apply" output grep "hunk does not apply" output
' '
test_expect_success PERL 'setup patch' '
cat >patch <<EOF cat >patch <<EOF
@@ -1,0 +1,0 @@ @@ -1,0 +1,0 @@
baseline baseline
@ -120,6 +141,9 @@ cat >patch <<EOF
+newcontent +newcontent
+lines +lines
EOF EOF
'
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
diff --git a/file b/file diff --git a/file b/file
index b5dd6c9..f910ae9 100644 index b5dd6c9..f910ae9 100644
@ -132,13 +156,15 @@ index b5dd6c9..f910ae9 100644
+more +more
lines lines
EOF EOF
test_expect_success 'real edit works' ' '
test_expect_success PERL 'real edit works' '
(echo e; echo n; echo d) | git add -p && (echo e; echo n; echo d) | git add -p &&
git diff >output && git diff >output &&
test_cmp expected 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 && git reset &&
echo file >.gitignore && echo file >.gitignore &&
echo changed >file && echo changed >file &&
@ -152,14 +178,7 @@ test_expect_success 'skip files similarly as commit -a' '
' '
rm -f .gitignore rm -f .gitignore
if test "$(git config --bool core.filemode)" = false test_expect_success PERL,FILEMODE 'patch does not affect mode' '
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' '
git reset --hard && git reset --hard &&
echo content >>file && echo content >>file &&
chmod +x file && chmod +x file &&
@ -168,7 +187,7 @@ test_expect_success FILEMODE 'patch does not affect mode' '
git diff file | grep "new 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 && git reset --hard &&
echo content >>file && echo content >>file &&
chmod +x 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 && git reset --hard &&
echo content >>file && echo content >>file &&
chmod +x 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 # end of tests disabled when filemode is not usable
test_expect_success 'setup again' ' test_expect_success PERL 'setup again' '
git reset --hard && git reset --hard &&
test_chmod +x file && test_chmod +x file &&
echo content >>file echo content >>file
' '
# Write the patch file with a new line at the top and bottom # Write the patch file with a new line at the top and bottom
test_expect_success PERL 'setup patch' '
cat >patch <<EOF cat >patch <<EOF
index 180b47c..b6f2c08 100644 index 180b47c..b6f2c08 100644
--- a/file --- a/file
@ -207,7 +227,10 @@ index 180b47c..b6f2c08 100644
content content
+lastline +lastline
EOF EOF
'
# Expected output, similar to the patch but w/ diff at the top # Expected output, similar to the patch but w/ diff at the top
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
diff --git a/file b/file diff --git a/file b/file
index b6f2c08..61b9053 100755 index b6f2c08..61b9053 100755
@ -219,8 +242,10 @@ index b6f2c08..61b9053 100755
content content
+lastline +lastline
EOF EOF
'
# Test splitting the first patch, then adding both # 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 commit -am "clear local changes" &&
git apply patch && git apply patch &&
(echo s; echo y; echo y) | git add -p file && (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_cmp expected diff
' '
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
diff --git a/non-empty b/non-empty diff --git a/non-empty b/non-empty
deleted file mode 100644 deleted file mode 100644
@ -237,7 +263,9 @@ index d95f3ad..0000000
@@ -1 +0,0 @@ @@ -1 +0,0 @@
-content -content
EOF EOF
test_expect_success 'deleting a non-empty file' ' '
test_expect_success PERL 'deleting a non-empty file' '
git reset --hard && git reset --hard &&
echo content >non-empty && echo content >non-empty &&
git add non-empty && git add non-empty &&
@ -248,13 +276,15 @@ test_expect_success 'deleting a non-empty file' '
test_cmp expected diff test_cmp expected diff
' '
test_expect_success PERL 'setup expected' '
cat >expected <<EOF cat >expected <<EOF
diff --git a/empty b/empty diff --git a/empty b/empty
deleted file mode 100644 deleted file mode 100644
index e69de29..0000000 index e69de29..0000000
EOF EOF
'
test_expect_success 'deleting an empty file' ' test_expect_success PERL 'deleting an empty file' '
git reset --hard && git reset --hard &&
> empty && > empty &&
git add empty && git add empty &&

View File

@ -15,11 +15,13 @@ LF='
DQ='"' DQ='"'
echo foo 2>/dev/null > "Name and an${HT}HT" echo foo 2>/dev/null > "Name and an${HT}HT"
test -f "Name and an${HT}HT" || { if ! test -f "Name and an${HT}HT"
# since FAT/NTFS does not allow tabs in filenames, skip this test then
skip_all='Your filesystem does not allow tabs in filenames, test skipped.' # FAT/NTFS does not allow tabs in filenames
test_done say 'Your filesystem does not allow tabs in filenames'
} else
test_set_prereq TABS_IN_FILENAMES
fi
for_each_name () { for_each_name () {
for name in \ for name in \
@ -31,7 +33,7 @@ for_each_name () {
done done
} }
test_expect_success setup ' test_expect_success TABS_IN_FILENAMES 'setup' '
mkdir "$FN" && mkdir "$FN" &&
for_each_name "echo initial >\"\$name\"" 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 cat >expect.quoted <<\EOF
Name Name
"Name and a\nLF" "Name and a\nLF"
@ -72,75 +75,76 @@ With SP in it
濱野/file 濱野/file
濱野純 濱野純
EOF 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 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 && git diff --name-only >current &&
test_cmp expect.quoted 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 && git diff --name-only HEAD >current &&
test_cmp expect.quoted 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 && git diff --name-only HEAD^ HEAD >current &&
test_cmp expect.quoted 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 && git ls-tree --name-only -r HEAD >current &&
test_cmp expect.quoted 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 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 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 && git diff --name-only >current &&
test_cmp expect.raw 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 && git diff --name-only HEAD >current &&
test_cmp expect.raw 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 && git diff --name-only HEAD^ HEAD >current &&
test_cmp expect.raw 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 && git ls-tree --name-only -r HEAD >current &&
test_cmp expect.raw current test_cmp expect.raw current

View File

@ -3,7 +3,7 @@
test_description='git checkout --patch' test_description='git checkout --patch'
. ./lib-patch-mode.sh . ./lib-patch-mode.sh
test_expect_success 'setup' ' test_expect_success PERL 'setup' '
mkdir dir && mkdir dir &&
echo parent > dir/foo && echo parent > dir/foo &&
echo dummy > bar && 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' # 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 set_state dir/foo work index
(echo n; echo n) | test_must_fail git stash save -p && (echo n; echo n) | test_must_fail git stash save -p &&
verify_state dir/foo work index && verify_state dir/foo work index &&
verify_saved_state bar 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 && (echo n; echo y) | git stash save -p &&
verify_state dir/foo head index && verify_state dir/foo head index &&
verify_saved_state bar && verify_saved_state bar &&
@ -36,7 +36,7 @@ test_expect_success 'git stash -p' '
verify_state bar dummy dummy 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 dir/foo work index &&
set_state bar bar_work bar_index && set_state bar bar_work bar_index &&
(echo n; echo y) | git stash save -p --no-keep-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 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 verify_saved_head
' '

View File

@ -12,13 +12,7 @@ by an edit for them.
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/diff-lib.sh . "$TEST_DIRECTORY"/diff-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS \
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success \
'prepare reference tree' \ 'prepare reference tree' \
'echo xyzzy | tr -d '\\\\'012 >yomin && 'echo xyzzy | tr -d '\\\\'012 >yomin &&
ln -s xyzzy frotz && ln -s xyzzy frotz &&
@ -26,7 +20,7 @@ test_expect_success \
tree=$(git write-tree) && tree=$(git write-tree) &&
echo $tree' echo $tree'
test_expect_success \ test_expect_success SYMLINKS \
'prepare work tree' \ 'prepare work tree' \
'mv frotz rezrov && 'mv frotz rezrov &&
rm -f yomin && rm -f yomin &&
@ -40,8 +34,9 @@ test_expect_success \
# rezrov and nitfol are rename/copy of frotz and bozbar should be # rezrov and nitfol are rename/copy of frotz and bozbar should be
# a new creation. # a new creation.
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current test_expect_success SYMLINKS 'setup diff output' "
cat >expected <<\EOF GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
cat >expected <<\EOF
diff --git a/bozbar b/bozbar diff --git a/bozbar b/bozbar
new file mode 120000 new file mode 120000
--- /dev/null --- /dev/null
@ -65,8 +60,9 @@ deleted file mode 100644
-xyzzy -xyzzy
\ No newline at end of file \ No newline at end of file
EOF EOF
"
test_expect_success \ test_expect_success SYMLINKS \
'validate diff output' \ 'validate diff output' \
'compare_diff_patch current expected' 'compare_diff_patch current expected'

View File

@ -9,12 +9,6 @@ test_description='Test diff of symlinks.
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/diff-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 cat > expected << EOF
diff --git a/frotz b/frotz diff --git a/frotz b/frotz
new file mode 120000 new file mode 120000
@ -26,7 +20,7 @@ index 0000000..7c465af
\ No newline at end of file \ No newline at end of file
EOF EOF
test_expect_success \ test_expect_success SYMLINKS \
'diff new symlink' \ 'diff new symlink' \
'ln -s xyzzy frotz && 'ln -s xyzzy frotz &&
git update-index && git update-index &&
@ -35,7 +29,7 @@ test_expect_success \
GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree > current && GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree > current &&
compare_diff_patch current expected' compare_diff_patch current expected'
test_expect_success \ test_expect_success SYMLINKS \
'diff unchanged symlink' \ 'diff unchanged symlink' \
'tree=$(git write-tree) && 'tree=$(git write-tree) &&
git update-index frotz && git update-index frotz &&
@ -52,7 +46,7 @@ index 7c465af..0000000
\ No newline at end of file \ No newline at end of file
EOF EOF
test_expect_success \ test_expect_success SYMLINKS \
'diff removed symlink' \ 'diff removed symlink' \
'mv frotz frotz2 && 'mv frotz frotz2 &&
git diff-index -M -p $tree > current && git diff-index -M -p $tree > current &&
@ -62,7 +56,7 @@ cat > expected << EOF
diff --git a/frotz b/frotz diff --git a/frotz b/frotz
EOF EOF
test_expect_success \ test_expect_success SYMLINKS \
'diff identical, but newly created symlink' \ 'diff identical, but newly created symlink' \
'ln -s xyzzy frotz && 'ln -s xyzzy frotz &&
git diff-index -M -p $tree > current && git diff-index -M -p $tree > current &&
@ -80,14 +74,14 @@ index 7c465af..df1db54 120000
\ No newline at end of file \ No newline at end of file
EOF EOF
test_expect_success \ test_expect_success SYMLINKS \
'diff different symlink' \ 'diff different symlink' \
'rm frotz && 'rm frotz &&
ln -s yxyyz frotz && ln -s yxyyz frotz &&
git diff-index -M -p $tree > current && git diff-index -M -p $tree > current &&
compare_diff_patch current expected' compare_diff_patch current expected'
test_expect_success \ test_expect_success SYMLINKS \
'diff symlinks with non-existing targets' \ 'diff symlinks with non-existing targets' \
'ln -s narf pinky && 'ln -s narf pinky &&
ln -s take\ over brain && ln -s take\ over brain &&

View File

@ -13,12 +13,14 @@ P1='pathname with HT'
P2='pathname with SP' P2='pathname with SP'
P3='pathname P3='pathname
with LF' with LF'
: 2>/dev/null >"$P1" && test -f "$P1" && rm -f "$P1" || { if : 2>/dev/null >"$P1" && test -f "$P1" && rm -f "$P1"
skip_all='Your filesystem does not allow tabs in filenames, test skipped.' then
test_done 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.0 >"$P0.0" &&
echo P0.1 >"$P0.1" && echo P0.1 >"$P0.1" &&
echo P0.2 >"$P0.2" && 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 cat >expect <<\EOF
rename pathname.1 => "Rpathname\twith HT.0" (100%) rename pathname.1 => "Rpathname\twith HT.0" (100%)
rename pathname.3 => "Rpathname\nwith LF.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.0 => Rpathname.0 (100%)
rename "pathname\twith HT.0" => Rpathname.1 (100%) rename "pathname\twith HT.0" => Rpathname.1 (100%)
EOF 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 && git diff --summary -M HEAD >actual &&
test_cmp expect actual test_cmp expect actual
' '
test_expect_success TABS_IN_FILENAMES 'setup expected files' '
cat >expect <<\EOF cat >expect <<\EOF
pathname.1 => "Rpathname\twith HT.0" | 0 pathname.1 => "Rpathname\twith HT.0" | 0
pathname.3 => "Rpathname\nwith LF.0" | 0 pathname.3 => "Rpathname\nwith LF.0" | 0
@ -62,7 +68,9 @@ cat >expect <<\EOF
"pathname\twith HT.0" => Rpathname.1 | 0 "pathname\twith HT.0" => Rpathname.1 | 0
7 files changed, 0 insertions(+), 0 deletions(-) 7 files changed, 0 insertions(+), 0 deletions(-)
EOF 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 && git diff --stat -M HEAD >actual &&
test_cmp expect actual test_cmp expect actual
' '

View File

@ -4,13 +4,7 @@ test_description='typechange rename detection'
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS setup '
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success setup '
rm -f foo bar && rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >foo && 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 && 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 && 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 && git diff-tree three four -r --name-status -B -M | sort >actual &&
{ {

View File

@ -7,6 +7,7 @@ test_description='git apply handling copy/rename patch.
' '
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
# setup # setup
@ -31,13 +32,6 @@ test_expect_success setup \
test_expect_success apply \ test_expect_success apply \
'git apply --index --stat --summary --apply test-patch' '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_expect_success FILEMODE validate \
'test -f bar && ls -l bar | grep "^-..x......"' 'test -f bar && ls -l bar | grep "^-..x......"'

View File

@ -9,13 +9,7 @@ test_description='git apply should not get confused with type changes.
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS 'setup repository and commits' '
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success 'setup repository and commits' '
echo "hello world" > foo && echo "hello world" > foo &&
echo "hi planet" > bar && echo "hi planet" > bar &&
git update-index --add foo 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 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 checkout -f initial &&
git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch && git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
git apply --index < patch git apply --index < patch
@ -56,7 +50,7 @@ test_expect_success 'file renamed from foo to foo/baz' '
test_debug 'cat patch' 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 checkout -f foo-baz-renamed-from-foo &&
git diff-tree -M -p HEAD initial > patch && git diff-tree -M -p HEAD initial > patch &&
git apply --index < patch git apply --index < patch
@ -64,7 +58,7 @@ test_expect_success 'file renamed from foo/baz to foo' '
test_debug 'cat patch' 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 checkout -f foo-becomes-a-directory &&
git diff-tree -p HEAD initial > patch && git diff-tree -p HEAD initial > patch &&
git apply --index < patch git apply --index < patch
@ -72,7 +66,7 @@ test_expect_success 'directory becomes file' '
test_debug 'cat patch' test_debug 'cat patch'
test_expect_success 'file becomes directory' ' test_expect_success SYMLINKS 'file becomes directory' '
git checkout -f initial && git checkout -f initial &&
git diff-tree -p HEAD foo-becomes-a-directory > patch && git diff-tree -p HEAD foo-becomes-a-directory > patch &&
git apply --index < patch git apply --index < patch
@ -80,7 +74,7 @@ test_expect_success 'file becomes directory' '
test_debug 'cat patch' test_debug 'cat patch'
test_expect_success 'file becomes symlink' ' test_expect_success SYMLINKS 'file becomes symlink' '
git checkout -f initial && git checkout -f initial &&
git diff-tree -p HEAD foo-symlinked-to-bar > patch && git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch git apply --index < patch
@ -88,21 +82,21 @@ test_expect_success 'file becomes symlink' '
test_debug 'cat patch' 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 checkout -f foo-symlinked-to-bar &&
git diff-tree -p HEAD foo-back-to-file > patch && git diff-tree -p HEAD foo-back-to-file > patch &&
git apply --index < patch git apply --index < patch
' '
test_debug 'cat 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 checkout -f foo-becomes-binary &&
git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch && git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch git apply --index < patch
' '
test_debug 'cat 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 checkout -f foo-symlinked-to-bar &&
git diff-tree -p --binary HEAD foo-becomes-binary > patch && git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
git apply --index < patch git apply --index < patch
@ -110,7 +104,7 @@ test_expect_success 'symlink becomes binary file' '
test_debug 'cat patch' 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 checkout -f foo-symlinked-to-bar &&
git diff-tree -p HEAD foo-becomes-a-directory > patch && git diff-tree -p HEAD foo-becomes-a-directory > patch &&
git apply --index < patch git apply --index < patch
@ -118,7 +112,7 @@ test_expect_success 'symlink becomes directory' '
test_debug 'cat patch' 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 checkout -f foo-becomes-a-directory &&
git diff-tree -p HEAD foo-symlinked-to-bar > patch && git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
git apply --index < patch git apply --index < patch

View File

@ -9,13 +9,7 @@ test_description='git apply symlinks and partial files
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS setup '
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success setup '
ln -s path1/path2/path3/path4/path5 link1 && ln -s path1/path2/path3/path4/path5 link1 &&
git add link? && 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 checkout side &&
git apply patch && 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 checkout -f side &&
git apply --index patch && git apply --index patch &&

View File

@ -3,12 +3,6 @@
test_description='apply to deeper directory without getting fooled with symlink' test_description='apply to deeper directory without getting fooled with symlink'
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
lecho () { lecho () {
for l_ for l_
do do
@ -16,7 +10,7 @@ lecho () {
done done
} }
test_expect_success setup ' test_expect_success SYMLINKS setup '
mkdir -p arch/i386/boot arch/x86_64 && mkdir -p arch/i386/boot arch/x86_64 &&
lecho 1 2 3 4 5 >arch/i386/boot/Makefile && 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 checkout test &&
git diff --exit-code 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 master &&
git diff --exit-code --cached master && git diff --exit-code --cached master &&

View File

@ -3,13 +3,7 @@
test_description='applying patch with mode bits' test_description='applying patch with mode bits'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
if test "$(git config --bool core.filemode)" = false
then
say 'filemode disabled on the filesystem'
else
test_set_prereq FILEMODE
fi
test_expect_success setup ' test_expect_success setup '
echo original >file && echo original >file &&

View File

@ -6,8 +6,11 @@ test_description='test automatic tag following'
case $(uname -s) in case $(uname -s) in
*MINGW*) *MINGW*)
skip_all="GIT_DEBUG_SEND_PACK not supported - skipping tests" say "GIT_DEBUG_SEND_PACK not supported - skipping tests"
test_done ;;
*)
test_set_prereq NOT_MINGW
;;
esac esac
# End state of the repository: # End state of the repository:
@ -19,7 +22,7 @@ esac
# \ C - origin/cat \ # \ C - origin/cat \
# origin/master master # origin/master master
test_expect_success setup ' test_expect_success NOT_MINGW setup '
test_tick && test_tick &&
echo ichi >file && echo ichi >file &&
git add file && git add file &&
@ -42,12 +45,15 @@ test_expect_success setup '
U=UPLOAD_LOG U=UPLOAD_LOG
test_expect_success NOT_MINGW 'setup expect' '
cat - <<EOF >expect cat - <<EOF >expect
#S #S
want $A want $A
#E #E
EOF EOF
test_expect_success 'fetch A (new commit : 1 connection)' ' '
test_expect_success NOT_MINGW 'fetch A (new commit : 1 connection)' '
rm -f $U rm -f $U
( (
cd cloned && cd cloned &&
@ -59,7 +65,7 @@ test_expect_success 'fetch A (new commit : 1 connection)' '
test_cmp expect actual 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 && git tag -a -m tag1 tag1 $A &&
T=$(git rev-parse --verify tag1) && 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 git checkout master
' '
test_expect_success NOT_MINGW 'setup expect' '
cat - <<EOF >expect cat - <<EOF >expect
#S #S
want $C want $C
want $T want $T
#E #E
EOF 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 rm -f $U
( (
cd cloned && cd cloned &&
@ -91,7 +100,7 @@ test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
test_cmp expect actual 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 && test_tick &&
echo O >file && echo O >file &&
git add 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) S=$(git rev-parse --verify tag2)
' '
test_expect_success NOT_MINGW 'setup expect' '
cat - <<EOF >expect cat - <<EOF >expect
#S #S
want $B want $B
want $S want $S
#E #E
EOF 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 rm -f $U
( (
cd cloned && cd cloned &&
@ -127,13 +139,16 @@ test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
test_cmp expect actual test_cmp expect actual
' '
test_expect_success NOT_MINGW 'setup expect' '
cat - <<EOF >expect cat - <<EOF >expect
#S #S
want $B want $B
want $S want $S
#E #E
EOF 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 git branch -D cat
rm -f $U rm -f $U
( (

View File

@ -4,12 +4,6 @@ test_description='pulling from symlinked subdir'
. ./test-lib.sh . ./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: # The scenario we are building:
# #
# trash\ directory/ # trash\ directory/
@ -20,7 +14,7 @@ fi
# #
# The working directory is subdir-link. # The working directory is subdir-link.
test_expect_success setup ' test_expect_success SYMLINKS setup '
mkdir subdir && mkdir subdir &&
echo file >subdir/file && echo file >subdir/file &&
git add subdir/file && git add subdir/file &&
@ -36,7 +30,7 @@ test_expect_success setup '
# Demonstrate that things work if we just avoid the symlink # 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 && echo real >subdir/file &&
git commit -m 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 # directory. A POSIX shell's "cd" works a little differently
# than chdir() in C; "cd -P" is much closer to chdir(). # 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 && echo link >subdir/file &&
git commit -m 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 # Prove that the remote end really is a repo, and other commands
# work fine in this context. It's just that "git pull" breaks. # 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/ && cd subdir-link/ &&
echo push >file && echo push >file &&

View File

@ -163,8 +163,6 @@ test_expect_success 'clone a void' '
test_expect_success 'clone respects global branch.autosetuprebase' ' test_expect_success 'clone respects global branch.autosetuprebase' '
( (
HOME=$(pwd) &&
export HOME &&
test_config="$HOME/.gitconfig" && test_config="$HOME/.gitconfig" &&
unset GIT_CONFIG_NOGLOBAL && unset GIT_CONFIG_NOGLOBAL &&
git config -f "$test_config" branch.autosetuprebase remote && git config -f "$test_config" branch.autosetuprebase remote &&

View File

@ -3,12 +3,14 @@
test_description='Test cloning a repository larger than 2 gigabyte' test_description='Test cloning a repository larger than 2 gigabyte'
. ./test-lib.sh . ./test-lib.sh
test -z "$GIT_TEST_CLONE_2GB" && if test -z "$GIT_TEST_CLONE_2GB"
skip_all="Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t" && then
test_done && say 'Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t'
exit 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.compression 0 &&
git config pack.depth 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 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 git clone file://. clone-wt

View File

@ -13,13 +13,11 @@ if sys.hexversion < 0x02040000:
sys.exit(1) sys.exit(1)
' '
then then
: # Requires Python 2.4 or newer
else test_set_prereq PYTHON_24
skip_all='skipping git remote-testgit tests: requires Python 2.4 or newer'
test_done
fi fi
test_expect_success 'setup repository' ' test_expect_success PYTHON_24 'setup repository' '
git init --bare server/.git && git init --bare server/.git &&
git clone server public && git clone server public &&
(cd public && (cd public &&
@ -29,34 +27,34 @@ test_expect_success 'setup repository' '
git push origin master) 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 && git clone "testgit::${PWD}/server" localclone &&
test_cmp public/file localclone/file 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 && git clone "testgit::file://${PWD}/server" clone &&
test_cmp public/file clone/file 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 && (cd public &&
echo content >>file && echo content >>file &&
git commit -a -m two && git commit -a -m two &&
git push) git push)
' '
test_expect_success 'pulling from local repo' ' test_expect_success PYTHON_24 'pulling from local repo' '
(cd localclone && git pull) && (cd localclone && git pull) &&
test_cmp public/file localclone/file 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) && (cd clone && git pull) &&
test_cmp public/file clone/file test_cmp public/file clone/file
' '
test_expect_success 'pushing to local repo' ' test_expect_success PYTHON_24 'pushing to local repo' '
(cd localclone && (cd localclone &&
echo content >>file && echo content >>file &&
git commit -a -m three && 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 $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 && (cd clone &&
git pull) git pull)
' '
test_expect_success 'pushing remote local repo' ' test_expect_success PYTHON_24 'pushing remote local repo' '
(cd clone && (cd clone &&
echo content >>file && echo content >>file &&
git commit -a -m four && git commit -a -m four &&

View File

@ -2,11 +2,7 @@
test_description='merge-recursive: handle file mode' test_description='merge-recursive: handle file mode'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
if ! test "$(git config --bool core.filemode)" = false
then
test_set_prereq FILEMODE
fi
test_expect_success 'mode change in one branch: keep changed version' ' test_expect_success 'mode change in one branch: keep changed version' '
: >file1 && : >file1 &&

View File

@ -3,13 +3,7 @@
test_description='merging when a directory was replaced with a symlink' test_description='merging when a directory was replaced with a symlink'
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq SYMLINKS test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
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' '
mkdir -p a/b/c a/b-2/c && mkdir -p a/b/c a/b-2/c &&
> a/b/c/d && > a/b/c/d &&
> a/b-2/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" 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 checkout HEAD^0 &&
git reset --hard master && git reset --hard master &&
git rm --cached a/b && 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 -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 checkout HEAD^0 &&
git reset --hard master && git reset --hard master &&
git checkout start^0 && git checkout start^0 &&
test -f a/b-2/c/d 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 && git reset --hard &&
test -f a/b-2/c/d && test -f a/b-2/c/d &&
echo x > a/x && echo x > a/x &&
@ -48,7 +42,7 @@ test_expect_success 'setup for merge test' '
git tag baseline 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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
git merge -s resolve master && 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 -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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
git merge -s recursive master && 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 -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 reset --hard &&
git checkout master^0 && git checkout master^0 &&
git merge -s resolve baseline^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 -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 reset --hard &&
git checkout master^0 && git checkout master^0 &&
git merge -s recursive baseline^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 -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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
>a/b/c/e && >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 -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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
>a/b/c/e && >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 -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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
echo more content >>a/b/c/d && echo more content >>a/b/c/d &&
test_must_fail git merge -s resolve master 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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
echo more content >>a/b/c/d && echo more content >>a/b/c/d &&
test_must_fail git merge -s recursive master 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 reset --hard &&
git checkout start^0 && git checkout start^0 &&
rm -rf a/b-2 && 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 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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
git merge -s resolve test2 && 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 -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 reset --hard &&
git checkout baseline^0 && git checkout baseline^0 &&
git merge -s recursive test2 && 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 -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 reset --hard &&
git checkout -b foo test2 && git checkout -b foo test2 &&
git merge -s recursive baseline^0 && git merge -s recursive baseline^0 &&

View File

@ -111,13 +111,13 @@ do
' '
done done
if ! echo 'echo space > "$1"' > "e space.sh" if echo 'echo space > "$1"' > "e space.sh"
then then
skip_all="Skipping; FS does not support spaces in filenames" # FS supports spaces in filenames
test_done test_set_prereq SPACES_IN_FILENAMES
fi fi
test_expect_success 'editor with a space' ' test_expect_success SPACES_IN_FILENAMES 'editor with a space' '
chmod a+x "e space.sh" && chmod a+x "e space.sh" &&
GIT_EDITOR="./e\ space.sh" git commit --amend && GIT_EDITOR="./e\ space.sh" git commit --amend &&
@ -126,7 +126,7 @@ test_expect_success 'editor with a space' '
' '
unset GIT_EDITOR 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 config core.editor \"./e\ space.sh\" &&
git commit --amend && git commit --amend &&

View File

@ -3,7 +3,7 @@
test_description='git reset --patch' test_description='git reset --patch'
. ./lib-patch-mode.sh . ./lib-patch-mode.sh
test_expect_success 'setup' ' test_expect_success PERL 'setup' '
mkdir dir && mkdir dir &&
echo parent > dir/foo && echo parent > dir/foo &&
echo dummy > bar && 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' # 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 set_and_save_state dir/foo work work
(echo n; echo n) | git reset -p && (echo n; echo n) | git reset -p &&
verify_saved_state dir/foo && verify_saved_state dir/foo &&
verify_saved_state bar verify_saved_state bar
' '
test_expect_success 'git reset -p' ' test_expect_success PERL 'git reset -p' '
(echo n; echo y) | git reset -p && (echo n; echo y) | git reset -p &&
verify_state dir/foo work head && verify_state dir/foo work head &&
verify_saved_state bar 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^ && (echo n; echo y) | git reset -p HEAD^ &&
verify_state dir/foo work parent && verify_state dir/foo work parent &&
verify_saved_state bar 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 # 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). # 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 set_state dir/foo work work
(echo y; echo n) | git reset -p dir && (echo y; echo n) | git reset -p dir &&
verify_state dir/foo work head && verify_state dir/foo work head &&
verify_saved_state bar 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 set_state dir/foo work work
(echo y; echo n) | (cd dir && git reset -p -- foo) && (echo y; echo n) | (cd dir && git reset -p -- foo) &&
verify_state dir/foo work head && verify_state dir/foo work head &&
verify_saved_state bar 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 && (echo y; echo n) | git reset -p HEAD^ -- dir &&
verify_state dir/foo work parent && verify_state dir/foo work parent &&
verify_saved_state bar verify_saved_state bar
' '
test_expect_success 'none of this moved HEAD' ' test_expect_success PERL 'none of this moved HEAD' '
verify_saved_head verify_saved_head
' '

View File

@ -388,16 +388,15 @@ test_expect_success 'core.excludesfile' '
' '
test_expect_success 'removal failure' ' test_expect_success SANITY 'removal failure' '
mkdir foo && mkdir foo &&
touch foo/bar && touch foo/bar &&
(exec <foo/bar && (exec <foo/bar &&
chmod 0 foo && 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' ' test_expect_success 'nested git work tree' '
rm -fr foo bar && rm -fr foo bar &&

View File

@ -793,7 +793,7 @@ test_expect_success 'commit --dry-run submodule summary (--amend)' '
test_cmp expect output 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 && chmod a-w .git &&
# make dir1/tracked stat-dirty # make dir1/tracked stat-dirty

View File

@ -10,11 +10,6 @@ Testing basic diff tool invocation
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq PERL; then
skip_all='skipping difftool tests, perl not available'
test_done
fi
LF=' LF='
' '
@ -50,7 +45,7 @@ prompt_given()
} }
# Create a file on master and change it on branch # Create a file on master and change it on branch
test_expect_success 'setup' ' test_expect_success PERL 'setup' '
echo master >file && echo master >file &&
git add file && git add file &&
git commit -m "added file" && git commit -m "added file" &&
@ -62,7 +57,7 @@ test_expect_success 'setup' '
' '
# Configure a custom difftool.<tool>.cmd and use it # Configure a custom difftool.<tool>.cmd and use it
test_expect_success 'custom commands' ' test_expect_success PERL 'custom commands' '
restore_test_defaults && restore_test_defaults &&
git config difftool.test-tool.cmd "cat \$REMOTE" && 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 # 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) diff=$(git difftool --no-prompt --tool=bad-tool branch)
test "$?" = 1 && test "$?" = 1 &&
test "$diff" = "" test "$diff" = ""
' '
test_expect_success 'difftool honors --gui' ' test_expect_success PERL 'difftool honors --gui' '
git config merge.tool bogus-tool && git config merge.tool bogus-tool &&
git config diff.tool bogus-tool && git config diff.tool bogus-tool &&
git config diff.guitool test-tool && git config diff.guitool test-tool &&
@ -92,7 +87,7 @@ test_expect_success 'difftool honors --gui' '
restore_test_defaults 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 && git config diff.tool test-tool &&
diff=$(git difftool --no-prompt --gui branch) && 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 # 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 config --unset diff.tool
GIT_DIFF_TOOL=test-tool && GIT_DIFF_TOOL=test-tool &&
export GIT_DIFF_TOOL && export GIT_DIFF_TOOL &&
@ -115,7 +110,7 @@ test_expect_success 'GIT_DIFF_TOOL variable' '
# Test the $GIT_*_TOOL variables and ensure # Test the $GIT_*_TOOL variables and ensure
# that $GIT_DIFF_TOOL always wins unless --tool is specified # 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 diff.tool bogus-tool &&
git config merge.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 # Test that we don't have to pass --no-prompt to difftool
# when $GIT_DIFFTOOL_NO_PROMPT is true # 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 && GIT_DIFFTOOL_NO_PROMPT=true &&
export GIT_DIFFTOOL_NO_PROMPT && export GIT_DIFFTOOL_NO_PROMPT &&
@ -148,7 +143,7 @@ test_expect_success 'GIT_DIFFTOOL_NO_PROMPT variable' '
# git-difftool supports the difftool.prompt variable. # git-difftool supports the difftool.prompt variable.
# Test that GIT_DIFFTOOL_PROMPT can override difftool.prompt = false # 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 config difftool.prompt false &&
GIT_DIFFTOOL_PROMPT=true && GIT_DIFFTOOL_PROMPT=true &&
export GIT_DIFFTOOL_PROMPT && 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 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 && git config difftool.prompt false &&
diff=$(git difftool branch) && 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 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 --unset difftool.prompt
git config mergetool.prompt false && 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 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 && git config difftool.prompt true &&
diff=$(git difftool -y branch) && 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 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 && git config difftool.prompt false &&
prompt=$(echo | git difftool --prompt branch | tail -1) && 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 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) && diff=$(git difftool --prompt --no-prompt branch) &&
test "$diff" = "branch" && test "$diff" = "branch" &&
@ -215,7 +210,7 @@ test_expect_success 'difftool last flag wins' '
# git-difftool falls back to git-mergetool config variables # git-difftool falls back to git-mergetool config variables
# so test that behavior here # so test that behavior here
test_expect_success 'difftool + mergetool config variables' ' test_expect_success PERL 'difftool + mergetool config variables' '
remove_config_vars remove_config_vars
git config merge.tool test-tool && git config merge.tool test-tool &&
git config mergetool.test-tool.cmd "cat \$LOCAL" && git config mergetool.test-tool.cmd "cat \$LOCAL" &&
@ -233,7 +228,7 @@ test_expect_success 'difftool + mergetool config variables' '
restore_test_defaults restore_test_defaults
' '
test_expect_success 'difftool.<tool>.path' ' test_expect_success PERL 'difftool.<tool>.path' '
git config difftool.tkdiff.path echo && git config difftool.tkdiff.path echo &&
diff=$(git difftool --tool=tkdiff --no-prompt branch) && diff=$(git difftool --tool=tkdiff --no-prompt branch) &&
git config --unset difftool.tkdiff.path && git config --unset difftool.tkdiff.path &&
@ -243,32 +238,32 @@ test_expect_success 'difftool.<tool>.path' '
restore_test_defaults restore_test_defaults
' '
test_expect_success 'difftool --extcmd=cat' ' test_expect_success PERL 'difftool --extcmd=cat' '
diff=$(git difftool --no-prompt --extcmd=cat branch) && diff=$(git difftool --no-prompt --extcmd=cat branch) &&
test "$diff" = branch"$LF"master 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) && diff=$(git difftool --no-prompt --extcmd cat branch) &&
test "$diff" = branch"$LF"master 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) && diff=$(git difftool --no-prompt -x cat branch) &&
test "$diff" = branch"$LF"master 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) diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"echo\ \$1\" branch)
test "$diff" = file 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) diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$1\" branch)
test "$diff" = master 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) diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$2\" branch)
test "$diff" = branch test "$diff" = branch
' '

View File

@ -3,20 +3,17 @@
test_description='git send-email' test_description='git send-email'
. ./test-lib.sh . ./test-lib.sh
if ! test_have_prereq PERL; then # May be altered later in the test
skip_all='skipping git send-email tests, perl not available' PREREQ="PERL"
test_done
fi
PROG='git send-email' test_expect_success $PREREQ \
test_expect_success \
'prepare reference tree' \ 'prepare reference tree' \
'echo "1A quick brown fox jumps over the" >file && 'echo "1A quick brown fox jumps over the" >file &&
echo "lazy dog" >>file && echo "lazy dog" >>file &&
git add file && git add file &&
GIT_AUTHOR_NAME="A" git commit -a -m "Initial."' GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
test_expect_success \ test_expect_success $PREREQ \
'Setup helper tool' \ 'Setup helper tool' \
'(echo "#!$SHELL_PATH" '(echo "#!$SHELL_PATH"
echo shift echo shift
@ -36,7 +33,7 @@ clean_fake_sendmail() {
rm -f commandline* msgtxt* 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` 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 # Exit immediately to prevent hang if a no-confirm test fails
check_no_confirm () { check_no_confirm () {
test -f no_confirm_okay || { if ! test -f no_confirm_okay
skip_all='confirm test failed; skipping remaining tests to prevent hanging' then
test_done 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_expect_success $PREREQ 'No confirm with --suppress-cc' '
test_no_confirm --suppress-cc=sob 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 # leave sendemail.confirm set to never after this so that none of the
# remaining tests prompt unintentionally. # 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 && 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 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 cat >expected <<\EOF
!nobody@example.com! !nobody@example.com!
!author@example.com! !author@example.com!
!one@example.com! !one@example.com!
!two@example.com! !two@example.com!
EOF EOF
test_expect_success \ '
test_expect_success $PREREQ \
'Verify commandline' \ 'Verify commandline' \
'test_cmp expected commandline1' 'test_cmp expected commandline1'
test_expect_success 'Send patches with --envelope-sender' ' test_expect_success $PREREQ 'Send patches with --envelope-sender' '
clean_fake_sendmail && 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 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 cat >expected <<\EOF
!patch@example.com! !patch@example.com!
!-i! !-i!
@ -108,15 +112,18 @@ cat >expected <<\EOF
!one@example.com! !one@example.com!
!two@example.com! !two@example.com!
EOF EOF
test_expect_success \ '
test_expect_success $PREREQ \
'Verify commandline' \ 'Verify commandline' \
'test_cmp expected commandline1' '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 && 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 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 cat >expected <<\EOF
!nobody@example.com! !nobody@example.com!
!-i! !-i!
@ -125,10 +132,13 @@ cat >expected <<\EOF
!one@example.com! !one@example.com!
!two@example.com! !two@example.com!
EOF EOF
test_expect_success \ '
test_expect_success $PREREQ \
'Verify commandline' \ 'Verify commandline' \
'test_cmp expected commandline1' 'test_cmp expected commandline1'
test_expect_success $PREREQ 'setup expect' "
cat >expected-show-all-headers <<\EOF cat >expected-show-all-headers <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success 'Show all headers' ' test_expect_success $PREREQ 'Show all headers' '
git send-email \ git send-email \
--dry-run \ --dry-run \
--suppress-cc=sob \ --suppress-cc=sob \
@ -177,7 +188,7 @@ test_expect_success 'Show all headers' '
test_cmp expected-show-all-headers actual-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 && clean_fake_sendmail &&
(echo "Example <from@example.com>" (echo "Example <from@example.com>"
echo "to@example.com" echo "to@example.com"
@ -190,7 +201,7 @@ test_expect_success 'Prompting works' '
grep "^To: to@example.com\$" msgtxt1 grep "^To: to@example.com\$" msgtxt1
' '
test_expect_success 'cccmd works' ' test_expect_success $PREREQ 'cccmd works' '
clean_fake_sendmail && clean_fake_sendmail &&
cp $patches cccmd.patch && cp $patches cccmd.patch &&
echo cccmd--cccmd@example.com >>cccmd.patch && echo cccmd--cccmd@example.com >>cccmd.patch &&
@ -209,10 +220,10 @@ test_expect_success 'cccmd works' '
grep "^ cccmd@example.com" msgtxt1 grep "^ cccmd@example.com" msgtxt1
' '
z8=zzzzzzzz test_expect_success $PREREQ 'reject long lines' '
z64=$z8$z8$z8$z8$z8$z8$z8$z8 z8=zzzzzzzz &&
z512=$z64$z64$z64$z64$z64$z64$z64$z64 z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
test_expect_success 'reject long lines' ' z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
clean_fake_sendmail && clean_fake_sendmail &&
cp $patches longline.patch && cp $patches longline.patch &&
echo $z512$z512 >>longline.patch && echo $z512$z512 >>longline.patch &&
@ -225,11 +236,11 @@ test_expect_success 'reject long lines' '
grep longline.patch errors grep longline.patch errors
' '
test_expect_success 'no patch was sent' ' test_expect_success $PREREQ 'no patch was sent' '
! test -e commandline1 ! test -e commandline1
' '
test_expect_success 'Author From: in message body' ' test_expect_success $PREREQ 'Author From: in message body' '
clean_fake_sendmail && clean_fake_sendmail &&
git send-email \ git send-email \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -240,7 +251,7 @@ test_expect_success 'Author From: in message body' '
grep "From: A <author@example.com>" msgbody1 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 && clean_fake_sendmail &&
git send-email \ git send-email \
--from="A <author@example.com>" \ --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 ! 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 \ git send-email \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
--to=nobody@example.com \ --to=nobody@example.com \
@ -261,7 +272,7 @@ test_expect_success 'allow long lines with --no-validate' '
2>errors 2>errors
' '
test_expect_success 'Invalid In-Reply-To' ' test_expect_success $PREREQ 'Invalid In-Reply-To' '
clean_fake_sendmail && clean_fake_sendmail &&
git send-email \ git send-email \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -273,7 +284,7 @@ test_expect_success 'Invalid In-Reply-To' '
! grep "^In-Reply-To: < *>" msgtxt1 ! 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 && clean_fake_sendmail &&
(echo "From Example <from@example.com>" (echo "From Example <from@example.com>"
echo "To Example <to@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 ! grep "^In-Reply-To: < *>" msgtxt1
' '
test_expect_success 'setup fake editor' ' test_expect_success $PREREQ 'setup fake editor' '
(echo "#!$SHELL_PATH" && (echo "#!$SHELL_PATH" &&
echo "echo fake edit >>\"\$1\"" echo "echo fake edit >>\"\$1\""
) >fake-editor && ) >fake-editor &&
@ -293,7 +304,7 @@ test_expect_success 'setup fake editor' '
test_set_editor "$(pwd)/fake-editor" test_set_editor "$(pwd)/fake-editor"
test_expect_success '--compose works' ' test_expect_success $PREREQ '--compose works' '
clean_fake_sendmail && clean_fake_sendmail &&
git send-email \ git send-email \
--compose --subject foo \ --compose --subject foo \
@ -304,14 +315,15 @@ test_expect_success '--compose works' '
2>errors 2>errors
' '
test_expect_success 'first message is compose text' ' test_expect_success $PREREQ 'first message is compose text' '
grep "^fake edit" msgtxt1 grep "^fake edit" msgtxt1
' '
test_expect_success 'second message is patch' ' test_expect_success $PREREQ 'second message is patch' '
grep "Subject:.*Second" msgtxt2 grep "Subject:.*Second" msgtxt2
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-sob <<\EOF cat >expected-suppress-sob <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_suppression () { test_suppression () {
git send-email \ git send-email \
@ -354,11 +367,12 @@ test_suppression () {
test_cmp expected-suppress-$1${2+"-$2"} actual-suppress-$1${2+"-$2"} 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 && git config sendemail.cc cc@example.com &&
test_suppression sob test_suppression sob
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-sob <<\EOF cat >expected-suppress-sob <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success 'sendemail.cc unset' ' test_expect_success $PREREQ 'sendemail.cc unset' '
git config --unset sendemail.cc && git config --unset sendemail.cc &&
test_suppression sob test_suppression sob
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-cccmd <<\EOF cat >expected-suppress-cccmd <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success 'sendemail.cccmd' ' test_expect_success $PREREQ 'sendemail.cccmd' '
echo echo cc-cmd@example.com > cccmd && echo echo cc-cmd@example.com > cccmd &&
chmod +x cccmd && chmod +x cccmd &&
git config sendemail.cccmd ./cccmd && git config sendemail.cccmd ./cccmd &&
test_suppression cccmd test_suppression cccmd
' '
test_expect_success $PREREQ 'setup expect' '
cat >expected-suppress-all <<\EOF cat >expected-suppress-all <<\EOF
0001-Second.patch 0001-Second.patch
Dry-OK. Log says: Dry-OK. Log says:
@ -439,11 +457,13 @@ X-Mailer: X-MAILER-STRING
Result: OK Result: OK
EOF EOF
'
test_expect_success '--suppress-cc=all' ' test_expect_success $PREREQ '--suppress-cc=all' '
test_suppression all test_suppression all
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-body <<\EOF cat >expected-suppress-body <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success '--suppress-cc=body' ' test_expect_success $PREREQ '--suppress-cc=body' '
test_suppression body test_suppression body
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-body-cccmd <<\EOF cat >expected-suppress-body-cccmd <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF 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_suppression body cccmd
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-sob <<\EOF cat >expected-suppress-sob <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success '--suppress-cc=sob' ' test_expect_success $PREREQ '--suppress-cc=sob' '
git config --unset sendemail.cccmd git config --unset sendemail.cccmd
test_suppression sob test_suppression sob
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-bodycc <<\EOF cat >expected-suppress-bodycc <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success '--suppress-cc=bodycc' ' test_expect_success $PREREQ '--suppress-cc=bodycc' '
test_suppression bodycc test_suppression bodycc
' '
test_expect_success $PREREQ 'setup expect' "
cat >expected-suppress-cc <<\EOF cat >expected-suppress-cc <<\EOF
0001-Second.patch 0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (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 Result: OK
EOF EOF
"
test_expect_success '--suppress-cc=cc' ' test_expect_success $PREREQ '--suppress-cc=cc' '
test_suppression cc test_suppression cc
' '
@ -604,23 +633,23 @@ test_confirm () {
grep "Send this email" stdout grep "Send this email" stdout
} }
test_expect_success '--confirm=always' ' test_expect_success $PREREQ '--confirm=always' '
test_confirm --confirm=always --suppress-cc=all test_confirm --confirm=always --suppress-cc=all
' '
test_expect_success '--confirm=auto' ' test_expect_success $PREREQ '--confirm=auto' '
test_confirm --confirm=auto test_confirm --confirm=auto
' '
test_expect_success '--confirm=cc' ' test_expect_success $PREREQ '--confirm=cc' '
test_confirm --confirm=cc test_confirm --confirm=cc
' '
test_expect_success '--confirm=compose' ' test_expect_success $PREREQ '--confirm=compose' '
test_confirm --confirm=compose --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) && CONFIRM=$(git config --get sendemail.confirm) &&
git config --unset sendemail.confirm && git config --unset sendemail.confirm &&
test_confirm test_confirm
@ -629,7 +658,7 @@ test_expect_success 'confirm by default (due to cc)' '
test $ret = "0" 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) && CONFIRM=$(git config --get sendemail.confirm) &&
git config --unset sendemail.confirm && git config --unset sendemail.confirm &&
test_confirm --suppress-cc=all --compose test_confirm --suppress-cc=all --compose
@ -638,7 +667,7 @@ test_expect_success 'confirm by default (due to --compose)' '
test $ret = "0" 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) && CONFIRM=$(git config --get sendemail.confirm) &&
git config --unset sendemail.confirm && git config --unset sendemail.confirm &&
rm -fr outdir && rm -fr outdir &&
@ -654,7 +683,7 @@ test_expect_success 'confirm detects EOF (inform assumes y)' '
test $ret = "0" 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) && CONFIRM=$(git config --get sendemail.confirm) &&
git config sendemail.confirm auto && git config sendemail.confirm auto &&
GIT_SEND_EMAIL_NOTTY=1 && GIT_SEND_EMAIL_NOTTY=1 &&
@ -669,7 +698,7 @@ test_expect_success 'confirm detects EOF (auto causes failure)' '
test $ret = "0" test $ret = "0"
' '
test_expect_success 'confirm doesnt loop forever' ' test_expect_success $PREREQ 'confirm doesnt loop forever' '
CONFIRM=$(git config --get sendemail.confirm) && CONFIRM=$(git config --get sendemail.confirm) &&
git config sendemail.confirm auto && git config sendemail.confirm auto &&
GIT_SEND_EMAIL_NOTTY=1 && GIT_SEND_EMAIL_NOTTY=1 &&
@ -684,7 +713,7 @@ test_expect_success 'confirm doesnt loop forever' '
test $ret = "0" test $ret = "0"
' '
test_expect_success 'utf8 Cc is rfc2047 encoded' ' test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' '
clean_fake_sendmail && clean_fake_sendmail &&
rm -fr outdir && rm -fr outdir &&
git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" && 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>" 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 && clean_fake_sendmail &&
(echo "#!$SHELL_PATH" && (echo "#!$SHELL_PATH" &&
echo "echo utf8 body: àéìöú >>\"\$1\"" 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 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 && clean_fake_sendmail &&
(echo "#!$SHELL_PATH" && (echo "#!$SHELL_PATH" &&
echo "(echo MIME-Version: 1.0" 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 ! 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 && clean_fake_sendmail &&
GIT_EDITOR="\"$(pwd)/fake-editor\"" \ GIT_EDITOR="\"$(pwd)/fake-editor\"" \
git send-email \ 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 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 && echo master > master &&
git add master && git add master &&
git commit -m"add master" && git commit -m"add master" &&
@ -758,7 +787,7 @@ test_expect_success 'detects ambiguous reference/file conflict' '
grep disambiguate errors grep disambiguate errors
' '
test_expect_success 'feed two files' ' test_expect_success $PREREQ 'feed two files' '
rm -fr outdir && rm -fr outdir &&
git format-patch -2 -o outdir && git format-patch -2 -o outdir &&
git send-email \ 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 "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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --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>" 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -792,7 +821,7 @@ test_expect_success 'no in-reply-to and no threading' '
! grep "In-Reply-To: " stdout ! 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -803,7 +832,7 @@ test_expect_success 'threading but no chain-reply-to' '
grep "In-Reply-To: " stdout 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --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 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --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 ! 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --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 ! 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 config sendemail.chainreplyto false &&
git send-email \ git send-email \
--dry-run \ --dry-run \
@ -842,7 +871,7 @@ test_expect_success 'no warning with sendemail.chainreplyto = false' '
! grep "no-chain-reply-to" errors ! 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 config sendemail.chainreplyto true &&
git send-email \ git send-email \
--dry-run \ --dry-run \
@ -852,7 +881,7 @@ test_expect_success 'no warning with sendemail.chainreplyto = true' '
! grep "no-chain-reply-to" errors ! 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 config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
git send-email \ git send-email \
--dry-run \ --dry-run \
@ -861,7 +890,7 @@ test_expect_success 'sendemail.to works' '
grep "To: Somebody <somebody@ex.com>" stdout 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -872,7 +901,7 @@ test_expect_success '--no-to overrides sendemail.to' '
! grep "To: Somebody <somebody@ex.com>" stdout ! 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 config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
git send-email \ git send-email \
--dry-run \ --dry-run \
@ -882,7 +911,7 @@ test_expect_success 'sendemail.cc works' '
grep "Cc: Somebody <somebody@ex.com>" stdout 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -894,7 +923,7 @@ test_expect_success '--no-cc overrides sendemail.cc' '
! grep "Cc: Somebody <somebody@ex.com>" stdout ! 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 config --replace-all sendemail.bcc "Other <other@ex.com>" &&
git send-email \ git send-email \
--dry-run \ --dry-run \
@ -905,7 +934,7 @@ test_expect_success 'sendemail.bcc works' '
grep "RCPT TO:<other@ex.com>" stdout 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 \ git send-email \
--dry-run \ --dry-run \
--from="Example <nobody@example.com>" \ --from="Example <nobody@example.com>" \
@ -918,6 +947,7 @@ test_expect_success '--no-bcc overrides sendemail.bcc' '
! grep "RCPT TO:<other@ex.com>" stdout ! grep "RCPT TO:<other@ex.com>" stdout
' '
test_expect_success $PREREQ 'setup expect' '
cat >email-using-8bit <<EOF cat >email-using-8bit <<EOF
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001 From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
Message-Id: <bogus-message-id@example.com> Message-Id: <bogus-message-id@example.com>
@ -927,14 +957,17 @@ Subject: subject goes here
Dieser deutsche Text enthält einen Umlaut! Dieser deutsche Text enthält einen Umlaut!
EOF EOF
'
test_expect_success $PREREQ 'setup expect' '
cat >content-type-decl <<EOF cat >content-type-decl <<EOF
MIME-Version: 1.0 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: 8bit
EOF EOF
'
test_expect_success 'asks about and fixes 8bit encodings' ' test_expect_success $PREREQ 'asks about and fixes 8bit encodings' '
clean_fake_sendmail && clean_fake_sendmail &&
echo | echo |
git send-email --from=author@example.com --to=nobody@example.com \ 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_cmp actual content-type-decl
' '
test_expect_success 'sendemail.8bitEncoding works' ' test_expect_success $PREREQ 'sendemail.8bitEncoding works' '
clean_fake_sendmail && clean_fake_sendmail &&
git config sendemail.assume8bitEncoding UTF-8 && git config sendemail.assume8bitEncoding UTF-8 &&
echo bogus | echo bogus |
@ -958,7 +991,7 @@ test_expect_success 'sendemail.8bitEncoding works' '
test_cmp actual content-type-decl 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 && clean_fake_sendmail &&
git config sendemail.assume8bitEncoding "bogus too" && git config sendemail.assume8bitEncoding "bogus too" &&
echo bogus | echo bogus |
@ -970,6 +1003,7 @@ test_expect_success '--8bit-encoding overrides sendemail.8bitEncoding' '
test_cmp actual content-type-decl test_cmp actual content-type-decl
' '
test_expect_success $PREREQ 'setup expect' '
cat >email-using-8bit <<EOF cat >email-using-8bit <<EOF
From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001 From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
Message-Id: <bogus-message-id@example.com> Message-Id: <bogus-message-id@example.com>
@ -979,12 +1013,15 @@ Subject: Dieser Betreff enthält auch einen Umlaut!
Nothing to see here. Nothing to see here.
EOF EOF
'
test_expect_success $PREREQ 'setup expect' '
cat >expected <<EOF cat >expected <<EOF
Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?= Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=
EOF EOF
'
test_expect_success '--8bit-encoding also treats subject' ' test_expect_success $PREREQ '--8bit-encoding also treats subject' '
clean_fake_sendmail && clean_fake_sendmail &&
echo bogus | echo bogus |
git send-email --from=author@example.com --to=nobody@example.com \ git send-email --from=author@example.com --to=nobody@example.com \

View File

@ -95,8 +95,6 @@ test_expect_success 'fresh clone with svn.authors-file in config' '
( (
rm -r "$GIT_DIR" && rm -r "$GIT_DIR" &&
test x = x"$(git config svn.authorsfile)" && test x = x"$(git config svn.authorsfile)" &&
HOME="`pwd`" &&
export HOME &&
test_config="$HOME"/.gitconfig && test_config="$HOME"/.gitconfig &&
unset GIT_CONFIG_NOGLOBAL && unset GIT_CONFIG_NOGLOBAL &&
unset GIT_DIR && unset GIT_DIR &&

View File

@ -5,6 +5,7 @@
test_description='Test export of commits to CVS' test_description='Test export of commits to CVS'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
if ! test_have_prereq PERL; then if ! test_have_prereq PERL; then
skip_all='skipping git cvsexportcommit tests, perl not available' skip_all='skipping git cvsexportcommit tests, perl not available'
@ -229,11 +230,6 @@ test_expect_success \
test_must_fail git cvsexportcommit -c $id 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 \ test_expect_success FILEMODE \
'Retain execute bit' \ 'Retain execute bit' \
'mkdir G && 'mkdir G &&

View File

@ -3,17 +3,14 @@
test_description='git cvsimport basic tests' test_description='git cvsimport basic tests'
. ./lib-cvs.sh . ./lib-cvs.sh
if ! test_have_prereq PERL; then test_expect_success PERL 'setup cvsroot environment' '
skip_all='skipping git cvsimport tests, perl not available' CVSROOT=$(pwd)/cvsroot &&
test_done export CVSROOT
fi '
CVSROOT=$(pwd)/cvsroot test_expect_success PERL 'setup cvsroot' '$CVS init'
export CVSROOT
test_expect_success 'setup cvsroot' '$CVS init' test_expect_success PERL 'setup a cvs module' '
test_expect_success 'setup a cvs module' '
mkdir "$CVSROOT/module" && mkdir "$CVSROOT/module" &&
$CVS co -d module-cvs module && $CVS co -d module-cvs module &&
@ -45,23 +42,23 @@ EOF
cd .. 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 && git cvsimport -a -R -z 0 -C module-git module &&
test_cmp module-cvs/o_fortuna module-git/o_fortuna 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 && (cd module-git &&
git log --format="o_fortuna 1.1 %H" -1) > expected && git log --format="o_fortuna 1.1 %H" -1) > expected &&
test_cmp expected module-git/.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 && cd module-cvs &&
cat <<EOF >o_fortuna && cat <<EOF >o_fortuna &&
@ -90,7 +87,7 @@ EOF
cd .. cd ..
' '
test_expect_success 'update git module' ' test_expect_success PERL 'update git module' '
cd module-git && cd module-git &&
git cvsimport -a -R -z 0 module && 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 && (cd module-git &&
git log --format="o_fortuna 1.1 %H" -1 HEAD^ && 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_cmp expected module-git/.git/cvs-revisions
' '
test_expect_success 'update cvs module' ' test_expect_success PERL 'update cvs module' '
cd module-cvs && cd module-cvs &&
echo 1 >tick && 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 && cd module-git &&
git config cvsimport.module module && 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 && (cd module-git &&
git log --format="o_fortuna 1.1 %H" -1 HEAD^^ && 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_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 && $CVS co -d import-from-wt module &&
cd import-from-wt && 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 -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 test_done

View File

@ -34,50 +34,49 @@
test_description='git cvsimport handling of vendor branches' test_description='git cvsimport handling of vendor branches'
. ./lib-cvs.sh . ./lib-cvs.sh
CVSROOT="$TEST_DIRECTORY"/t9601/cvsroot setup_cvs_test_repository t9601
export CVSROOT
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 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_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_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_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_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_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 test_cmp_branch_file master imported-anonymously.txt

View File

@ -6,70 +6,69 @@
test_description='git cvsimport handling of branches and tags' test_description='git cvsimport handling of branches and tags'
. ./lib-cvs.sh . ./lib-cvs.sh
CVSROOT="$TEST_DIRECTORY"/t9602/cvsroot setup_cvs_test_repository t9602
export CVSROOT
test_expect_success 'import module' ' test_expect_success PERL 'import module' '
git cvsimport -C module-git 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_cmp_branch_tree master
' '
test_expect_success 'test branch vendorbranch' ' test_expect_success PERL 'test branch vendorbranch' '
test_cmp_branch_tree 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_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_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_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_cmp_branch_tree B_SPLIT
' '
test_expect_failure 'test tag vendortag' ' test_expect_failure PERL 'test tag vendortag' '
test_cmp_branch_tree 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_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_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 test_cmp_branch_tree T_MIXED

View File

@ -14,8 +14,7 @@
test_description='git cvsimport testing for correct patchset estimation' test_description='git cvsimport testing for correct patchset estimation'
. ./lib-cvs.sh . ./lib-cvs.sh
CVSROOT="$TEST_DIRECTORY"/t9603/cvsroot setup_cvs_test_repository t9603
export CVSROOT
test_expect_failure 'import with criss cross times on revisions' ' test_expect_failure 'import with criss cross times on revisions' '

View File

@ -331,12 +331,35 @@ test_set_prereq () {
satisfied=" " satisfied=" "
test_have_prereq () { test_have_prereq () {
case $satisfied in # prerequisites can be concatenated with ','
*" $1 "*) save_IFS=$IFS
: yes, have it ;; IFS=,
*) set -- $*
! : nope ;; IFS=$save_IFS
esac
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 # You are not expected to call test_ok_ and test_failure_ directly, use
@ -398,8 +421,14 @@ test_skip () {
fi fi
case "$to_skip" in case "$to_skip" in
t) t)
of_prereq=
if test "$missing_prereq" != "$prereq"
then
of_prereq=" of $prereq"
fi
say_color skip >&3 "skipping test: $@" 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 : true
;; ;;
*) *)
@ -657,28 +686,31 @@ test_when_finished () {
test_create_repo () { test_create_repo () {
test "$#" = 1 || test "$#" = 1 ||
error "bug in the test script: not 1 parameter to test-create-repo" error "bug in the test script: not 1 parameter to test-create-repo"
owd=`pwd`
repo="$1" repo="$1"
mkdir -p "$repo" mkdir -p "$repo"
cd "$repo" || error "Cannot setup test environment" (
"$GIT_EXEC_PATH/git-init" "--template=$TEST_DIRECTORY/../templates/blt/" >&3 2>&4 || cd "$repo" || error "Cannot setup test environment"
error "cannot run git init -- have you built things yet?" "$GIT_EXEC_PATH/git-init" "--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
mv .git/hooks .git/hooks-disabled error "cannot run git init -- have you built things yet?"
cd "$owd" mv .git/hooks .git/hooks-disabled
) || exit
} }
test_done () { test_done () {
GIT_EXIT_OK=t 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 if test -z "$HARNESS_ACTIVE"; then
echo "success $test_success" >> $test_results_path test_results_dir="$TEST_DIRECTORY/test-results"
echo "fixed $test_fixed" >> $test_results_path mkdir -p "$test_results_dir"
echo "broken $test_broken" >> $test_results_path test_results_path="$test_results_dir/${0%.sh}-$$.counts"
echo "failed $test_failure" >> $test_results_path
echo "" >> $test_results_path 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 if test "$test_fixed" != 0
then then
@ -720,7 +752,15 @@ test_done () {
# Test the binaries we have just built. The tests are kept in # Test the binaries we have just built. The tests are kept in
# t/ subdirectory and are run in 'trash directory' subdirectory. # 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" if test -n "$valgrind"
then then
make_symlink () { make_symlink () {
@ -747,7 +787,7 @@ then
test -x "$1" || return test -x "$1" || return
base=$(basename "$1") base=$(basename "$1")
symlink_target=$TEST_DIRECTORY/../$base symlink_target=$GIT_BUILD_DIR/$base
# do not override scripts # do not override scripts
if test -x "$symlink_target" && if test -x "$symlink_target" &&
test ! -d "$symlink_target" && test ! -d "$symlink_target" &&
@ -766,7 +806,7 @@ then
# override all git executables in TEST_DIRECTORY/.. # override all git executables in TEST_DIRECTORY/..
GIT_VALGRIND=$TEST_DIRECTORY/valgrind GIT_VALGRIND=$TEST_DIRECTORY/valgrind
mkdir -p "$GIT_VALGRIND"/bin 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 do
make_valgrind_symlink $file make_valgrind_symlink $file
done done
@ -787,10 +827,10 @@ then
elif test -n "$GIT_TEST_INSTALLED" ; then elif test -n "$GIT_TEST_INSTALLED" ; then
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) || GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||
error "Cannot run git from $GIT_TEST_INSTALLED." 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} GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH}
else # normal case, use ../bin-wrappers only unless $with_dashes: 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 -x "$git_bin_dir/git" ; then
if test -z "$with_dashes" ; then if test -z "$with_dashes" ; then
say "$git_bin_dir/git is not executable; using GIT_EXEC_PATH" 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 with_dashes=t
fi fi
PATH="$git_bin_dir:$PATH" PATH="$git_bin_dir:$PATH"
GIT_EXEC_PATH=$TEST_DIRECTORY/.. GIT_EXEC_PATH=$GIT_BUILD_DIR
if test -n "$with_dashes" ; then if test -n "$with_dashes" ; then
PATH="$TEST_DIRECTORY/..:$PATH" PATH="$GIT_BUILD_DIR:$PATH"
fi fi
fi fi
GIT_TEMPLATE_DIR=$(pwd)/../templates/blt GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt
unset GIT_CONFIG unset GIT_CONFIG
GIT_CONFIG_NOSYSTEM=1 GIT_CONFIG_NOSYSTEM=1
GIT_CONFIG_NOGLOBAL=1 GIT_CONFIG_NOGLOBAL=1
export PATH GIT_EXEC_PATH GIT_TEMPLATE_DIR GIT_CONFIG_NOSYSTEM GIT_CONFIG_NOGLOBAL 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" if test -z "$GIT_TEST_CMP"
then then
@ -821,22 +861,22 @@ then
fi fi
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 export GITPERLLIB
test -d ../templates/blt || { test -d "$GIT_BUILD_DIR"/templates/blt || {
error "You haven't built things yet, have you?" error "You haven't built things yet, have you?"
} }
if test -z "$GIT_TEST_INSTALLED" && test -z "$NO_PYTHON" if test -z "$GIT_TEST_INSTALLED" && test -z "$NO_PYTHON"
then then
GITPYTHONLIB="$(pwd)/../git_remote_helpers/build/lib" GITPYTHONLIB="$GIT_BUILD_DIR/git_remote_helpers/build/lib"
export GITPYTHONLIB 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?" error "You haven't built git_remote_helpers yet, have you?"
} }
fi 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 'You need to build test-chmtime:'
echo >&2 'Run "make test-chmtime" in the source (toplevel) directory' echo >&2 'Run "make test-chmtime" in the source (toplevel) directory'
exit 1 exit 1
@ -861,6 +901,9 @@ test_create_repo "$test"
# in subprocesses like git equals our $PWD (for pathname comparisons). # in subprocesses like git equals our $PWD (for pathname comparisons).
cd -P "$test" || exit 1 cd -P "$test" || exit 1
HOME=$(pwd)
export HOME
this_test=${0##*/} this_test=${0##*/}
this_test=${this_test%%-*} this_test=${this_test%%-*}
for skp in $GIT_SKIP_TESTS 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 # test whether the filesystem supports symbolic links
ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS
rm -f y 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