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]
*.py[co]
.depend/
*.gcda
*.gcno
*.gcov
/coverage-untested-functions
/cover_db/
/cover_db_html/
*+
/config.mak
/autom4te.cache

View File

@ -310,6 +310,7 @@ TCL_PATH = tclsh
TCLTK_PATH = wish
PTHREAD_LIBS = -lpthread
PTHREAD_CFLAGS =
GCOV = gcov
export TCL_PATH TCLTK_PATH
@ -1499,6 +1500,7 @@ ifndef V
QUIET_BUILT_IN = @echo ' ' BUILTIN $@;
QUIET_GEN = @echo ' ' GEN $@;
QUIET_LNCP = @echo ' ' LN/CP $@;
QUIET_GCOV = @echo ' ' GCOV $@;
QUIET_SUBDIR0 = +@subdir=
QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
$(MAKE) $(PRINT_DIR) -C $$subdir
@ -2324,11 +2326,18 @@ coverage:
$(MAKE) coverage-build
$(MAKE) coverage-report
object_dirs := $(sort $(dir $(OBJECTS)))
coverage-clean:
rm -f *.gcda *.gcno
$(RM) $(addsuffix *.gcov,$(object_dirs))
$(RM) $(addsuffix *.gcda,$(object_dirs))
$(RM) $(addsuffix *.gcno,$(object_dirs))
$(RM) coverage-untested-functions
$(RM) -r cover_db/
$(RM) -r cover_db_html/
COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov
GCOVFLAGS = --preserve-paths --branch-probabilities --all-blocks
coverage-build: coverage-clean
$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all
@ -2336,7 +2345,17 @@ coverage-build: coverage-clean
-j1 test
coverage-report:
gcov -b *.c
$(QUIET_GCOV)for dir in $(object_dirs); do \
$(GCOV) $(GCOVFLAGS) --object-directory=$$dir $$dir*.c || exit; \
done
coverage-untested-functions: coverage-report
grep '^function.*called 0 ' *.c.gcov \
| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
| tee coverage-untested-functions
> coverage-untested-functions
cover_db: coverage-report
gcov2perl -db cover_db *.gcov
cover_db_html: cover_db
cover -report html -outputdir cover_db_html cover_db

View File

@ -8,6 +8,7 @@
#GIT_TEST_OPTS=--verbose --debug
SHELL_PATH ?= $(SHELL)
PERL_PATH ?= /usr/bin/perl
TAR ?= $(TAR)
RM ?= rm -f
@ -28,7 +29,6 @@ pre-clean:
clean:
$(RM) -r 'trash directory'.* test-results
$(RM) t????/cvsroot/CVSROOT/?*
$(RM) -r valgrind/bin
$(RM) .prove
@ -49,4 +49,42 @@ full-svn-test:
valgrind:
GIT_TEST_OPTS=--valgrind $(MAKE)
.PHONY: pre-clean $(T) aggregate-results clean valgrind
# Smoke testing targets
-include ../GIT-VERSION-FILE
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo unknown')
uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo unknown')
test-results:
mkdir -p test-results
test-results/git-smoke.tar.gz: test-results
$(PERL_PATH) ./harness \
--archive="test-results/git-smoke.tar.gz" \
$(T)
smoke: test-results/git-smoke.tar.gz
SMOKE_UPLOAD_FLAGS =
ifdef SMOKE_USERNAME
SMOKE_UPLOAD_FLAGS += -F username="$(SMOKE_USERNAME)" -F password="$(SMOKE_PASSWORD)"
endif
ifdef SMOKE_COMMENT
SMOKE_UPLOAD_FLAGS += -F comments="$(SMOKE_COMMENT)"
endif
ifdef SMOKE_TAGS
SMOKE_UPLOAD_FLAGS += -F tags="$(SMOKE_TAGS)"
endif
smoke_report: smoke
curl \
-H "Expect: " \
-F project=Git \
-F architecture="$(uname_M)" \
-F platform="$(uname_S)" \
-F revision="$(GIT_VERSION)" \
-F report_file=@test-results/git-smoke.tar.gz \
$(SMOKE_UPLOAD_FLAGS) \
http://smoke.git.nix.is/app/projects/process_add_report/1 \
| grep -v ^Redirecting
.PHONY: pre-clean $(T) aggregate-results clean valgrind smoke smoke_report

201
t/README
View File

