Merge git://git.bogomips.org/git-svn

* git://git.bogomips.org/git-svn: (25 commits)
  git-svn: rebuild convenience and bugfixes
  git-svn: svn (command-line) 1.0.x compatibility
  git-svn: tests no longer fail if LC_ALL is not a UTF-8 locale
  git-svn: bugfix and optimize the 'log' command
  git-svn: Eliminate temp file usage in libsvn_get_file()
  git-svn: fix several small bugs, enable branch optimization
  git-svn: avoid creating some small files
  git-svn: make the $GIT_DIR/svn/*/revs directory obsolete
  git-svn: add support for Perl SVN::* libraries
  git-svn: add 'log' command, a facsimile of basic `svn log'
  git-svn: add UTF-8 message test
  git-svn: add some functionality to better support branches in svn
  git-svn: add --shared and --template= options to pass to init-db
  git-svn: add --repack and --repack-flags= options
  git-svn: minor cleanups, extra error-checking
  git-svn: Move all git-svn-related paths into $GIT_DIR/svn
  git-svn: support manually placed initial trees from fetch
  git-svn: optimize --branch and --branch-all-ref
  git-svn: --branch-all-refs / -B support
  git-svn: support -C<num> passing to git-diff-tree
  ...
This commit is contained in:
Junio C Hamano 2006-06-16 22:33:28 -07:00
commit 5b139a66fc
5 changed files with 2147 additions and 294 deletions

View file

@ -29,8 +29,17 @@ git-svn.html : git-svn.txt
asciidoc -b xhtml11 -d manpage \
-f ../../Documentation/asciidoc.conf $<
test: git-svn
cd t && $(SHELL) ./t0000-contrib-git-svn.sh
cd t && $(SHELL) ./t0001-contrib-git-svn-props.sh
cd t && $(SHELL) ./t0000-contrib-git-svn.sh $(TEST_FLAGS)
cd t && $(SHELL) ./t0001-contrib-git-svn-props.sh $(TEST_FLAGS)
# we can test NO_OPTIMIZE_COMMITS independently of LC_ALL
full-test:
$(MAKE) test GIT_SVN_NO_LIB=1 GIT_SVN_NO_OPTIMIZE_COMMITS=1 LC_ALL=C
$(MAKE) test GIT_SVN_NO_LIB=0 GIT_SVN_NO_OPTIMIZE_COMMITS=1 LC_ALL=C
$(MAKE) test GIT_SVN_NO_LIB=1 GIT_SVN_NO_OPTIMIZE_COMMITS=0 \
LC_ALL=en_US.UTF-8
$(MAKE) test GIT_SVN_NO_LIB=0 GIT_SVN_NO_OPTIMIZE_COMMITS=0 \
LC_ALL=en_US.UTF-8
clean:
rm -f git-svn *.xml *.html *.1

File diff suppressed because it is too large Load diff

View file

@ -10,8 +10,8 @@ fi
. ./test-lib.sh
GIT_DIR=$PWD/.git
GIT_SVN_DIR=$GIT_DIR/git-svn
SVN_TREE=$GIT_SVN_DIR/tree
GIT_SVN_DIR=$GIT_DIR/svn/git-svn
SVN_TREE=$GIT_SVN_DIR/svn-tree
svnadmin >/dev/null 2>&1
if test $? != 1

View file

@ -4,13 +4,17 @@
#
test_description='git-svn tests'
GIT_SVN_LC_ALL=$LC_ALL
. ./lib-git-svn.sh
mkdir import
cd import
echo foo > foo
ln -s foo foo.link
if test -z "$NO_SYMLINK"
then
ln -s foo foo.link
fi
mkdir -p dir/a/b/c/d/e
echo 'deep dir' > dir/a/b/c/d/e/file
mkdir -p bar
@ -30,9 +34,10 @@ test_expect_success \
'import an SVN revision into git' \
'git-svn fetch'
test_expect_success "checkout from svn" "svn co $svnrepo $SVN_TREE"
name='try a deep --rmdir with a commit'
git checkout -b mybranch remotes/git-svn
git checkout -f -b mybranch remotes/git-svn
mv dir/a/b/c/d/e/file dir/file
cp dir/file file
git update-index --add --remove dir/a/b/c/d/e/file dir/file file
@ -40,6 +45,7 @@ git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch &&
svn up $SVN_TREE &&
test -d $SVN_TREE/dir && test ! -d $SVN_TREE/dir/a"
@ -51,14 +57,14 @@ git update-index --remove dir/file
git update-index --add dir/file/file
git commit -m "$name"
test_expect_code 1 "$name" \
test_expect_failure "$name" \
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch' \
|| true
name='detect node change from directory to file #1'
rm -rf dir $GIT_DIR/index
git checkout -b mybranch2 remotes/git-svn
git checkout -f -b mybranch2 remotes/git-svn
mv bar/zzz zzz
rm -rf bar
mv zzz bar
@ -66,14 +72,14 @@ git update-index --remove -- bar/zzz
git update-index --add -- bar
git commit -m "$name"
test_expect_code 1 "$name" \
test_expect_failure "$name" \
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch2' \
|| true
name='detect node change from file to directory #2'
rm -f $GIT_DIR/index
git checkout -b mybranch3 remotes/git-svn
git checkout -f -b mybranch3 remotes/git-svn
rm bar/zzz
git-update-index --remove bar/zzz
mkdir bar/zzz
@ -81,14 +87,14 @@ echo yyy > bar/zzz/yyy
git-update-index --add bar/zzz/yyy
git commit -m "$name"
test_expect_code 1 "$name" \
test_expect_failure "$name" \
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch3' \
|| true
name='detect node change from directory to file #2'
rm -f $GIT_DIR/index
git checkout -b mybranch4 remotes/git-svn
git checkout -f -b mybranch4 remotes/git-svn
rm -rf dir
git update-index --remove -- dir/file
touch dir
@ -96,20 +102,21 @@ echo asdf > dir
git update-index --add -- dir
git commit -m "$name"
test_expect_code 1 "$name" \
test_expect_failure "$name" \
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch4' \
|| true
name='remove executable bit from a file'
rm -f $GIT_DIR/index
git checkout -b mybranch5 remotes/git-svn
git checkout -f -b mybranch5 remotes/git-svn
chmod -x exec.sh
git update-index exec.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
svn up $SVN_TREE &&
test ! -x $SVN_TREE/exec.sh"
@ -120,49 +127,64 @@ git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
svn up $SVN_TREE &&
test -x $SVN_TREE/exec.sh"
name='executable file becomes a symlink to bar/zzz (file)'
rm exec.sh
ln -s bar/zzz exec.sh
git update-index exec.sh
git commit -m "$name"
if test -z "$NO_SYMLINK"
then
name='executable file becomes a symlink to bar/zzz (file)'
rm exec.sh
ln -s bar/zzz exec.sh
git update-index exec.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
test -L $SVN_TREE/exec.sh"
name='new symlink is added to a file that was also just made executable'
chmod +x bar/zzz
ln -s bar/zzz exec-2.sh
git update-index --add bar/zzz exec-2.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
test -x $SVN_TREE/bar/zzz &&
test -L $SVN_TREE/exec-2.sh"
name='modify a symlink to become a file'
git help > help || true
rm exec-2.sh
cp help exec-2.sh
git update-index exec-2.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
test -f $SVN_TREE/exec-2.sh &&
test ! -L $SVN_TREE/exec-2.sh &&
diff -u help $SVN_TREE/exec-2.sh"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
svn up $SVN_TREE &&
test -L $SVN_TREE/exec.sh"
name='new symlink is added to a file that was also just made executable'
chmod +x bar/zzz
ln -s bar/zzz exec-2.sh
git update-index --add bar/zzz exec-2.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
svn up $SVN_TREE &&
test -x $SVN_TREE/bar/zzz &&
test -L $SVN_TREE/exec-2.sh"
name='modify a symlink to become a file'
git help > help || true
rm exec-2.sh
cp help exec-2.sh
git update-index exec-2.sh
git commit -m "$name"
test_expect_success "$name" \
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
svn up $SVN_TREE &&
test -f $SVN_TREE/exec-2.sh &&
test ! -L $SVN_TREE/exec-2.sh &&
diff -u help $SVN_TREE/exec-2.sh"
fi
if test -n "$GIT_SVN_LC_ALL" && echo $GIT_SVN_LC_ALL | grep -q '\.UTF-8$'
then
name="commit with UTF-8 message: locale: $GIT_SVN_LC_ALL"
echo '# hello' >> exec-2.sh
git update-index exec-2.sh
git commit -m 'éï∏'
export LC_ALL="$GIT_SVN_LC_ALL"
test_expect_success "$name" "git-svn commit HEAD"
unset LC_ALL
else
echo "UTF-8 locale not set, test skipped ($GIT_SVN_LC_ALL)"
fi
name='test fetch functionality (svn => git) with alternate GIT_SVN_ID'
GIT_SVN_ID=alt
@ -173,5 +195,28 @@ test_expect_success "$name" \
git-rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
diff -u a b"
if test -n "$NO_SYMLINK"
then
test_done
exit 0
fi
name='check imported tree checksums expected tree checksums'
rm -f expected
if test -n "$GIT_SVN_LC_ALL" && echo $GIT_SVN_LC_ALL | grep -q '\.UTF-8$'
then
echo tree f735671b89a7eb30cab1d8597de35bd4271ab813 > expected
fi
cat >> expected <<\EOF
tree 4b9af72bb861eaed053854ec502cf7df72618f0f
tree 031b8d557afc6fea52894eaebb45bec52f1ba6d1
tree 0b094cbff17168f24c302e297f55bfac65eb8bd3
tree d667270a1f7b109f5eb3aaea21ede14b56bfdd6e
tree 56a30b966619b863674f5978696f4a3594f2fca9
tree d667270a1f7b109f5eb3aaea21ede14b56bfdd6e
tree 8f51f74cf0163afc9ad68a4b1537288c4558b5a4
EOF
test_expect_success "$name" "diff -u a expected"
test_done

View file

@ -52,49 +52,49 @@ EOF
cd ..
rm -rf import
svn co "$svnrepo" test_wc
test_expect_success 'checkout working copy from svn' "svn co $svnrepo test_wc"
test_expect_success 'setup some commits to svn' \
'cd test_wc &&
echo Greetings >> kw.c &&
svn commit -m "Not yet an Id" &&
svn up &&
echo Hello world >> kw.c &&
svn commit -m "Modified file, but still not yet an Id" &&
svn up &&
svn propset svn:keywords Id kw.c &&
svn commit -m "Propset Id" &&
svn up &&
cd ..'
cd test_wc
echo 'Greetings' >> kw.c
svn commit -m 'Not yet an $Id$'
svn up
test_expect_success 'initialize git-svn' "git-svn init $svnrepo"
test_expect_success 'fetch revisions from svn' 'git-svn fetch'
echo 'Hello world' >> kw.c
svn commit -m 'Modified file, but still not yet an $Id$'
svn up
svn propset svn:keywords Id kw.c
svn commit -m 'Propset $Id$'
svn up
cd ..
git-svn init "$svnrepo"
git-svn fetch
git checkout -b mybranch remotes/git-svn
echo 'Hi again' >> kw.c
name='test svn:keywords ignoring'
git commit -a -m "$name"
git-svn commit remotes/git-svn..mybranch
git pull . remotes/git-svn
test_expect_success "$name" \
'git checkout -b mybranch remotes/git-svn &&
echo Hi again >> kw.c &&
git commit -a -m "test keywoards ignoring" &&
git-svn commit remotes/git-svn..mybranch &&
git pull . remotes/git-svn'
expect='/* $Id$ */'
got="`sed -ne 2p kw.c`"
test_expect_success 'raw $Id$ found in kw.c' "test '$expect' = '$got'"
cd test_wc
svn propset svn:eol-style CR empty
svn propset svn:eol-style CR crlf
svn propset svn:eol-style CR ne_crlf
svn commit -m 'propset CR on crlf files'
svn up
cd ..
test_expect_success "propset CR on crlf files" \
'cd test_wc &&
svn propset svn:eol-style CR empty &&
svn propset svn:eol-style CR crlf &&
svn propset svn:eol-style CR ne_crlf &&
svn commit -m "propset CR on crlf files" &&
svn up &&
cd ..'
git-svn fetch
git pull . remotes/git-svn
test_expect_success 'fetch and pull latest from svn and checkout a new wc' \
"git-svn fetch &&
git pull . remotes/git-svn &&
svn co $svnrepo new_wc"
svn co "$svnrepo" new_wc
for i in crlf ne_crlf lf ne_lf cr ne_cr empty_cr empty_lf empty empty_crlf
do
test_expect_success "Comparing $i" "cmp $i new_wc/$i"
@ -106,16 +106,16 @@ cd test_wc
printf '$Id$\rHello\rWorld' > ne_cr
a_cr=`printf '$Id$\r\nHello\r\nWorld\r\n' | git-hash-object --stdin`
a_ne_cr=`printf '$Id$\r\nHello\r\nWorld' | git-hash-object --stdin`
svn propset svn:eol-style CRLF cr
svn propset svn:eol-style CRLF ne_cr
svn propset svn:keywords Id cr
svn propset svn:keywords Id ne_cr
svn commit -m 'propset CRLF on cr files'
svn up
test_expect_success 'Set CRLF on cr files' \
'svn propset svn:eol-style CRLF cr &&
svn propset svn:eol-style CRLF ne_cr &&
svn propset svn:keywords Id cr &&
svn propset svn:keywords Id ne_cr &&
svn commit -m "propset CRLF on cr files" &&
svn up'
cd ..
git-svn fetch
git pull . remotes/git-svn
test_expect_success 'fetch and pull latest from svn' \
'git-svn fetch && git pull . remotes/git-svn'
b_cr="`git-hash-object cr`"
b_ne_cr="`git-hash-object ne_cr`"