2006-07-06 15:14:16 +08:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
if test -n "$NO_SVN_TESTS"
|
2006-05-24 10:23:41 +08:00
|
|
|
then
|
2010-06-25 01:44:48 +08:00
|
|
|
skip_all='skipping git svn tests, NO_SVN_TESTS defined'
|
2006-07-06 15:14:16 +08:00
|
|
|
test_done
|
2006-05-24 10:23:41 +08:00
|
|
|
fi
|
2009-04-04 03:33:59 +08:00
|
|
|
if ! test_have_prereq PERL; then
|
2010-06-25 01:44:48 +08:00
|
|
|
skip_all='skipping git svn tests, perl not available'
|
2009-04-04 03:33:59 +08:00
|
|
|
test_done
|
|
|
|
fi
|
2006-05-24 10:23:41 +08:00
|
|
|
|
2006-12-16 15:58:07 +08:00
|
|
|
GIT_DIR=$PWD/.git
|
2009-08-12 11:14:27 +08:00
|
|
|
GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn
|
2006-12-16 15:58:07 +08:00
|
|
|
SVN_TREE=$GIT_SVN_DIR/svn-tree
|
test-lib-functions: introduce the 'test_set_port' helper function
Several test scripts run daemons like 'git-daemon' or Apache, and
communicate with them through TCP sockets. To have unique ports where
these daemons are accessible, the ports are usually the number of the
corresponding test scripts, unless the user overrides them via
environment variables, and thus all those tests and test libs contain
more or less the same bit of one-liner boilerplate code to find out
the port. The last patch in this series will make this a bit more
complicated.
Factor out finding the port for a daemon into the common helper
function 'test_set_port' to avoid repeating ourselves.
Take special care of test scripts with "low" numbers:
- Test numbers below 1024 would result in a port that's only usable
as root, so set their port to '10000 + test-nr' to make sure it
doesn't interfere with other tests in the test suite. This makes
the hardcoded port number in 't0410-partial-clone.sh' unnecessary,
remove it.
- The shell's arithmetic evaluation interprets numbers with leading
zeros as octal values, which means that test number below 1000 and
containing the digits 8 or 9 will trigger an error. Remove all
leading zeros from the test numbers to prevent this.
Note that the 'git p4' tests are unlike the other tests involving
daemons in that:
- 'lib-git-p4.sh' doesn't use the test's number for unique port as
is, but does a bit of additional arithmetic on top [1].
- The port is not overridable via an environment variable.
With this patch even 'git p4' tests will use the test's number as
default port, and it will be overridable via the P4DPORT environment
variable.
[1] Commit fc00233071 (git-p4 tests: refactor and cleanup, 2011-08-22)
introduced that "unusual" unique port computation without
explaining why it was necessary (as opposed to simply using the
test number as is). It seems to be just unnecessary complication,
and in any case that commit came way before the "test nr as unique
port" got "standardized" for other daemons in commits c44132fcf3
(tests: auto-set git-daemon port, 2014-02-10), 3bb486e439 (tests:
auto-set LIB_HTTPD_PORT from test name, 2014-02-10), and
bf9d7df950 (t/lib-git-svn.sh: improve svnserve tests with parallel
make test, 2017-12-01).
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-01-05 09:08:58 +08:00
|
|
|
test_set_port SVNSERVE_PORT
|
2006-12-16 15:58:07 +08:00
|
|
|
|
2006-05-24 10:23:41 +08:00
|
|
|
svn >/dev/null 2>&1
|
2006-07-07 18:17:16 +08:00
|
|
|
if test $? -ne 1
|
2006-05-24 10:23:41 +08:00
|
|
|
then
|
2017-12-01 23:56:52 +08:00
|
|
|
skip_all='skipping git svn tests, svn not found'
|
|
|
|
test_done
|
2006-05-24 10:23:41 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
svnrepo=$PWD/svnrepo
|
2008-05-04 13:37:57 +08:00
|
|
|
export svnrepo
|
2009-05-08 16:06:16 +08:00
|
|
|
svnconf=$PWD/svnconf
|
|
|
|
export svnconf
|
2006-05-24 10:23:41 +08:00
|
|
|
|
2013-10-29 09:23:03 +08:00
|
|
|
perl -w -e "
|
2007-01-01 13:49:45 +08:00
|
|
|
use SVN::Core;
|
|
|
|
use SVN::Repos;
|
|
|
|
\$SVN::Core::VERSION gt '1.1.0' or exit(42);
|
2008-05-04 13:37:57 +08:00
|
|
|
system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41);
|
2007-01-14 16:22:47 +08:00
|
|
|
" >&3 2>&4
|
2007-01-01 13:49:45 +08:00
|
|
|
x=$?
|
|
|
|
if test $x -ne 0
|
git-svn: SVN 1.1.x library compatibility
Tested on a plain Ubuntu Hoary installation
using subversion 1.1.1-2ubuntu3
1.1.x issues I had to deal with:
* Avoid the noisy command-line client compatibility check if we
use the libraries.
* get_log() arguments differ (now using a nice wrapper from
Junio's suggestion)
* get_file() is picky about what kind of file handles it gets,
so I ended up redirecting STDOUT. I'm probably overflushing
my file handles, but that's the safest thing to do...
* BDB kept segfaulting on me during tests, so svnadmin will use FSFS
whenever we can.
* If somebody used an expanded CVS $Id$ line inside a file, then
propsetting it to use svn:keywords will cause the original CVS
$Id$ to be retained when asked for the original file. As far as
I can see, this is a server-side issue. We won't care in the
test anymore, as long as it's not expanded by SVN, a static
CVS $Id$ line is fine.
While we're at making ourselves more compatible, avoid grep
along with the -q flag, which is GNU-specific. (grep avoidance
tip from Junio, too)
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 18:07:14 +08:00
|
|
|
then
|
2007-01-01 13:49:45 +08:00
|
|
|
if test $x -eq 42; then
|
2010-07-08 09:16:06 +08:00
|
|
|
skip_all='Perl SVN libraries must be >= 1.1.0'
|
2007-01-13 18:47:53 +08:00
|
|
|
elif test $x -eq 41; then
|
2010-07-08 09:16:06 +08:00
|
|
|
skip_all='svnadmin failed to create fsfs repository'
|
2007-01-01 13:49:45 +08:00
|
|
|
else
|
2010-07-08 09:16:06 +08:00
|
|
|
skip_all='Perl SVN libraries not found or unusable'
|
2007-01-01 13:49:45 +08:00
|
|
|
fi
|
|
|
|
test_done
|
git-svn: SVN 1.1.x library compatibility
Tested on a plain Ubuntu Hoary installation
using subversion 1.1.1-2ubuntu3
1.1.x issues I had to deal with:
* Avoid the noisy command-line client compatibility check if we
use the libraries.
* get_log() arguments differ (now using a nice wrapper from
Junio's suggestion)
* get_file() is picky about what kind of file handles it gets,
so I ended up redirecting STDOUT. I'm probably overflushing
my file handles, but that's the safest thing to do...
* BDB kept segfaulting on me during tests, so svnadmin will use FSFS
whenever we can.
* If somebody used an expanded CVS $Id$ line inside a file, then
propsetting it to use svn:keywords will cause the original CVS
$Id$ to be retained when asked for the original file. As far as
I can see, this is a server-side issue. We won't care in the
test anymore, as long as it's not expanded by SVN, a static
CVS $Id$ line is fine.
While we're at making ourselves more compatible, avoid grep
along with the -q flag, which is GNU-specific. (grep avoidance
tip from Junio, too)
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-28 18:07:14 +08:00
|
|
|
fi
|
|
|
|
|
2006-12-05 13:17:38 +08:00
|
|
|
rawsvnrepo="$svnrepo"
|
2006-11-28 13:46:50 +08:00
|
|
|
svnrepo="file://$svnrepo"
|
2006-05-24 10:23:41 +08:00
|
|
|
|
2007-02-13 08:33:37 +08:00
|
|
|
poke() {
|
2018-03-24 15:44:31 +08:00
|
|
|
test-tool chmtime +1 "$1"
|
2007-02-13 08:33:37 +08:00
|
|
|
}
|
2007-07-16 12:53:50 +08:00
|
|
|
|
2009-05-08 16:06:16 +08:00
|
|
|
# We need this, because we should pass empty configuration directory to
|
|
|
|
# the 'svn commit' to avoid automated property changes and other stuff
|
|
|
|
# that could be set from user's configuration files in ~/.subversion.
|
|
|
|
svn_cmd () {
|
|
|
|
[ -d "$svnconf" ] || mkdir "$svnconf"
|
|
|
|
orig_svncmd="$1"; shift
|
|
|
|
if [ -z "$orig_svncmd" ]; then
|
|
|
|
svn
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
svn "$orig_svncmd" --config-dir "$svnconf" "$@"
|
|
|
|
}
|
|
|
|
|
2016-07-23 12:26:08 +08:00
|
|
|
maybe_start_httpd () {
|
|
|
|
loc=${1-svn}
|
|
|
|
|
tests: add 'test_bool_env' to catch non-bool GIT_TEST_* values
Since 3b072c577b (tests: replace test_tristate with "git env--helper",
2019-06-21) we get the normalized bool values of various GIT_TEST_*
environment variables via 'git env--helper'. Now, while the 'git
env--helper' command itself does catch invalid values in the
environment variable or in the given --default and exits with error
(exit code 128 or 129, respectively), it's invoked in conditions like
'if ! git env--helper ...', which means that all invalid bool values
are interpreted the same as the ordinary 'false' (exit code 1). This
has led to inadvertently skipped httpd tests in our CI builds for a
couple of weeks, see 3960290675 (ci: restore running httpd tests,
2019-09-06).
Let's be more careful about what the test suite accepts as bool values
in GIT_TEST_* environment variables, and error out loud and clear on
invalid values instead of simply skipping tests. Add the
'test_bool_env' helper function to encapsulate the invocation of 'git
env--helper' and the verification of its exit code, and replace all
invocations of that command in our test framework and test suite with
a call to this new helper (except in 't0017-env-helper.sh', of
course).
$ GIT_TEST_GIT_DAEMON=YesPlease ./t5570-git-daemon.sh
fatal: bad numeric config value 'YesPlease' for 'GIT_TEST_GIT_DAEMON': invalid unit
error: test_bool_env requires bool values both for $GIT_TEST_GIT_DAEMON and for the default fallback
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-11-22 21:14:36 +08:00
|
|
|
if test_bool_env GIT_TEST_SVN_HTTPD false
|
2019-06-21 18:18:11 +08:00
|
|
|
then
|
2016-07-23 12:26:08 +08:00
|
|
|
. "$TEST_DIRECTORY"/lib-httpd.sh
|
|
|
|
LIB_HTTPD_SVN="$loc"
|
|
|
|
start_httpd
|
2019-06-21 18:18:11 +08:00
|
|
|
fi
|
2007-07-16 12:53:50 +08:00
|
|
|
}
|
2007-12-09 15:27:41 +08:00
|
|
|
|
|
|
|
convert_to_rev_db () {
|
2020-06-23 02:04:11 +08:00
|
|
|
perl -w -- - "$(test_oid rawsz)" "$@" <<\EOF
|
2007-12-09 15:27:41 +08:00
|
|
|
use strict;
|
2020-06-23 02:04:11 +08:00
|
|
|
my $oidlen = shift;
|
2013-02-25 06:48:39 +08:00
|
|
|
@ARGV == 2 or die "usage: convert_to_rev_db <input> <output>";
|
2020-06-23 02:04:11 +08:00
|
|
|
my $record_size = $oidlen + 4;
|
|
|
|
my $hexlen = $oidlen * 2;
|
2007-12-09 15:27:41 +08:00
|
|
|
open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]";
|
|
|
|
open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]";
|
|
|
|
my $size = (stat($rd))[7];
|
2020-06-23 02:04:11 +08:00
|
|
|
($size % $record_size) == 0 or die "Inconsistent size: $size";
|
|
|
|
while (sysread($rd, my $buf, $record_size) == $record_size) {
|
|
|
|
my ($r, $c) = unpack("NH$hexlen", $buf);
|
|
|
|
my $offset = $r * ($hexlen + 1);
|
2007-12-09 15:27:41 +08:00
|
|
|
seek $wr, 0, 2 or die $!;
|
|
|
|
my $pos = tell $wr;
|
|
|
|
if ($pos < $offset) {
|
2020-06-23 02:04:11 +08:00
|
|
|
for (1 .. (($offset - $pos) / ($hexlen + 1))) {
|
|
|
|
print $wr (('0' x $hexlen),"\n") or die $!;
|
2007-12-09 15:27:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
seek $wr, $offset, 0 or die $!;
|
|
|
|
print $wr $c,"\n" or die $!;
|
|
|
|
}
|
|
|
|
close $wr or die $!;
|
|
|
|
close $rd or die $!;
|
|
|
|
EOF
|
|
|
|
}
|
2008-09-15 05:14:15 +08:00
|
|
|
|
|
|
|
require_svnserve () {
|
tests: add 'test_bool_env' to catch non-bool GIT_TEST_* values
Since 3b072c577b (tests: replace test_tristate with "git env--helper",
2019-06-21) we get the normalized bool values of various GIT_TEST_*
environment variables via 'git env--helper'. Now, while the 'git
env--helper' command itself does catch invalid values in the
environment variable or in the given --default and exits with error
(exit code 128 or 129, respectively), it's invoked in conditions like
'if ! git env--helper ...', which means that all invalid bool values
are interpreted the same as the ordinary 'false' (exit code 1). This
has led to inadvertently skipped httpd tests in our CI builds for a
couple of weeks, see 3960290675 (ci: restore running httpd tests,
2019-09-06).
Let's be more careful about what the test suite accepts as bool values
in GIT_TEST_* environment variables, and error out loud and clear on
invalid values instead of simply skipping tests. Add the
'test_bool_env' helper function to encapsulate the invocation of 'git
env--helper' and the verification of its exit code, and replace all
invocations of that command in our test framework and test suite with
a call to this new helper (except in 't0017-env-helper.sh', of
course).
$ GIT_TEST_GIT_DAEMON=YesPlease ./t5570-git-daemon.sh
fatal: bad numeric config value 'YesPlease' for 'GIT_TEST_GIT_DAEMON': invalid unit
error: test_bool_env requires bool values both for $GIT_TEST_GIT_DAEMON and for the default fallback
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-11-22 21:14:36 +08:00
|
|
|
if ! test_bool_env GIT_TEST_SVNSERVE false
|
2017-12-01 23:56:52 +08:00
|
|
|
then
|
2017-12-01 23:56:53 +08:00
|
|
|
skip_all='skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)'
|
2017-12-01 23:56:52 +08:00
|
|
|
test_done
|
|
|
|
fi
|
2008-09-15 05:14:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
start_svnserve () {
|
2017-12-01 23:56:52 +08:00
|
|
|
svnserve --listen-port $SVNSERVE_PORT \
|
|
|
|
--root "$rawsvnrepo" \
|
|
|
|
--listen-once \
|
|
|
|
--listen-host 127.0.0.1 &
|
2008-09-15 05:14:15 +08:00
|
|
|
}
|
|
|
|
|
t: use user-specified utf-8 locale for testing svn
In some test-cases, UTF-8 locale is required. To find such locale,
we're using the first available UTF-8 locale that returned by
"locale -a".
However, the locale(1) utility is unavailable on some systems,
e.g. Linux with musl libc.
However, without "locale -a", we can't guess provided UTF-8 locale.
Add a Makefile knob GIT_TEST_UTF8_LOCALE and activate it for
linux-musl in our CI system.
Rename t/lib-git-svn.sh:prepare_a_utf8_locale to prepare_utf8_locale,
since we no longer prepare the variable named "a_utf8_locale",
but set up a fallback value for GIT_TEST_UTF8_LOCALE instead.
The fallback will be LC_ALL, LANG environment variable,
or the first UTF-8 locale from output of "locale -a", in that order.
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-06-08 14:56:28 +08:00
|
|
|
prepare_utf8_locale () {
|
|
|
|
if test -z "$GIT_TEST_UTF8_LOCALE"
|
|
|
|
then
|
|
|
|
case "${LC_ALL:-$LANG}" in
|
|
|
|
*.[Uu][Tt][Ff]8 | *.[Uu][Tt][Ff]-8)
|
|
|
|
GIT_TEST_UTF8_LOCALE="${LC_ALL:-$LANG}"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
GIT_TEST_UTF8_LOCALE=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
|
|
|
|
p
|
|
|
|
q
|
|
|
|
}')
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
if test -n "$GIT_TEST_UTF8_LOCALE"
|
2016-02-22 10:17:51 +08:00
|
|
|
then
|
|
|
|
test_set_prereq UTF8
|
|
|
|
else
|
|
|
|
say "# UTF-8 locale not available, some tests are skipped"
|
|
|
|
fi
|
|
|
|
}
|