@ -268,6 +268,18 @@ Do:
git push gh &&
test ...
- Check the test coverage for your tests. See the "Test coverage"
below.
Don't blindly follow test coverage metrics, they're a good way to
spot if you've missed something. If a new function you added
doesn't have any coverage you're probably doing something wrong,
but having 100% coverage doesn't necessarily mean that you tested
everything.
Tests that are likely to smoke out future regressions are better
than tests that just inflate the coverage metrics.
Don't:
- exit() within a <script> part.
@ -307,9 +319,21 @@ Keep in mind:
Skipping tests
--------------
If you need to skip all the remaining tests you should set skip_all
and immediately call test_done. The string you give to skip_all will
be used as an explanation for why the test was skipped. for instance:
If you need to skip tests you should do so be using the three-arg form
of the test_* functions (see the "Test harness library" section
below), e.g.:
test_expect_success PERL 'I need Perl' "
'$PERL_PATH' -e 'hlagh() if unf_unf()'
"
The advantage of skipping tests like this is that platforms that don't
have the PERL and other optional dependencies get an indication of how
many tests they're missing.
If the test code is too hairy for that (i.e. does a lot of setup work
outside test assertions) you can also skip all remaining tests by
setting skip_all and immediately call test_done:
if ! test_have_prereq PERL
then
@ -317,6 +341,9 @@ be used as an explanation for why the test was skipped. for instance:
test_done
fi
The string you give to skip_all will be used as an explanation for why
the test was skipped.
End with test_done
------------------
@ -350,6 +377,12 @@ library for your script to use.
test_expect_success TTY 'git --paginate rev-list uses a pager' \
' ... '
You can also supply a comma-separated list of prerequisites, in the
rare case where your test depends on more than one:
test_expect_success PERL,PYTHON 'yo dawg' \
' test $(perl -E 'print eval "1 +" . qx[python -c "print 2"]') == "4" '
- test_expect_failure [<prereq>] <message> <script>
This is NOT the opposite of test_expect_success, but is used
@ -404,11 +437,12 @@ library for your script to use.
- test_set_prereq SOME_PREREQ
Set a test prerequisite to be used later with test_have_prereq. The
test-lib will set some prerequisites for you, e.g. PERL and PYTHON
which are derived from ./GIT-BUILD-OPTIONS (grep test_set_prereq
test-lib.sh for more). Others you can set yourself and use later
with either test_have_prereq directly, or the three argument
invocation of test_expect_success and test_expect_failure.
test-lib will set some prerequisites for you, see the
"Prerequisites" section below for a full list of these.
Others you can set yourself and use later with either
test_have_prereq directly, or the three argument invocation of
test_expect_success and test_expect_failure.
- test_have_prereq SOME PREREQ
@ -488,6 +522,45 @@ library for your script to use.
...
'
Prerequisites
-------------
These are the prerequisites that the test library predefines with
test_have_prereq.
See the prereq argument to the test_* functions in the "Test harness
library" section above and the "test_have_prereq" function for how to
use these, and "test_set_prereq" for how to define your own.
- PERL & PYTHON
Git wasn't compiled with NO_PERL=YesPlease or
NO_PYTHON=YesPlease. Wrap any tests that need Perl or Python in
these.
- POSIXPERM
The filesystem supports POSIX style permission bits.
- BSLASHPSPEC
Backslashes in pathspec are not directory separators. This is not
set on Windows. See 6fd1106a for details.
- EXECKEEPSPID
The process retains the same pid across exec(2). See fb9a2bea for
details.
- SYMLINKS
The filesystem we're on supports symbolic links. E.g. a FAT
filesystem doesn't support these. See 704a3143 for details.
- SANITY
Test is not run by root user, and an attempt to write to an
unwritable file is expected to fail correctly.
Tips for Writing Tests
----------------------
@ -515,3 +588,115 @@ the purpose of t0000-basic.sh, which is to isolate that level of
validation in one place. Your test also ends up needing
updating when such a change to the internal happens, so do _not_
do it and leave the low level of validation to t0000-basic.sh.
Test coverage
-------------
You can use the coverage tests to find code paths that are not being
used or properly exercised yet.
To do that, run the coverage target at the top-level (not in the t/
directory):
make coverage
That'll compile Git with GCC's coverage arguments, and generate a test
report with gcov after the tests finish. Running the coverage tests
can take a while, since running the tests in parallel is incompatible
with GCC's coverage mode.
After the tests have run you can generate a list of untested
functions:
make coverage-untested-functions
You can also generate a detailed per-file HTML report using the
Devel::Cover module. To install it do:
# On Debian or Ubuntu:
sudo aptitude install libdevel-cover-perl
# From the CPAN with cpanminus
curl -L http://cpanmin.us | perl - --sudo --self-upgrade
cpanm --sudo Devel::Cover
Then, at the top-level:
make cover_db_html
That'll generate a detailed cover report in the "cover_db_html"
directory, which you can then copy to a webserver, or inspect locally
in a browser.
Smoke testing
-------------
The Git test suite has support for smoke testing. Smoke testing is
when you submit the results of a test run to a central server for
analysis and aggregation.
Running a smoke tester is an easy and valuable way of contributing to
Git development, particularly if you have access to an uncommon OS on
obscure hardware.
After building Git you can generate a smoke report like this in the
"t" directory:
make clean smoke
You can also pass arguments via the environment. This should make it
faster:
GIT_TEST_OPTS='--root=/dev/shm' TEST_JOBS=10 make clean smoke
The "smoke" target will run the Git test suite with Perl's
"TAP::Harness" module, and package up the results in a .tar.gz archive
with "TAP::Harness::Archive". The former is included with Perl v5.10.1
or later, but you'll need to install the latter from the CPAN. See the
"Test coverage" section above for how you might do that.
Once the "smoke" target finishes you'll see a message like this:
TAP Archive created at <path to git>/t/test-results/git-smoke.tar.gz
To upload the smoke report you need to have curl(1) installed, then
do:
make smoke_report
To upload the report anonymously. Hopefully that'll return something
like "Reported #7 added.".
If you're going to be uploading reports frequently please request a
user account by E-Mailing gitsmoke@v.nix.is. Once you have a username
and password you'll be able to do:
SMOKE_USERNAME=<username> SMOKE_PASSWORD=<password> make smoke_report
You can also add an additional comment to attach to the report, and/or
a comma separated list of tags:
SMOKE_USERNAME=<username> SMOKE_PASSWORD=<password> \
SMOKE_COMMENT=<comment> SMOKE_TAGS=<tags> \
make smoke_report
Once the report is uploaded it'll be made available at
http://smoke.git.nix.is, here's an overview of Recent Smoke Reports
for Git:
http://smoke.git.nix.is/app/projects/smoke_reports/1
The reports will also be mirrored to GitHub every few hours:
http://github.com/gitsmoke/smoke-reports
The Smolder SQLite database is also mirrored and made available for
download:
http://github.com/gitsmoke/smoke-database
Note that the database includes hashed (with crypt()) user passwords
and E-Mail addresses. Don't use a valuable password for the smoke
service if you have an account, or an E-Mail address you don't want to
be publicly known. The user accounts are just meant to be convenient
labels, they're not meant to be secure.

