Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 1 | . ./test-lib.sh |
| 2 | |
Nanako Shiraishi | 16805d3 | 2008-09-08 19:02:05 +0900 | [diff] [blame] | 3 | remotes_git_svn=remotes/git""-svn |
| 4 | git_svn_id=git""-svn-id |
| 5 | |
Eric Wong | 60d02cc | 2006-07-06 00:14:16 -0700 | [diff] [blame] | 6 | if test -n "$NO_SVN_TESTS" |
| 7 | then |
Ævar Arnfjörð Bjarmason | fadb515 | 2010-06-24 17:44:48 +0000 | [diff] [blame] | 8 | skip_all='skipping git svn tests, NO_SVN_TESTS defined' |
Eric Wong | 60d02cc | 2006-07-06 00:14:16 -0700 | [diff] [blame] | 9 | test_done |
Eric Wong | 60d02cc | 2006-07-06 00:14:16 -0700 | [diff] [blame] | 10 | fi |
Jeff King | 1b19ccd | 2009-04-03 15:33:59 -0400 | [diff] [blame] | 11 | if ! test_have_prereq PERL; then |
Ævar Arnfjörð Bjarmason | fadb515 | 2010-06-24 17:44:48 +0000 | [diff] [blame] | 12 | skip_all='skipping git svn tests, perl not available' |
Jeff King | 1b19ccd | 2009-04-03 15:33:59 -0400 | [diff] [blame] | 13 | test_done |
| 14 | fi |
Eric Wong | 60d02cc | 2006-07-06 00:14:16 -0700 | [diff] [blame] | 15 | |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 16 | GIT_DIR=$PWD/.git |
Adam Brewster | 6f5748e | 2009-08-11 23:14:27 -0400 | [diff] [blame] | 17 | GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn |
Eric Wong | a5e0ced | 2006-06-12 15:23:48 -0700 | [diff] [blame] | 18 | SVN_TREE=$GIT_SVN_DIR/svn-tree |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 19 | |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 20 | svn >/dev/null 2>&1 |
Junio C Hamano | 4b832e8 | 2006-07-07 03:17:16 -0700 | [diff] [blame] | 21 | if test $? -ne 1 |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 22 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 23 | skip_all='skipping git svn tests, svn not found' |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 24 | test_done |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 25 | fi |
| 26 | |
| 27 | svnrepo=$PWD/svnrepo |
Bryan Donlan | cdf3ec0 | 2008-05-04 01:37:57 -0400 | [diff] [blame] | 28 | export svnrepo |
Eygene Ryabinkin | da083d6 | 2009-05-08 12:06:16 +0400 | [diff] [blame] | 29 | svnconf=$PWD/svnconf |
| 30 | export svnconf |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 31 | |
Jeff King | 94221d2 | 2013-10-28 21:23:03 -0400 | [diff] [blame] | 32 | perl -w -e " |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 33 | use SVN::Core; |
| 34 | use SVN::Repos; |
| 35 | \$SVN::Core::VERSION gt '1.1.0' or exit(42); |
Bryan Donlan | cdf3ec0 | 2008-05-04 01:37:57 -0400 | [diff] [blame] | 36 | system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41); |
Shawn O. Pearce | 38434f2 | 2007-01-14 03:22:47 -0500 | [diff] [blame] | 37 | " >&3 2>&4 |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 38 | x=$? |
| 39 | if test $x -ne 0 |
Eric Wong | dc62e25 | 2006-06-28 03:07:14 -0700 | [diff] [blame] | 40 | then |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 41 | if test $x -eq 42; then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 42 | skip_all='Perl SVN libraries must be >= 1.1.0' |
Eric Wong | e66191f | 2007-01-13 02:47:53 -0800 | [diff] [blame] | 43 | elif test $x -eq 41; then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 44 | skip_all='svnadmin failed to create fsfs repository' |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 45 | else |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 46 | skip_all='Perl SVN libraries not found or unusable' |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 47 | fi |
Eric Wong | c6d499a | 2006-12-31 21:49:45 -0800 | [diff] [blame] | 48 | test_done |
Eric Wong | dc62e25 | 2006-06-28 03:07:14 -0700 | [diff] [blame] | 49 | fi |
| 50 | |
sam@vilain.net | 2edb9c5 | 2006-12-05 16:17:38 +1100 | [diff] [blame] | 51 | rawsvnrepo="$svnrepo" |
Eric Wong | e151611 | 2006-11-27 21:46:50 -0800 | [diff] [blame] | 52 | svnrepo="file://$svnrepo" |
Eric Wong | 36f5b1f | 2006-05-23 19:23:41 -0700 | [diff] [blame] | 53 | |
Michael Spang | 7b3fab8 | 2007-02-12 19:33:37 -0500 | [diff] [blame] | 54 | poke() { |
Eric Wong | 56cf980 | 2007-02-24 16:59:52 -0800 | [diff] [blame] | 55 | test-chmtime +1 "$1" |
Michael Spang | 7b3fab8 | 2007-02-12 19:33:37 -0500 | [diff] [blame] | 56 | } |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 57 | |
Eygene Ryabinkin | da083d6 | 2009-05-08 12:06:16 +0400 | [diff] [blame] | 58 | # We need this, because we should pass empty configuration directory to |
| 59 | # the 'svn commit' to avoid automated property changes and other stuff |
| 60 | # that could be set from user's configuration files in ~/.subversion. |
| 61 | svn_cmd () { |
| 62 | [ -d "$svnconf" ] || mkdir "$svnconf" |
| 63 | orig_svncmd="$1"; shift |
| 64 | if [ -z "$orig_svncmd" ]; then |
| 65 | svn |
| 66 | return |
| 67 | fi |
| 68 | svn "$orig_svncmd" --config-dir "$svnconf" "$@" |
| 69 | } |
| 70 | |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 71 | prepare_httpd () { |
Ramsay Jones | b6fe974 | 2010-12-14 18:22:29 +0000 | [diff] [blame] | 72 | for d in \ |
| 73 | "$SVN_HTTPD_PATH" \ |
| 74 | /usr/sbin/apache2 \ |
| 75 | /usr/sbin/httpd \ |
| 76 | ; do |
| 77 | if test -f "$d" |
| 78 | then |
| 79 | SVN_HTTPD_PATH="$d" |
| 80 | break |
| 81 | fi |
| 82 | done |
Ramsay Jones | cff484a | 2010-12-14 18:25:11 +0000 | [diff] [blame] | 83 | if test -z "$SVN_HTTPD_PATH" |
| 84 | then |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 85 | echo >&2 '*** error: Apache not found' |
| 86 | return 1 |
Ramsay Jones | cff484a | 2010-12-14 18:25:11 +0000 | [diff] [blame] | 87 | fi |
Ramsay Jones | b6fe974 | 2010-12-14 18:22:29 +0000 | [diff] [blame] | 88 | for d in \ |
| 89 | "$SVN_HTTPD_MODULE_PATH" \ |
| 90 | /usr/lib/apache2/modules \ |
| 91 | /usr/libexec/apache2 \ |
| 92 | ; do |
| 93 | if test -d "$d" |
| 94 | then |
| 95 | SVN_HTTPD_MODULE_PATH="$d" |
| 96 | break |
| 97 | fi |
| 98 | done |
Ramsay Jones | cff484a | 2010-12-14 18:25:11 +0000 | [diff] [blame] | 99 | if test -z "$SVN_HTTPD_MODULE_PATH" |
| 100 | then |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 101 | echo >&2 '*** error: Apache module dir not found' |
| 102 | return 1 |
Ramsay Jones | cff484a | 2010-12-14 18:25:11 +0000 | [diff] [blame] | 103 | fi |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 104 | if test ! -f "$SVN_HTTPD_MODULE_PATH/mod_dav_svn.so" |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 105 | then |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 106 | echo >&2 '*** error: Apache module "mod_dav_svn" not found' |
| 107 | return 1 |
Eric Wong | d1a8d0e | 2008-05-10 17:14:49 -0700 | [diff] [blame] | 108 | fi |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 109 | |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 110 | repo_base_path="${1-svn}" |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 111 | mkdir "$GIT_DIR"/logs |
| 112 | |
| 113 | cat > "$GIT_DIR/httpd.conf" <<EOF |
Nanako Shiraishi | 1364ff2 | 2008-09-08 19:02:08 +0900 | [diff] [blame] | 114 | ServerName "git svn test" |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 115 | ServerRoot "$GIT_DIR" |
| 116 | DocumentRoot "$GIT_DIR" |
| 117 | PidFile "$GIT_DIR/httpd.pid" |
Kevin Ballard | 3644da7 | 2008-03-21 03:27:35 -0400 | [diff] [blame] | 118 | LockFile logs/accept.lock |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 119 | Listen 127.0.0.1:$SVN_HTTPD_PORT |
| 120 | LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so |
| 121 | LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so |
Eric Wong | d1a8d0e | 2008-05-10 17:14:49 -0700 | [diff] [blame] | 122 | <Location /$repo_base_path> |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 123 | DAV svn |
Eric Wong | 3901a8c | 2008-07-14 02:13:56 -0700 | [diff] [blame] | 124 | SVNPath "$rawsvnrepo" |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 125 | </Location> |
| 126 | EOF |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 127 | } |
| 128 | |
| 129 | start_httpd () { |
| 130 | if test -z "$SVN_HTTPD_PORT" |
| 131 | then |
| 132 | echo >&2 'SVN_HTTPD_PORT is not defined!' |
| 133 | return |
| 134 | fi |
| 135 | |
| 136 | prepare_httpd "$1" || return 1 |
| 137 | |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 138 | "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k start |
Eric Wong | d1a8d0e | 2008-05-10 17:14:49 -0700 | [diff] [blame] | 139 | svnrepo="http://127.0.0.1:$SVN_HTTPD_PORT/$repo_base_path" |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 140 | } |
| 141 | |
| 142 | stop_httpd () { |
| 143 | test -z "$SVN_HTTPD_PORT" && return |
Ramsay Jones | 3aa3047 | 2010-12-30 19:44:48 +0000 | [diff] [blame] | 144 | test ! -f "$GIT_DIR/httpd.conf" && return |
Eric Wong | 29633bb | 2007-07-15 21:53:50 -0700 | [diff] [blame] | 145 | "$SVN_HTTPD_PATH" -f "$GIT_DIR"/httpd.conf -k stop |
| 146 | } |
Eric Wong | 060610c | 2007-12-08 23:27:41 -0800 | [diff] [blame] | 147 | |
| 148 | convert_to_rev_db () { |
Jeff King | 94221d2 | 2013-10-28 21:23:03 -0400 | [diff] [blame] | 149 | perl -w -- - "$@" <<\EOF |
Eric Wong | 060610c | 2007-12-08 23:27:41 -0800 | [diff] [blame] | 150 | use strict; |
David Aguilar | b978403 | 2013-02-24 14:48:39 -0800 | [diff] [blame] | 151 | @ARGV == 2 or die "usage: convert_to_rev_db <input> <output>"; |
Eric Wong | 060610c | 2007-12-08 23:27:41 -0800 | [diff] [blame] | 152 | open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]"; |
| 153 | open my $rd, '<', $ARGV[0] or die "$!: couldn't open: $ARGV[0]"; |
| 154 | my $size = (stat($rd))[7]; |
| 155 | ($size % 24) == 0 or die "Inconsistent size: $size"; |
| 156 | while (sysread($rd, my $buf, 24) == 24) { |
| 157 | my ($r, $c) = unpack('NH40', $buf); |
| 158 | my $offset = $r * 41; |
| 159 | seek $wr, 0, 2 or die $!; |
| 160 | my $pos = tell $wr; |
| 161 | if ($pos < $offset) { |
| 162 | for (1 .. (($offset - $pos) / 41)) { |
| 163 | print $wr (('0' x 40),"\n") or die $!; |
| 164 | } |
| 165 | } |
| 166 | seek $wr, $offset, 0 or die $!; |
| 167 | print $wr $c,"\n" or die $!; |
| 168 | } |
| 169 | close $wr or die $!; |
| 170 | close $rd or die $!; |
| 171 | EOF |
| 172 | } |
Alec Berryman | dd9da51 | 2008-09-14 17:14:15 -0400 | [diff] [blame] | 173 | |
| 174 | require_svnserve () { |
| 175 | if test -z "$SVNSERVE_PORT" |
| 176 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 177 | skip_all='skipping svnserve test. (set $SVNSERVE_PORT to enable)' |
Alec Berryman | dd9da51 | 2008-09-14 17:14:15 -0400 | [diff] [blame] | 178 | test_done |
Alec Berryman | dd9da51 | 2008-09-14 17:14:15 -0400 | [diff] [blame] | 179 | fi |
| 180 | } |
| 181 | |
| 182 | start_svnserve () { |
| 183 | svnserve --listen-port $SVNSERVE_PORT \ |
| 184 | --root "$rawsvnrepo" \ |
| 185 | --listen-once \ |
| 186 | --listen-host 127.0.0.1 & |
| 187 | } |
| 188 | |