]>
Commit | Line | Data |
---|---|---|
1 | . ./test-lib.sh | |
2 | ||
3 | if test -n "$NO_SVN_TESTS" | |
4 | then | |
5 | skip_all='skipping git svn tests, NO_SVN_TESTS defined' | |
6 | test_done | |
7 | fi | |
8 | if ! test_have_prereq PERL; then | |
9 | skip_all='skipping git svn tests, perl not available' | |
10 | test_done | |
11 | fi | |
12 | ||
13 | GIT_DIR=$PWD/.git | |
14 | GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn | |
15 | SVN_TREE=$GIT_SVN_DIR/svn-tree | |
16 | test_set_port SVNSERVE_PORT | |
17 | ||
18 | svn >/dev/null 2>&1 | |
19 | if test $? -ne 1 | |
20 | then | |
21 | skip_all='skipping git svn tests, svn not found' | |
22 | test_done | |
23 | fi | |
24 | ||
25 | svnrepo=$PWD/svnrepo | |
26 | export svnrepo | |
27 | svnconf=$PWD/svnconf | |
28 | export svnconf | |
29 | ||
30 | perl -w -e " | |
31 | use SVN::Core; | |
32 | use SVN::Repos; | |
33 | \$SVN::Core::VERSION gt '1.1.0' or exit(42); | |
34 | system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41); | |
35 | " >&3 2>&4 | |
36 | x=$? | |
37 | if test $x -ne 0 | |
38 | then | |
39 | if test $x -eq 42; then | |
40 | skip_all='Perl SVN libraries must be >= 1.1.0' | |
41 | elif test $x -eq 41; then | |
42 | skip_all='svnadmin failed to create fsfs repository' | |
43 | else | |
44 | skip_all='Perl SVN libraries not found or unusable' | |
45 | fi | |
46 | test_done | |
47 | fi | |
48 | ||
49 | rawsvnrepo="$svnrepo" | |
50 | svnrepo="file://$svnrepo" | |
51 | ||
52 | poke() { | |
53 | test-tool chmtime +1 "$1" | |
54 | } | |
55 | ||
56 | # We need this, because we should pass empty configuration directory to | |
57 | # the 'svn commit' to avoid automated property changes and other stuff | |
58 | # that could be set from user's configuration files in ~/.subversion. | |
59 | svn_cmd () { | |
60 | [ -d "$svnconf" ] || mkdir "$svnconf" | |
61 | orig_svncmd="$1"; shift | |
62 | if [ -z "$orig_svncmd" ]; then | |
63 | svn | |
64 | return | |
65 | fi | |
66 | svn "$orig_svncmd" --config-dir "$svnconf" "$@" | |
67 | } | |
68 | ||
69 | maybe_start_httpd () { | |
70 | loc=${1-svn} | |
71 | ||
72 | if git env--helper --type=bool --default=false --exit-code GIT_TEST_HTTPD | |
73 | then | |
74 | . "$TEST_DIRECTORY"/lib-httpd.sh | |
75 | LIB_HTTPD_SVN="$loc" | |
76 | start_httpd | |
77 | fi | |
78 | } | |
79 | ||
80 | convert_to_rev_db () { | |
81 | perl -w -- - "$@" <<\EOF | |
82 | use strict; | |
83 | @ARGV == 2 or die "usage: convert_to_rev_db <input> <output>"; | |
84 | open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]"; | |
85 | open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]"; | |
86 | my $size = (stat($rd))[7]; | |
87 | ($size % 24) == 0 or die "Inconsistent size: $size"; | |
88 | while (sysread($rd, my $buf, 24) == 24) { | |
89 | my ($r, $c) = unpack('NH40', $buf); | |
90 | my $offset = $r * 41; | |
91 | seek $wr, 0, 2 or die $!; | |
92 | my $pos = tell $wr; | |
93 | if ($pos < $offset) { | |
94 | for (1 .. (($offset - $pos) / 41)) { | |
95 | print $wr (('0' x 40),"\n") or die $!; | |
96 | } | |
97 | } | |
98 | seek $wr, $offset, 0 or die $!; | |
99 | print $wr $c,"\n" or die $!; | |
100 | } | |
101 | close $wr or die $!; | |
102 | close $rd or die $!; | |
103 | EOF | |
104 | } | |
105 | ||
106 | require_svnserve () { | |
107 | if ! git env--helper --type=bool --default=false --exit-code GIT_TEST_SVNSERVE | |
108 | then | |
109 | skip_all='skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)' | |
110 | test_done | |
111 | fi | |
112 | } | |
113 | ||
114 | start_svnserve () { | |
115 | svnserve --listen-port $SVNSERVE_PORT \ | |
116 | --root "$rawsvnrepo" \ | |
117 | --listen-once \ | |
118 | --listen-host 127.0.0.1 & | |
119 | } | |
120 | ||
121 | prepare_a_utf8_locale () { | |
122 | a_utf8_locale=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{ | |
123 | p | |
124 | q | |
125 | }') | |
126 | if test -n "$a_utf8_locale" | |
127 | then | |
128 | test_set_prereq UTF8 | |
129 | else | |
130 | say "# UTF-8 locale not available, some tests are skipped" | |
131 | fi | |
132 | } |