80ad3573db3e5ea7befaacb14f95a0b87f0741ec
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Eric Wong
   4#
   5
   6
   7PATH=$PWD/../:$PATH
   8test_description='git-svn tests'
   9if test -d ../../../t
  10then
  11    cd ../../../t
  12else
  13    echo "Must be run in contrib/git-svn/t" >&2
  14    exit 1
  15fi
  16
  17. ./test-lib.sh
  18
  19GIT_DIR=$PWD/.git
  20GIT_SVN_DIR=$GIT_DIR/git-svn
  21SVN_TREE=$GIT_SVN_DIR/tree
  22
  23svnadmin >/dev/null 2>&1
  24if test $? != 1
  25then
  26    test_expect_success 'skipping contrib/git-svn test' :
  27    test_done
  28    exit
  29fi
  30
  31svn >/dev/null 2>&1
  32if test $? != 1
  33then
  34    test_expect_success 'skipping contrib/git-svn test' :
  35    test_done
  36    exit
  37fi
  38
  39svnrepo=$PWD/svnrepo
  40
  41set -e
  42
  43svnadmin create $svnrepo
  44svnrepo="file://$svnrepo/test-git-svn"
  45
  46mkdir import
  47
  48cd import
  49
  50echo foo > foo
  51ln -s foo foo.link
  52mkdir -p dir/a/b/c/d/e
  53echo 'deep dir' > dir/a/b/c/d/e/file
  54mkdir -p bar
  55echo 'zzz' > bar/zzz
  56echo '#!/bin/sh' > exec.sh
  57chmod +x exec.sh
  58svn import -m 'import for git-svn' . $svnrepo >/dev/null
  59
  60cd ..
  61
  62rm -rf import
  63
  64test_expect_success \
  65    'initialize git-svn' \
  66    "git-svn init $svnrepo"
  67
  68test_expect_success \
  69    'import an SVN revision into git' \
  70    'git-svn fetch'
  71
  72
  73name='try a deep --rmdir with a commit'
  74git checkout -b mybranch remotes/git-svn
  75mv dir/a/b/c/d/e/file dir/file
  76cp dir/file file
  77git update-index --add --remove dir/a/b/c/d/e/file dir/file file
  78git commit -m "$name"
  79
  80test_expect_success "$name" \
  81    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch &&
  82     test -d $SVN_TREE/dir && test ! -d $SVN_TREE/dir/a"
  83
  84
  85name='detect node change from file to directory #1'
  86mkdir dir/new_file
  87mv dir/file dir/new_file/file
  88mv dir/new_file dir/file
  89git update-index --remove dir/file
  90git update-index --add dir/file/file
  91git commit -m "$name"
  92
  93test_expect_code 1 "$name" \
  94    'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch' \
  95    || true
  96
  97
  98name='detect node change from directory to file #1'
  99rm -rf dir $GIT_DIR/index
 100git checkout -b mybranch2 remotes/git-svn
 101mv bar/zzz zzz
 102rm -rf bar
 103mv zzz bar
 104git update-index --remove -- bar/zzz
 105git update-index --add -- bar
 106git commit -m "$name"
 107
 108test_expect_code 1 "$name" \
 109    'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch2' \
 110    || true
 111
 112
 113name='detect node change from file to directory #2'
 114rm -f $GIT_DIR/index
 115git checkout -b mybranch3 remotes/git-svn
 116rm bar/zzz
 117git-update-index --remove bar/zzz
 118mkdir bar/zzz
 119echo yyy > bar/zzz/yyy
 120git-update-index --add bar/zzz/yyy
 121git commit -m "$name"
 122
 123test_expect_code 1 "$name" \
 124    'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch3' \
 125    || true
 126
 127
 128name='detect node change from directory to file #2'
 129rm -f $GIT_DIR/index
 130git checkout -b mybranch4 remotes/git-svn
 131rm -rf dir
 132git update-index --remove -- dir/file
 133touch dir
 134echo asdf > dir
 135git update-index --add -- dir
 136git commit -m "$name"
 137
 138test_expect_code 1 "$name" \
 139    'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch4' \
 140    || true
 141
 142
 143name='remove executable bit from a file'
 144rm -f $GIT_DIR/index
 145git checkout -b mybranch5 remotes/git-svn
 146chmod -x exec.sh
 147git update-index exec.sh
 148git commit -m "$name"
 149
 150test_expect_success "$name" \
 151    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
 152     test ! -x $SVN_TREE/exec.sh"
 153
 154
 155name='add executable bit back file'
 156chmod +x exec.sh
 157git update-index exec.sh
 158git commit -m "$name"
 159
 160test_expect_success "$name" \
 161    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
 162     test -x $SVN_TREE/exec.sh"
 163
 164
 165
 166name='executable file becomes a symlink to bar/zzz (file)'
 167rm exec.sh
 168ln -s bar/zzz exec.sh
 169git update-index exec.sh
 170git commit -m "$name"
 171
 172test_expect_success "$name" \
 173    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
 174     test -L $SVN_TREE/exec.sh"
 175
 176
 177
 178name='new symlink is added to a file that was also just made executable'
 179chmod +x bar/zzz
 180ln -s bar/zzz exec-2.sh
 181git update-index --add bar/zzz exec-2.sh
 182git commit -m "$name"
 183
 184test_expect_success "$name" \
 185    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
 186     test -x $SVN_TREE/bar/zzz &&
 187     test -L $SVN_TREE/exec-2.sh"
 188
 189
 190
 191name='modify a symlink to become a file'
 192git help > help || true
 193rm exec-2.sh
 194cp help exec-2.sh
 195git update-index exec-2.sh
 196git commit -m "$name"
 197
 198test_expect_success "$name" \
 199    "git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
 200     test -f $SVN_TREE/exec-2.sh &&
 201     test ! -L $SVN_TREE/exec-2.sh &&
 202     diff -u help $SVN_TREE/exec-2.sh"
 203
 204
 205
 206name='test fetch functionality (svn => git) with alternate GIT_SVN_ID'
 207GIT_SVN_ID=alt
 208export GIT_SVN_ID
 209test_expect_success "$name" \
 210    "git-svn init $svnrepo && git-svn fetch &&
 211     git-rev-list --pretty=raw remotes/git-svn | grep ^tree | uniq > a &&
 212     git-rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
 213     diff -u a b"
 214
 215test_done
 216