mirror of
https://github.com/git/git.git
synced 2024-11-17 14:34:49 +01:00
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:
commit
5b139a66fc
5 changed files with 2147 additions and 294 deletions
|
@ -29,8 +29,17 @@ git-svn.html : git-svn.txt
|
||||||
asciidoc -b xhtml11 -d manpage \
|
asciidoc -b xhtml11 -d manpage \
|
||||||
-f ../../Documentation/asciidoc.conf $<
|
-f ../../Documentation/asciidoc.conf $<
|
||||||
test: git-svn
|
test: git-svn
|
||||||
cd t && $(SHELL) ./t0000-contrib-git-svn.sh
|
cd t && $(SHELL) ./t0000-contrib-git-svn.sh $(TEST_FLAGS)
|
||||||
cd t && $(SHELL) ./t0001-contrib-git-svn-props.sh
|
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:
|
clean:
|
||||||
rm -f git-svn *.xml *.html *.1
|
rm -f git-svn *.xml *.html *.1
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -10,8 +10,8 @@ fi
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
GIT_DIR=$PWD/.git
|
GIT_DIR=$PWD/.git
|
||||||
GIT_SVN_DIR=$GIT_DIR/git-svn
|
GIT_SVN_DIR=$GIT_DIR/svn/git-svn
|
||||||
SVN_TREE=$GIT_SVN_DIR/tree
|
SVN_TREE=$GIT_SVN_DIR/svn-tree
|
||||||
|
|
||||||
svnadmin >/dev/null 2>&1
|
svnadmin >/dev/null 2>&1
|
||||||
if test $? != 1
|
if test $? != 1
|
||||||
|
|
|
@ -4,13 +4,17 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
test_description='git-svn tests'
|
test_description='git-svn tests'
|
||||||
|
GIT_SVN_LC_ALL=$LC_ALL
|
||||||
. ./lib-git-svn.sh
|
. ./lib-git-svn.sh
|
||||||
|
|
||||||
mkdir import
|
mkdir import
|
||||||
cd import
|
cd import
|
||||||
|
|
||||||
echo foo > foo
|
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
|
mkdir -p dir/a/b/c/d/e
|
||||||
echo 'deep dir' > dir/a/b/c/d/e/file
|
echo 'deep dir' > dir/a/b/c/d/e/file
|
||||||
mkdir -p bar
|
mkdir -p bar
|
||||||
|
@ -30,9 +34,10 @@ test_expect_success \
|
||||||
'import an SVN revision into git' \
|
'import an SVN revision into git' \
|
||||||
'git-svn fetch'
|
'git-svn fetch'
|
||||||
|
|
||||||
|
test_expect_success "checkout from svn" "svn co $svnrepo $SVN_TREE"
|
||||||
|
|
||||||
name='try a deep --rmdir with a commit'
|
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
|
mv dir/a/b/c/d/e/file dir/file
|
||||||
cp dir/file file
|
cp dir/file file
|
||||||
git update-index --add --remove dir/a/b/c/d/e/file 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" \
|
test_expect_success "$name" \
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch &&
|
"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"
|
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 update-index --add dir/file/file
|
||||||
git commit -m "$name"
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_code 1 "$name" \
|
test_expect_failure "$name" \
|
||||||
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch' \
|
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch' \
|
||||||
|| true
|
|| true
|
||||||
|
|
||||||
|
|
||||||
name='detect node change from directory to file #1'
|
name='detect node change from directory to file #1'
|
||||||
rm -rf dir $GIT_DIR/index
|
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
|
mv bar/zzz zzz
|
||||||
rm -rf bar
|
rm -rf bar
|
||||||
mv zzz bar
|
mv zzz bar
|
||||||
|
@ -66,14 +72,14 @@ git update-index --remove -- bar/zzz
|
||||||
git update-index --add -- bar
|
git update-index --add -- bar
|
||||||
git commit -m "$name"
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_code 1 "$name" \
|
test_expect_failure "$name" \
|
||||||
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch2' \
|
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch2' \
|
||||||
|| true
|
|| true
|
||||||
|
|
||||||
|
|
||||||
name='detect node change from file to directory #2'
|
name='detect node change from file to directory #2'
|
||||||
rm -f $GIT_DIR/index
|
rm -f $GIT_DIR/index
|
||||||
git checkout -b mybranch3 remotes/git-svn
|
git checkout -f -b mybranch3 remotes/git-svn
|
||||||
rm bar/zzz
|
rm bar/zzz
|
||||||
git-update-index --remove bar/zzz
|
git-update-index --remove bar/zzz
|
||||||
mkdir bar/zzz
|
mkdir bar/zzz
|
||||||
|
@ -81,14 +87,14 @@ echo yyy > bar/zzz/yyy
|
||||||
git-update-index --add bar/zzz/yyy
|
git-update-index --add bar/zzz/yyy
|
||||||
git commit -m "$name"
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_code 1 "$name" \
|
test_expect_failure "$name" \
|
||||||
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch3' \
|
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch3' \
|
||||||
|| true
|
|| true
|
||||||
|
|
||||||
|
|
||||||
name='detect node change from directory to file #2'
|
name='detect node change from directory to file #2'
|
||||||
rm -f $GIT_DIR/index
|
rm -f $GIT_DIR/index
|
||||||
git checkout -b mybranch4 remotes/git-svn
|
git checkout -f -b mybranch4 remotes/git-svn
|
||||||
rm -rf dir
|
rm -rf dir
|
||||||
git update-index --remove -- dir/file
|
git update-index --remove -- dir/file
|
||||||
touch dir
|
touch dir
|
||||||
|
@ -96,20 +102,21 @@ echo asdf > dir
|
||||||
git update-index --add -- dir
|
git update-index --add -- dir
|
||||||
git commit -m "$name"
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_code 1 "$name" \
|
test_expect_failure "$name" \
|
||||||
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch4' \
|
'git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch4' \
|
||||||
|| true
|
|| true
|
||||||
|
|
||||||
|
|
||||||
name='remove executable bit from a file'
|
name='remove executable bit from a file'
|
||||||
rm -f $GIT_DIR/index
|
rm -f $GIT_DIR/index
|
||||||
git checkout -b mybranch5 remotes/git-svn
|
git checkout -f -b mybranch5 remotes/git-svn
|
||||||
chmod -x exec.sh
|
chmod -x exec.sh
|
||||||
git update-index exec.sh
|
git update-index exec.sh
|
||||||
git commit -m "$name"
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_success "$name" \
|
test_expect_success "$name" \
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
||||||
|
svn up $SVN_TREE &&
|
||||||
test ! -x $SVN_TREE/exec.sh"
|
test ! -x $SVN_TREE/exec.sh"
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,49 +127,64 @@ git commit -m "$name"
|
||||||
|
|
||||||
test_expect_success "$name" \
|
test_expect_success "$name" \
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
||||||
|
svn up $SVN_TREE &&
|
||||||
test -x $SVN_TREE/exec.sh"
|
test -x $SVN_TREE/exec.sh"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
name='executable file becomes a symlink to bar/zzz (file)'
|
if test -z "$NO_SYMLINK"
|
||||||
rm exec.sh
|
then
|
||||||
ln -s bar/zzz exec.sh
|
name='executable file becomes a symlink to bar/zzz (file)'
|
||||||
git update-index exec.sh
|
rm exec.sh
|
||||||
git commit -m "$name"
|
ln -s bar/zzz exec.sh
|
||||||
|
git update-index exec.sh
|
||||||
|
git commit -m "$name"
|
||||||
|
|
||||||
test_expect_success "$name" \
|
test_expect_success "$name" \
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
||||||
test -L $SVN_TREE/exec.sh"
|
svn up $SVN_TREE &&
|
||||||
|
test -L $SVN_TREE/exec.sh"
|
||||||
|
|
||||||
|
name='new symlink is added to a file that was also just made executable'
|
||||||
name='new symlink is added to a file that was also just made executable'
|
chmod +x bar/zzz
|
||||||
chmod +x bar/zzz
|
ln -s bar/zzz exec-2.sh
|
||||||
ln -s bar/zzz exec-2.sh
|
git update-index --add bar/zzz exec-2.sh
|
||||||
git update-index --add bar/zzz exec-2.sh
|
git commit -m "$name"
|
||||||
git commit -m "$name"
|
|
||||||
|
test_expect_success "$name" \
|
||||||
test_expect_success "$name" \
|
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
svn up $SVN_TREE &&
|
||||||
test -x $SVN_TREE/bar/zzz &&
|
test -x $SVN_TREE/bar/zzz &&
|
||||||
test -L $SVN_TREE/exec-2.sh"
|
test -L $SVN_TREE/exec-2.sh"
|
||||||
|
|
||||||
|
name='modify a symlink to become a file'
|
||||||
|
git help > help || true
|
||||||
name='modify a symlink to become a file'
|
rm exec-2.sh
|
||||||
git help > help || true
|
cp help exec-2.sh
|
||||||
rm exec-2.sh
|
git update-index exec-2.sh
|
||||||
cp help exec-2.sh
|
git commit -m "$name"
|
||||||
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_expect_success "$name" \
|
svn up $SVN_TREE &&
|
||||||
"git-svn commit --find-copies-harder --rmdir remotes/git-svn..mybranch5 &&
|
test -f $SVN_TREE/exec-2.sh &&
|
||||||
test -f $SVN_TREE/exec-2.sh &&
|
test ! -L $SVN_TREE/exec-2.sh &&
|
||||||
test ! -L $SVN_TREE/exec-2.sh &&
|
diff -u help $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'
|
name='test fetch functionality (svn => git) with alternate GIT_SVN_ID'
|
||||||
GIT_SVN_ID=alt
|
GIT_SVN_ID=alt
|
||||||
|
@ -173,5 +195,28 @@ test_expect_success "$name" \
|
||||||
git-rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
|
git-rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
|
||||||
diff -u a 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
|
test_done
|
||||||
|
|
||||||
|
|
|
@ -52,49 +52,49 @@ EOF
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
rm -rf import
|
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
|
test_expect_success 'initialize git-svn' "git-svn init $svnrepo"
|
||||||
echo 'Greetings' >> kw.c
|
test_expect_success 'fetch revisions from svn' 'git-svn fetch'
|
||||||
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 ..
|
|
||||||
|
|
||||||
git-svn init "$svnrepo"
|
|
||||||
git-svn fetch
|
|
||||||
|
|
||||||
git checkout -b mybranch remotes/git-svn
|
|
||||||
echo 'Hi again' >> kw.c
|
|
||||||
name='test svn:keywords ignoring'
|
name='test svn:keywords ignoring'
|
||||||
|
test_expect_success "$name" \
|
||||||
git commit -a -m "$name"
|
'git checkout -b mybranch remotes/git-svn &&
|
||||||
git-svn commit remotes/git-svn..mybranch
|
echo Hi again >> kw.c &&
|
||||||
git pull . remotes/git-svn
|
git commit -a -m "test keywoards ignoring" &&
|
||||||
|
git-svn commit remotes/git-svn..mybranch &&
|
||||||
|
git pull . remotes/git-svn'
|
||||||
|
|
||||||
expect='/* $Id$ */'
|
expect='/* $Id$ */'
|
||||||
got="`sed -ne 2p kw.c`"
|
got="`sed -ne 2p kw.c`"
|
||||||
test_expect_success 'raw $Id$ found in kw.c' "test '$expect' = '$got'"
|
test_expect_success 'raw $Id$ found in kw.c' "test '$expect' = '$got'"
|
||||||
|
|
||||||
cd test_wc
|
test_expect_success "propset CR on crlf files" \
|
||||||
svn propset svn:eol-style CR empty
|
'cd test_wc &&
|
||||||
svn propset svn:eol-style CR crlf
|
svn propset svn:eol-style CR empty &&
|
||||||
svn propset svn:eol-style CR ne_crlf
|
svn propset svn:eol-style CR crlf &&
|
||||||
svn commit -m 'propset CR on crlf files'
|
svn propset svn:eol-style CR ne_crlf &&
|
||||||
svn up
|
svn commit -m "propset CR on crlf files" &&
|
||||||
cd ..
|
svn up &&
|
||||||
|
cd ..'
|
||||||
|
|
||||||
git-svn fetch
|
test_expect_success 'fetch and pull latest from svn and checkout a new wc' \
|
||||||
git pull . remotes/git-svn
|
"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
|
for i in crlf ne_crlf lf ne_lf cr ne_cr empty_cr empty_lf empty empty_crlf
|
||||||
do
|
do
|
||||||
test_expect_success "Comparing $i" "cmp $i new_wc/$i"
|
test_expect_success "Comparing $i" "cmp $i new_wc/$i"
|
||||||
|
@ -106,16 +106,16 @@ cd test_wc
|
||||||
printf '$Id$\rHello\rWorld' > ne_cr
|
printf '$Id$\rHello\rWorld' > ne_cr
|
||||||
a_cr=`printf '$Id$\r\nHello\r\nWorld\r\n' | git-hash-object --stdin`
|
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`
|
a_ne_cr=`printf '$Id$\r\nHello\r\nWorld' | git-hash-object --stdin`
|
||||||
svn propset svn:eol-style CRLF cr
|
test_expect_success 'Set CRLF on cr files' \
|
||||||
svn propset svn:eol-style CRLF ne_cr
|
'svn propset svn:eol-style CRLF cr &&
|
||||||
svn propset svn:keywords Id cr
|
svn propset svn:eol-style CRLF ne_cr &&
|
||||||
svn propset svn:keywords Id ne_cr
|
svn propset svn:keywords Id cr &&
|
||||||
svn commit -m 'propset CRLF on cr files'
|
svn propset svn:keywords Id ne_cr &&
|
||||||
svn up
|
svn commit -m "propset CRLF on cr files" &&
|
||||||
|
svn up'
|
||||||
cd ..
|
cd ..
|
||||||
|
test_expect_success 'fetch and pull latest from svn' \
|
||||||
git-svn fetch
|
'git-svn fetch && git pull . remotes/git-svn'
|
||||||
git pull . remotes/git-svn
|
|
||||||
|
|
||||||
b_cr="`git-hash-object cr`"
|
b_cr="`git-hash-object cr`"
|
||||||
b_ne_cr="`git-hash-object ne_cr`"
|
b_ne_cr="`git-hash-object ne_cr`"
|
||||||
|
|
Loading…
Reference in a new issue