21
t/harness Executable file
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
unset CVS_SERVER
# for clean cvsps cache
HOME=$(pwd)
export HOME
if ! type cvs >/dev/null 2>&1
then
@ -30,6 +27,12 @@ case "$cvsps_version" in
;;
esac
setup_cvs_test_repository () {
CVSROOT="$(pwd)/.cvsroot" &&
cp -r "$TEST_DIRECTORY/$1/cvsroot" "$CVSROOT" &&
export CVSROOT
}
test_cvs_co () {
# Usage: test_cvs_co BRANCH_NAME
rm -rf module-cvs-"$1"

View File

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

11
t/lib-prereq-FILEMODE.sh Normal file
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' '
false
'
test_expect_success 'pretend we have fixed a known breakage (run in sub test-lib)' "
mkdir passing-todo &&
(cd passing-todo &&
cat >passing-todo.sh <<EOF &&
#!$SHELL_PATH
test_description='A passing TODO test
This is run in a sub test-lib so that we do not get incorrect passing
metrics
'
# Point to the t/test-lib.sh, which isn't in ../ as usual
TEST_DIRECTORY=\"$TEST_DIRECTORY\"
. \"\$TEST_DIRECTORY\"/test-lib.sh
test_expect_failure 'pretend we have fixed a known breakage' '
:
'
test_done
EOF
chmod +x passing-todo.sh &&
./passing-todo.sh >out 2>err &&
! test -s err &&
cat >expect <<EOF &&
ok 1 - pretend we have fixed a known breakage # TODO known breakage
# fixed 1 known breakage(s)
# passed all 1 test(s)
1..1
EOF
test_cmp expect out)
"
test_set_prereq HAVEIT
haveit=no
test_expect_success HAVEIT 'test runs if prerequisite is satisfied' '
@ -73,6 +104,27 @@ then
exit 1
fi
test_set_prereq HAVETHIS
haveit=no
test_expect_success HAVETHIS,HAVEIT 'test runs if prerequisites are satisfied' '
test_have_prereq HAVEIT &&
test_have_prereq HAVETHIS &&
haveit=yes
'
donthaveit=yes
test_expect_success HAVEIT,DONTHAVEIT 'unmet prerequisites causes test to be skipped' '
donthaveit=no
'
donthaveiteither=yes
test_expect_success DONTHAVEIT,HAVEIT 'unmet prerequisites causes test to be skipped' '
donthaveiteither=no
'
if test $haveit$donthaveit$donthaveiteither != yesyesyes
then
say "bug in test framework: multiple prerequisite tags do not work reliably"
exit 1
fi
clean=no
test_expect_success 'tests clean up after themselves' '
test_when_finished clean=yes

View File

@ -171,8 +171,6 @@ test_expect_success 'init with init.templatedir set' '
mkdir templatedir-source &&
echo Content >templatedir-source/file &&
(
HOME="`pwd`" &&
export HOME &&
test_config="${HOME}/.gitconfig" &&
git config -f "$test_config" init.templatedir "${HOME}/templatedir-source" &&
mkdir templatedir-set &&
@ -188,8 +186,6 @@ test_expect_success 'init with init.templatedir set' '
test_expect_success 'init --bare/--shared overrides system/global config' '
(
HOME="`pwd`" &&
export HOME &&
test_config="$HOME"/.gitconfig &&
unset GIT_CONFIG_NOGLOBAL &&
git config -f "$test_config" core.bare false &&
@ -205,8 +201,6 @@ test_expect_success 'init --bare/--shared overrides system/global config' '
test_expect_success 'init honors global core.sharedRepository' '
(
HOME="`pwd`" &&
export HOME &&
test_config="$HOME"/.gitconfig &&
unset GIT_CONFIG_NOGLOBAL &&
git config -f "$test_config" core.sharedRepository 0666 &&
@ -301,7 +295,7 @@ test_expect_success 'init notices EEXIST (2)' '
)
'
test_expect_success POSIXPERM 'init notices EPERM' '
test_expect_success POSIXPERM,SANITY 'init notices EPERM' '
rm -fr newdir &&
(
mkdir newdir &&

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/?? &&
@ -27,7 +27,7 @@ test_expect_success POSIXPERM 'write-tree should notice unwritable repository' '
'
test_expect_success POSIXPERM 'commit should notice unwritable repository' '
test_expect_success POSIXPERM,SANITY 'commit should notice unwritable repository' '
(
chmod a-w .git/objects .git/objects/?? &&
@ -39,7 +39,7 @@ test_expect_success POSIXPERM 'commit should notice unwritable repository' '
'
test_expect_success POSIXPERM 'update-index should notice unwritable repository' '
test_expect_success POSIXPERM,SANITY 'update-index should notice unwritable repository' '
(
echo 6O >file &&
@ -52,7 +52,7 @@ test_expect_success POSIXPERM 'update-index should notice unwritable repository'
'
test_expect_success POSIXPERM 'add should notice unwritable repository' '
test_expect_success POSIXPERM,SANITY 'add should notice unwritable repository' '
(
echo b >file &&

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 &&
git reset --hard &&

View File

@ -18,9 +18,11 @@ umask 077
setfacl_out="$(setfacl -m u:root:rwx . 2>&1)"
setfacl_ret=$?
if [ $setfacl_ret != 0 ]; then
skip_all="Skipping ACL tests: unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')"
test_done
if test $setfacl_ret != 0
then
say "Unable to use setfacl (output: '$setfacl_out'; return code: '$setfacl_ret')"
else
test_set_prereq SETFACL
fi
check_perms_and_acl () {
@ -34,7 +36,7 @@ check_perms_and_acl () {
dirs_to_set="./ .git/ .git/objects/ .git/objects/pack/"
test_expect_success 'Setup test repo' '
test_expect_success SETFACL 'Setup test repo' '
setfacl -m d:u::rwx,d:g::---,d:o:---,d:m:rwx $dirs_to_set &&
setfacl -m m:rwx $dirs_to_set &&
setfacl -m u:root:rwx $dirs_to_set &&
@ -46,12 +48,12 @@ test_expect_success 'Setup test repo' '
git commit -m "init"
'
test_expect_success 'Objects creation does not break ACLs with restrictive umask' '
test_expect_success SETFACL 'Objects creation does not break ACLs with restrictive umask' '
# SHA1 for empty blob
check_perms_and_acl .git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
'
test_expect_success 'git gc does not break ACLs with restrictive umask' '
test_expect_success SETFACL 'git gc does not break ACLs with restrictive umask' '
git gc &&
check_perms_and_acl .git/objects/pack/*.pack
'

View File

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

View File

@ -4,7 +4,7 @@ test_description='git checkout --patch'
. ./lib-patch-mode.sh
test_expect_success 'setup' '
test_expect_success PERL 'setup' '
mkdir dir &&
echo parent > dir/foo &&
echo dummy > bar &&
@ -18,40 +18,40 @@ test_expect_success 'setup' '
# note: bar sorts before dir/foo, so the first 'n' is always to skip 'bar'
test_expect_success 'saying "n" does nothing' '
test_expect_success PERL 'saying "n" does nothing' '
set_and_save_state dir/foo work head &&
(echo n; echo n) | git checkout -p &&
verify_saved_state bar &&
verify_saved_state dir/foo
'
test_expect_success 'git checkout -p' '
test_expect_success PERL 'git checkout -p' '
(echo n; echo y) | git checkout -p &&
verify_saved_state bar &&
verify_state dir/foo head head
'
test_expect_success 'git checkout -p with staged changes' '
test_expect_success PERL 'git checkout -p with staged changes' '
set_state dir/foo work index
(echo n; echo y) | git checkout -p &&
verify_saved_state bar &&
verify_state dir/foo index index
'
test_expect_success 'git checkout -p HEAD with NO staged changes: abort' '
test_expect_success PERL 'git checkout -p HEAD with NO staged changes: abort' '
set_and_save_state dir/foo work head &&
(echo n; echo y; echo n) | git checkout -p HEAD &&
verify_saved_state bar &&
verify_saved_state dir/foo
'
test_expect_success 'git checkout -p HEAD with NO staged changes: apply' '
test_expect_success PERL 'git checkout -p HEAD with NO staged changes: apply' '
(echo n; echo y; echo y) | git checkout -p HEAD &&
verify_saved_state bar &&
verify_state dir/foo head head
'
test_expect_success 'git checkout -p HEAD with change already staged' '
test_expect_success PERL 'git checkout -p HEAD with change already staged' '
set_state dir/foo index index
# the third n is to get out in case it mistakenly does not apply
(echo n; echo y; echo n) | git checkout -p HEAD &&
@ -59,14 +59,14 @@ test_expect_success 'git checkout -p HEAD with change already staged' '
verify_state dir/foo head head
'
test_expect_success 'git checkout -p HEAD^' '
test_expect_success PERL 'git checkout -p HEAD^' '
# the third n is to get out in case it mistakenly does not apply
(echo n; echo y; echo n) | git checkout -p HEAD^ &&
verify_saved_state bar &&
verify_state dir/foo parent parent
'
test_expect_success 'git checkout -p handles deletion' '
test_expect_success PERL 'git checkout -p handles deletion' '
set_state dir/foo work index &&
rm dir/foo &&
(echo n; echo y) | git checkout -p &&
@ -79,28 +79,28 @@ test_expect_success 'git checkout -p handles deletion' '
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
# the failure case (and thus get out of the loop).
test_expect_success 'path limiting works: dir' '
test_expect_success PERL 'path limiting works: dir' '
set_state dir/foo work head &&
(echo y; echo n) | git checkout -p dir &&
verify_saved_state bar &&
verify_state dir/foo head head
'
test_expect_success 'path limiting works: -- dir' '
test_expect_success PERL 'path limiting works: -- dir' '
set_state dir/foo work head &&
(echo y; echo n) | git checkout -p -- dir &&
verify_saved_state bar &&
verify_state dir/foo head head
'
test_expect_success 'path limiting works: HEAD^ -- dir' '
test_expect_success PERL 'path limiting works: HEAD^ -- dir' '
# the third n is to get out in case it mistakenly does not apply
(echo y; echo n; echo n) | git checkout -p HEAD^ -- dir &&
verify_saved_state bar &&
verify_state dir/foo parent parent
'
test_expect_success 'path limiting works: foo inside dir' '
test_expect_success PERL 'path limiting works: foo inside dir' '
set_state dir/foo work head &&
# the third n is to get out in case it mistakenly does not apply
(echo y; echo n; echo n) | (cd dir && git checkout -p foo) &&
@ -108,7 +108,7 @@ test_expect_success 'path limiting works: foo inside dir' '
verify_state dir/foo head head
'
test_expect_success 'none of this moved HEAD' '
test_expect_success PERL 'none of this moved HEAD' '
verify_saved_head
'

View File

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

View File

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

View File

@ -28,22 +28,6 @@ embedded' &&
git commit -m 'add files with tabs and newlines'
"
# Determine rm behavior
# Later we will try removing an unremovable path to make sure
# git rm barfs, but if the test is run as root that cannot be
# arranged.
: >test-file
chmod a-w .
rm -f test-file 2>/dev/null
if test -f test-file
then
test_set_prereq RO_DIR
else
skip_all='skipping removal failure test (perhaps running as root?)'
fi
chmod 775 .
rm -f test-file
test_expect_success \
'Pre-check that foo exists and is in index before git rm foo' \
'[ -f foo ] && git ls-files --error-unmatch foo'

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@
test_description='git checkout --patch'
. ./lib-patch-mode.sh
test_expect_success 'setup' '
test_expect_success PERL 'setup' '
mkdir dir &&
echo parent > dir/foo &&
echo dummy > bar &&
@ -19,14 +19,14 @@ test_expect_success 'setup' '
# note: bar sorts before dir, so the first 'n' is always to skip 'bar'
test_expect_success 'saying "n" does nothing' '
test_expect_success PERL 'saying "n" does nothing' '
set_state dir/foo work index
(echo n; echo n) | test_must_fail git stash save -p &&
verify_state dir/foo work index &&
verify_saved_state bar
'
test_expect_success 'git stash -p' '
test_expect_success PERL 'git stash -p' '
(echo n; echo y) | git stash save -p &&
verify_state dir/foo head index &&
verify_saved_state bar &&
@ -36,7 +36,7 @@ test_expect_success 'git stash -p' '
verify_state bar dummy dummy
'
test_expect_success 'git stash -p --no-keep-index' '
test_expect_success PERL 'git stash -p --no-keep-index' '
set_state dir/foo work index &&
set_state bar bar_work bar_index &&
(echo n; echo y) | git stash save -p --no-keep-index &&
@ -48,7 +48,7 @@ test_expect_success 'git stash -p --no-keep-index' '
verify_state bar dummy bar_index
'
test_expect_success 'none of this moved HEAD' '
test_expect_success PERL 'none of this moved HEAD' '
verify_saved_head
'

View File

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

View File

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

View File

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

View File

@ -4,13 +4,7 @@ test_description='typechange rename detection'
. ./test-lib.sh
if ! test_have_prereq SYMLINKS
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success setup '
test_expect_success SYMLINKS setup '
rm -f foo bar &&
cat "$TEST_DIRECTORY"/../COPYING >foo &&
@ -56,7 +50,7 @@ test_expect_success setup '
'
test_expect_success 'cross renames to be detected for regular files' '
test_expect_success SYMLINKS 'cross renames to be detected for regular files' '
git diff-tree five six -r --name-status -B -M | sort >actual &&
{
@ -67,7 +61,7 @@ test_expect_success 'cross renames to be detected for regular files' '
'
test_expect_success 'cross renames to be detected for typechange' '
test_expect_success SYMLINKS 'cross renames to be detected for typechange' '
git diff-tree one two -r --name-status -B -M | sort >actual &&
{
@ -78,7 +72,7 @@ test_expect_success 'cross renames to be detected for typechange' '
'
test_expect_success 'moves and renames' '
test_expect_success SYMLINKS 'moves and renames' '
git diff-tree three four -r --name-status -B -M | sort >actual &&
{

View File

@ -7,6 +7,7 @@ test_description='git apply handling copy/rename patch.
'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
# setup
@ -31,13 +32,6 @@ test_expect_success setup \
test_expect_success apply \
'git apply --index --stat --summary --apply test-patch'
if test "$(git config --bool core.filemode)" = false
then
say 'filemode disabled on the filesystem'
else
test_set_prereq FILEMODE
fi
test_expect_success FILEMODE validate \
'test -f bar && ls -l bar | grep "^-..x......"'

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,12 +3,14 @@
test_description='Test cloning a repository larger than 2 gigabyte'
. ./test-lib.sh
test -z "$GIT_TEST_CLONE_2GB" &&
skip_all="Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t" &&
test_done &&
exit
if test -z "$GIT_TEST_CLONE_2GB"
then
say 'Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t'
else
test_set_prereq CLONE_2GB
fi
test_expect_success 'setup' '
test_expect_success CLONE_2GB 'setup' '
git config pack.compression 0 &&
git config pack.depth 0 &&
@ -36,13 +38,13 @@ test_expect_success 'setup' '
'
test_expect_success 'clone - bare' '
test_expect_success CLONE_2GB 'clone - bare' '
git clone --bare --no-hardlinks . clone-bare
'
test_expect_success 'clone - with worktree, file:// protocol' '
test_expect_success CLONE_2GB 'clone - with worktree, file:// protocol' '
git clone file://. clone-wt

View File

@ -13,13 +13,11 @@ if sys.hexversion < 0x02040000:
sys.exit(1)
'
then
:
else
skip_all='skipping git remote-testgit tests: requires Python 2.4 or newer'
test_done
# Requires Python 2.4 or newer
test_set_prereq PYTHON_24
fi
test_expect_success 'setup repository' '
test_expect_success PYTHON_24 'setup repository' '
git init --bare server/.git &&
git clone server public &&
(cd public &&
@ -29,34 +27,34 @@ test_expect_success 'setup repository' '
git push origin master)
'
test_expect_success 'cloning from local repo' '
test_expect_success PYTHON_24 'cloning from local repo' '
git clone "testgit::${PWD}/server" localclone &&
test_cmp public/file localclone/file
'
test_expect_success 'cloning from remote repo' '
test_expect_success PYTHON_24 'cloning from remote repo' '
git clone "testgit::file://${PWD}/server" clone &&
test_cmp public/file clone/file
'
test_expect_success 'create new commit on remote' '
test_expect_success PYTHON_24 'create new commit on remote' '
(cd public &&
echo content >>file &&
git commit -a -m two &&
git push)
'
test_expect_success 'pulling from local repo' '
test_expect_success PYTHON_24 'pulling from local repo' '
(cd localclone && git pull) &&
test_cmp public/file localclone/file
'
test_expect_success 'pulling from remote remote' '
test_expect_success PYTHON_24 'pulling from remote remote' '
(cd clone && git pull) &&
test_cmp public/file clone/file
'
test_expect_success 'pushing to local repo' '
test_expect_success PYTHON_24 'pushing to local repo' '
(cd localclone &&
echo content >>file &&
git commit -a -m three &&
@ -65,12 +63,12 @@ test_expect_success 'pushing to local repo' '
test $HEAD = $(git --git-dir=server/.git rev-parse --verify HEAD)
'
test_expect_success 'synch with changes from localclone' '
test_expect_success PYTHON_24 'synch with changes from localclone' '
(cd clone &&
git pull)
'
test_expect_success 'pushing remote local repo' '
test_expect_success PYTHON_24 'pushing remote local repo' '
(cd clone &&
echo content >>file &&
git commit -a -m four &&

View File

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

View File

@ -3,13 +3,7 @@
test_description='merging when a directory was replaced with a symlink'
. ./test-lib.sh
if ! test_have_prereq SYMLINKS
then
skip_all='Symbolic links not supported, skipping tests.'
test_done
fi
test_expect_success 'create a commit where dir a/b changed to symlink' '
test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
mkdir -p a/b/c a/b-2/c &&
> a/b/c/d &&
> a/b-2/c/d &&
@ -23,7 +17,7 @@ test_expect_success 'create a commit where dir a/b changed to symlink' '
git commit -m "dir to symlink"
'
test_expect_success 'keep a/b-2/c/d across checkout' '
test_expect_success SYMLINKS 'keep a/b-2/c/d across checkout' '
git checkout HEAD^0 &&
git reset --hard master &&
git rm --cached a/b &&
@ -32,14 +26,14 @@ test_expect_success 'keep a/b-2/c/d across checkout' '
test -f a/b-2/c/d
'
test_expect_success 'checkout should not have deleted a/b-2/c/d' '
test_expect_success SYMLINKS 'checkout should not have deleted a/b-2/c/d' '
git checkout HEAD^0 &&
git reset --hard master &&
git checkout start^0 &&
test -f a/b-2/c/d
'
test_expect_success 'setup for merge test' '
test_expect_success SYMLINKS 'setup for merge test' '
git reset --hard &&
test -f a/b-2/c/d &&
echo x > a/x &&
@ -48,7 +42,7 @@ test_expect_success 'setup for merge test' '
git tag baseline
'
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s resolve master &&
@ -56,7 +50,7 @@ test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolv
test -f a/b-2/c/d
'
test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
test_expect_success SYMLINKS 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s recursive master &&
@ -64,7 +58,7 @@ test_expect_success 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recurs
test -f a/b-2/c/d
'
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' '
git reset --hard &&
git checkout master^0 &&
git merge -s resolve baseline^0 &&
@ -72,7 +66,7 @@ test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolv
test -f a/b-2/c/d
'
test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
test_expect_success SYMLINKS 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' '
git reset --hard &&
git checkout master^0 &&
git merge -s recursive baseline^0 &&
@ -80,7 +74,7 @@ test_expect_success 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recurs
test -f a/b-2/c/d
'
test_expect_failure 'do not lose untracked in merge (resolve)' '
test_expect_failure SYMLINKS 'do not lose untracked in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
>a/b/c/e &&
@ -89,7 +83,7 @@ test_expect_failure 'do not lose untracked in merge (resolve)' '
test -f a/b-2/c/d
'
test_expect_success 'do not lose untracked in merge (recursive)' '
test_expect_success SYMLINKS 'do not lose untracked in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
>a/b/c/e &&
@ -98,21 +92,21 @@ test_expect_success 'do not lose untracked in merge (recursive)' '
test -f a/b-2/c/d
'
test_expect_success 'do not lose modifications in merge (resolve)' '
test_expect_success SYMLINKS 'do not lose modifications in merge (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
echo more content >>a/b/c/d &&
test_must_fail git merge -s resolve master
'
test_expect_success 'do not lose modifications in merge (recursive)' '
test_expect_success SYMLINKS 'do not lose modifications in merge (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
echo more content >>a/b/c/d &&
test_must_fail git merge -s recursive master
'
test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
test_expect_success SYMLINKS 'setup a merge where dir a/b-2 changed to symlink' '
git reset --hard &&
git checkout start^0 &&
rm -rf a/b-2 &&
@ -122,7 +116,7 @@ test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
git tag test2
'
test_expect_success 'merge should not have D/F conflicts (resolve)' '
test_expect_success SYMLINKS 'merge should not have D/F conflicts (resolve)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s resolve test2 &&
@ -130,7 +124,7 @@ test_expect_success 'merge should not have D/F conflicts (resolve)' '
test -f a/b/c/d
'
test_expect_success 'merge should not have D/F conflicts (recursive)' '
test_expect_success SYMLINKS 'merge should not have D/F conflicts (recursive)' '
git reset --hard &&
git checkout baseline^0 &&
git merge -s recursive test2 &&
@ -138,7 +132,7 @@ test_expect_success 'merge should not have D/F conflicts (recursive)' '
test -f a/b/c/d
'
test_expect_success 'merge should not have F/D conflicts (recursive)' '
test_expect_success SYMLINKS 'merge should not have F/D conflicts (recursive)' '
git reset --hard &&
git checkout -b foo test2 &&
git merge -s recursive baseline^0 &&

View File

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

View File

@ -3,7 +3,7 @@
test_description='git reset --patch'
. ./lib-patch-mode.sh
test_expect_success 'setup' '
test_expect_success PERL 'setup' '
mkdir dir &&
echo parent > dir/foo &&
echo dummy > bar &&
@ -17,20 +17,20 @@ test_expect_success 'setup' '
# note: bar sorts before foo, so the first 'n' is always to skip 'bar'
test_expect_success 'saying "n" does nothing' '
test_expect_success PERL 'saying "n" does nothing' '
set_and_save_state dir/foo work work
(echo n; echo n) | git reset -p &&
verify_saved_state dir/foo &&
verify_saved_state bar
'
test_expect_success 'git reset -p' '
test_expect_success PERL 'git reset -p' '
(echo n; echo y) | git reset -p &&
verify_state dir/foo work head &&
verify_saved_state bar
'
test_expect_success 'git reset -p HEAD^' '
test_expect_success PERL 'git reset -p HEAD^' '
(echo n; echo y) | git reset -p HEAD^ &&
verify_state dir/foo work parent &&
verify_saved_state bar
@ -41,27 +41,27 @@ test_expect_success 'git reset -p HEAD^' '
# dir/foo. There's always an extra 'n' to reject edits to dir/foo in
# the failure case (and thus get out of the loop).
test_expect_success 'git reset -p dir' '
test_expect_success PERL 'git reset -p dir' '
set_state dir/foo work work
(echo y; echo n) | git reset -p dir &&
verify_state dir/foo work head &&
verify_saved_state bar
'
test_expect_success 'git reset -p -- foo (inside dir)' '
test_expect_success PERL 'git reset -p -- foo (inside dir)' '
set_state dir/foo work work
(echo y; echo n) | (cd dir && git reset -p -- foo) &&
verify_state dir/foo work head &&
verify_saved_state bar
'
test_expect_success 'git reset -p HEAD^ -- dir' '
test_expect_success PERL 'git reset -p HEAD^ -- dir' '
(echo y; echo n) | git reset -p HEAD^ -- dir &&
verify_state dir/foo work parent &&
verify_saved_state bar
'
test_expect_success 'none of this moved HEAD' '
test_expect_success PERL 'none of this moved HEAD' '
verify_saved_head
'

View File

@ -388,16 +388,15 @@ test_expect_success 'core.excludesfile' '
'
test_expect_success 'removal failure' '
test_expect_success SANITY 'removal failure' '
mkdir foo &&
touch foo/bar &&
(exec <foo/bar &&
chmod 0 foo &&
test_must_fail git clean -f -d)
test_must_fail git clean -f -d &&
chmod 755 foo)
'
chmod 755 foo
test_expect_success 'nested git work tree' '
rm -fr foo bar &&

View File

@ -793,7 +793,7 @@ test_expect_success 'commit --dry-run submodule summary (--amend)' '
test_cmp expect output
'
test_expect_success POSIXPERM 'status succeeds in a read-only repository' '
test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
(
chmod a-w .git &&
# make dir1/tracked stat-dirty

View File

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

View File

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

View File

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

View File

@ -5,6 +5,7 @@
test_description='Test export of commits to CVS'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-prereq-FILEMODE.sh
if ! test_have_prereq PERL; then
skip_all='skipping git cvsexportcommit tests, perl not available'
@ -229,11 +230,6 @@ test_expect_success \
test_must_fail git cvsexportcommit -c $id
)'
if ! test "$(git config --bool core.filemode)" = false
then
test_set_prereq FILEMODE
fi
test_expect_success FILEMODE \
'Retain execute bit' \
'mkdir G &&

View File

@ -3,17 +3,14 @@
test_description='git cvsimport basic tests'
. ./lib-cvs.sh
if ! test_have_prereq PERL; then
skip_all='skipping git cvsimport tests, perl not available'
test_done
fi
test_expect_success PERL 'setup cvsroot environment' '
CVSROOT=$(pwd)/cvsroot &&
export CVSROOT
'
CVSROOT=$(pwd)/cvsroot
export CVSROOT
test_expect_success PERL 'setup cvsroot' '$CVS init'
test_expect_success 'setup cvsroot' '$CVS init'
test_expect_success 'setup a cvs module' '
test_expect_success PERL 'setup a cvs module' '
mkdir "$CVSROOT/module" &&
$CVS co -d module-cvs module &&
@ -45,23 +42,23 @@ EOF
cd ..
'
test_expect_success 'import a trivial module' '
test_expect_success PERL 'import a trivial module' '
git cvsimport -a -R -z 0 -C module-git module &&
test_cmp module-cvs/o_fortuna module-git/o_fortuna
'
test_expect_success 'pack refs' 'cd module-git && git gc && cd ..'
test_expect_success PERL 'pack refs' 'cd module-git && git gc && cd ..'
test_expect_success 'initial import has correct .git/cvs-revisions' '
test_expect_success PERL 'initial import has correct .git/cvs-revisions' '
(cd module-git &&
git log --format="o_fortuna 1.1 %H" -1) > expected &&
test_cmp expected module-git/.git/cvs-revisions
'
test_expect_success 'update cvs module' '
test_expect_success PERL 'update cvs module' '
cd module-cvs &&
cat <<EOF >o_fortuna &&
@ -90,7 +87,7 @@ EOF
cd ..
'
test_expect_success 'update git module' '
test_expect_success PERL 'update git module' '
cd module-git &&
git cvsimport -a -R -z 0 module &&
@ -100,7 +97,7 @@ test_expect_success 'update git module' '
'
test_expect_success 'update has correct .git/cvs-revisions' '
test_expect_success PERL 'update has correct .git/cvs-revisions' '
(cd module-git &&
git log --format="o_fortuna 1.1 %H" -1 HEAD^ &&
@ -108,7 +105,7 @@ test_expect_success 'update has correct .git/cvs-revisions' '
test_cmp expected module-git/.git/cvs-revisions
'
test_expect_success 'update cvs module' '
test_expect_success PERL 'update cvs module' '
cd module-cvs &&
echo 1 >tick &&
@ -118,7 +115,7 @@ test_expect_success 'update cvs module' '
'
test_expect_success 'cvsimport.module config works' '
test_expect_success PERL 'cvsimport.module config works' '
cd module-git &&
git config cvsimport.module module &&
@ -129,7 +126,7 @@ test_expect_success 'cvsimport.module config works' '
'
test_expect_success 'second update has correct .git/cvs-revisions' '
test_expect_success PERL 'second update has correct .git/cvs-revisions' '
(cd module-git &&
git log --format="o_fortuna 1.1 %H" -1 HEAD^^ &&
@ -138,7 +135,7 @@ test_expect_success 'second update has correct .git/cvs-revisions' '
test_cmp expected module-git/.git/cvs-revisions
'
test_expect_success 'import from a CVS working tree' '
test_expect_success PERL 'import from a CVS working tree' '
$CVS co -d import-from-wt module &&
cd import-from-wt &&
@ -150,12 +147,12 @@ test_expect_success 'import from a CVS working tree' '
'
test_expect_success 'no .git/cvs-revisions created by default' '
test_expect_success PERL 'no .git/cvs-revisions created by default' '
! test -e import-from-wt/.git/cvs-revisions
'
test_expect_success 'test entire HEAD' 'test_cmp_branch_tree master'
test_expect_success PERL 'test entire HEAD' 'test_cmp_branch_tree master'
test_done

View File

@ -34,50 +34,49 @@
test_description='git cvsimport handling of vendor branches'
. ./lib-cvs.sh
CVSROOT="$TEST_DIRECTORY"/t9601/cvsroot
export CVSROOT
setup_cvs_test_repository t9601
test_expect_success 'import a module with a vendor branch' '
test_expect_success PERL 'import a module with a vendor branch' '
git cvsimport -C module-git module
'
test_expect_success 'check HEAD out of cvs repository' 'test_cvs_co master'
test_expect_success PERL 'check HEAD out of cvs repository' 'test_cvs_co master'
test_expect_success 'check master out of git repository' 'test_git_co master'
test_expect_success PERL 'check master out of git repository' 'test_git_co master'
test_expect_success 'check a file that was imported once' '
test_expect_success PERL 'check a file that was imported once' '
test_cmp_branch_file master imported-once.txt
'
test_expect_failure 'check a file that was imported twice' '
test_expect_failure PERL 'check a file that was imported twice' '
test_cmp_branch_file master imported-twice.txt
'
test_expect_success 'check a file that was imported then modified on HEAD' '
test_expect_success PERL 'check a file that was imported then modified on HEAD' '
test_cmp_branch_file master imported-modified.txt
'
test_expect_success 'check a file that was imported, modified, then imported again' '
test_expect_success PERL 'check a file that was imported, modified, then imported again' '
test_cmp_branch_file master imported-modified-imported.txt
'
test_expect_success 'check a file that was added to HEAD then imported' '
test_expect_success PERL 'check a file that was added to HEAD then imported' '
test_cmp_branch_file master added-imported.txt
'
test_expect_success 'a vendor branch whose tag has been removed' '
test_expect_success PERL 'a vendor branch whose tag has been removed' '
test_cmp_branch_file master imported-anonymously.txt

View File

@ -6,70 +6,69 @@
test_description='git cvsimport handling of branches and tags'
. ./lib-cvs.sh
CVSROOT="$TEST_DIRECTORY"/t9602/cvsroot
export CVSROOT
setup_cvs_test_repository t9602
test_expect_success 'import module' '
test_expect_success PERL 'import module' '
git cvsimport -C module-git module
'
test_expect_success 'test branch master' '
test_expect_success PERL 'test branch master' '
test_cmp_branch_tree master
'
test_expect_success 'test branch vendorbranch' '
test_expect_success PERL 'test branch vendorbranch' '
test_cmp_branch_tree vendorbranch
'
test_expect_failure 'test branch B_FROM_INITIALS' '
test_expect_failure PERL 'test branch B_FROM_INITIALS' '
test_cmp_branch_tree B_FROM_INITIALS
'
test_expect_failure 'test branch B_FROM_INITIALS_BUT_ONE' '
test_expect_failure PERL 'test branch B_FROM_INITIALS_BUT_ONE' '
test_cmp_branch_tree B_FROM_INITIALS_BUT_ONE
'
test_expect_failure 'test branch B_MIXED' '
test_expect_failure PERL 'test branch B_MIXED' '
test_cmp_branch_tree B_MIXED
'
test_expect_success 'test branch B_SPLIT' '
test_expect_success PERL 'test branch B_SPLIT' '
test_cmp_branch_tree B_SPLIT
'
test_expect_failure 'test tag vendortag' '
test_expect_failure PERL 'test tag vendortag' '
test_cmp_branch_tree vendortag
'
test_expect_success 'test tag T_ALL_INITIAL_FILES' '
test_expect_success PERL 'test tag T_ALL_INITIAL_FILES' '
test_cmp_branch_tree T_ALL_INITIAL_FILES
'
test_expect_failure 'test tag T_ALL_INITIAL_FILES_BUT_ONE' '
test_expect_failure PERL 'test tag T_ALL_INITIAL_FILES_BUT_ONE' '
test_cmp_branch_tree T_ALL_INITIAL_FILES_BUT_ONE
'
test_expect_failure 'test tag T_MIXED' '
test_expect_failure PERL 'test tag T_MIXED' '
test_cmp_branch_tree T_MIXED

View File

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

View File

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