Fix tests breaking when checkout path contains shell metacharacters

This fixes the remainder of the issues where the test script itself is at
fault for failing when the git checkout path contains whitespace or other
shell metacharacters.

The majority of git svn tests used the idiom

  test_expect_success "title" "test script using $svnrepo"

These were changed to have the test script in single-quotes:

  test_expect_success "title" 'test script using "$svnrepo"'

which unfortunately makes the patch appear larger than it really is.

One consequence of this change is that in the verbose test output the
value of $svnrepo (and in some cases other variables, too) is no
longer expanded, i.e. previously we saw

  * expecting success:
	test script using /path/to/git/t/trash/svnrepo

but now it is:

  * expecting success:
	test script using "$svnrepo"

Signed-off-by: Bryan Donlan <bdonlan@fushizen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Bryan Donlan 2008-05-04 01:37:59 -04:00 committed by Junio C Hamano
parent 0e46e70462
commit f69e836fab
39 changed files with 475 additions and 469 deletions

View File

@ -305,10 +305,10 @@ test_expect_success 'absolute path works as expected' '
file="$dir"/index && file="$dir"/index &&
test "$file" = "$(test-absolute-path $dir2/index)" && test "$file" = "$(test-absolute-path $dir2/index)" &&
basename=blub && basename=blub &&
test "$dir/$basename" = $(cd .git && test-absolute-path $basename) && test "$dir/$basename" = "$(cd .git && test-absolute-path "$basename")" &&
ln -s ../first/file .git/syml && ln -s ../first/file .git/syml &&
sym="$(cd first; pwd -P)"/file && sym="$(cd first; pwd -P)"/file &&
test "$sym" = "$(test-absolute-path $dir2/syml)" test "$sym" = "$(test-absolute-path "$dir2/syml")"
' '
test_expect_success 'very long name in the index handled sanely' ' test_expect_success 'very long name in the index handled sanely' '

View File

@ -21,7 +21,7 @@ LF='
' '
test_expect_success 'update-index and ls-files' ' test_expect_success 'update-index and ls-files' '
cd $HERE && cd "$HERE" &&
git update-index --add one && git update-index --add one &&
case "`git ls-files`" in case "`git ls-files`" in
one) echo ok one ;; one) echo ok one ;;
@ -41,7 +41,7 @@ test_expect_success 'update-index and ls-files' '
' '
test_expect_success 'cat-file' ' test_expect_success 'cat-file' '
cd $HERE && cd "$HERE" &&
two=`git ls-files -s dir/two` && two=`git ls-files -s dir/two` &&
two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` && two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
echo "$two" && echo "$two" &&
@ -54,7 +54,7 @@ test_expect_success 'cat-file' '
rm -f actual dir/actual rm -f actual dir/actual
test_expect_success 'diff-files' ' test_expect_success 'diff-files' '
cd $HERE && cd "$HERE" &&
echo a >>one && echo a >>one &&
echo d >>dir/two && echo d >>dir/two &&
case "`git diff-files --name-only`" in case "`git diff-files --name-only`" in
@ -74,7 +74,7 @@ test_expect_success 'diff-files' '
' '
test_expect_success 'write-tree' ' test_expect_success 'write-tree' '
cd $HERE && cd "$HERE" &&
top=`git write-tree` && top=`git write-tree` &&
echo $top && echo $top &&
cd dir && cd dir &&
@ -84,7 +84,7 @@ test_expect_success 'write-tree' '
' '
test_expect_success 'checkout-index' ' test_expect_success 'checkout-index' '
cd $HERE && cd "$HERE" &&
git checkout-index -f -u one && git checkout-index -f -u one &&
cmp one original.one && cmp one original.one &&
cd dir && cd dir &&
@ -93,7 +93,7 @@ test_expect_success 'checkout-index' '
' '
test_expect_success 'read-tree' ' test_expect_success 'read-tree' '
cd $HERE && cd "$HERE" &&
rm -f one dir/two && rm -f one dir/two &&
tree=`git write-tree` && tree=`git write-tree` &&
git read-tree --reset -u "$tree" && git read-tree --reset -u "$tree" &&
@ -107,27 +107,27 @@ test_expect_success 'read-tree' '
' '
test_expect_success 'no file/rev ambiguity check inside .git' ' test_expect_success 'no file/rev ambiguity check inside .git' '
cd $HERE && cd "$HERE" &&
git commit -a -m 1 && git commit -a -m 1 &&
cd $HERE/.git && cd "$HERE"/.git &&
git show -s HEAD git show -s HEAD
' '
test_expect_success 'no file/rev ambiguity check inside a bare repo' ' test_expect_success 'no file/rev ambiguity check inside a bare repo' '
cd $HERE && cd "$HERE" &&
git clone -s --bare .git foo.git && git clone -s --bare .git foo.git &&
cd foo.git && GIT_DIR=. git show -s HEAD cd foo.git && GIT_DIR=. git show -s HEAD
' '
# This still does not work as it should... # This still does not work as it should...
: test_expect_success 'no file/rev ambiguity check inside a bare repo' ' : test_expect_success 'no file/rev ambiguity check inside a bare repo' '
cd $HERE && cd "$HERE" &&
git clone -s --bare .git foo.git && git clone -s --bare .git foo.git &&
cd foo.git && git show -s HEAD cd foo.git && git show -s HEAD
' '
test_expect_success 'detection should not be fooled by a symlink' ' test_expect_success 'detection should not be fooled by a symlink' '
cd $HERE && cd "$HERE" &&
rm -fr foo.git && rm -fr foo.git &&
git clone -s .git another && git clone -s .git another &&
ln -s another yetanother && ln -s another yetanother &&

View File

@ -20,7 +20,7 @@ test_expect_success setup '
' '
test_expect_success clone ' test_expect_success clone '
git clone file://`pwd`/.git cloned && git clone "file://$(pwd)/.git" cloned &&
(git rev-parse HEAD; git ls-files -s) >expected && (git rev-parse HEAD; git ls-files -s) >expected &&
( (
cd cloned && cd cloned &&

View File

@ -91,9 +91,8 @@ for line in $FAKE_LINES; do
done done
EOF EOF
test_set_editor "$(pwd)/fake-editor.sh"
chmod a+x fake-editor.sh chmod a+x fake-editor.sh
VISUAL="$(pwd)/fake-editor.sh"
export VISUAL
test_expect_success 'no changes are a nop' ' test_expect_success 'no changes are a nop' '
git rebase -i F && git rebase -i F &&

View File

@ -129,7 +129,7 @@ pull_to_client 2nd "B" $((64*3))
pull_to_client 3rd "A" $((1*3)) # old fails pull_to_client 3rd "A" $((1*3)) # old fails
test_expect_success "clone shallow" "git-clone --depth 2 file://`pwd`/. shallow" test_expect_success "clone shallow" 'git-clone --depth 2 "file://$(pwd)/." shallow'
(cd shallow; git count-objects -v) > count.shallow (cd shallow; git count-objects -v) > count.shallow

View File

@ -17,7 +17,7 @@ test_expect_success setup '
git show-ref -d | sed -e "s/ / /" git show-ref -d | sed -e "s/ / /"
) >expected.all && ) >expected.all &&
git remote add self $(pwd)/.git git remote add self "$(pwd)/.git"
' '

View File

@ -105,7 +105,7 @@ test_expect_success 'fetch with insteadOf' '
( (
TRASH=$(pwd)/ && TRASH=$(pwd)/ &&
cd testrepo && cd testrepo &&
git config url.$TRASH.insteadOf trash/ git config "url.$TRASH.insteadOf" trash/ &&
git config remote.up.url trash/. && git config remote.up.url trash/. &&
git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" && git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" &&
git fetch up && git fetch up &&
@ -145,8 +145,8 @@ test_expect_success 'push with wildcard' '
test_expect_success 'push with insteadOf' ' test_expect_success 'push with insteadOf' '
mk_empty && mk_empty &&
TRASH=$(pwd)/ && TRASH="$(pwd)/" &&
git config url.$TRASH.insteadOf trash/ && git config "url./$TRASH/.insteadOf" trash/ &&
git push trash/testrepo refs/heads/master:refs/remotes/origin/master && git push trash/testrepo refs/heads/master:refs/remotes/origin/master &&
( (
cd testrepo && cd testrepo &&

View File

@ -51,7 +51,7 @@ diff expected current'
cd "$base_dir" cd "$base_dir"
test_expect_success 'cloning with reference (no -l -s)' \ test_expect_success 'cloning with reference (no -l -s)' \
'git clone --reference B file://`pwd`/A D' 'git clone --reference B "file://$(pwd)/A" D'
cd "$base_dir" cd "$base_dir"

View File

@ -81,9 +81,9 @@ test_valid_repo'
cd "$base_dir" cd "$base_dir"
test_expect_success 'breaking of loops' \ test_expect_success 'breaking of loops' \
"echo '$base_dir/B/.git/objects' >> '$base_dir'/A/.git/objects/info/alternates&& 'echo "$base_dir"/B/.git/objects >> "$base_dir"/A/.git/objects/info/alternates&&
cd C && cd C &&
test_valid_repo" test_valid_repo'
cd "$base_dir" cd "$base_dir"

View File

@ -125,7 +125,7 @@ test_expect_success 'use index-filter to move into a subdirectory' '
"git ls-files -s | sed \"s-\\t-&newsubdir/-\" | "git ls-files -s | sed \"s-\\t-&newsubdir/-\" |
GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \ GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \
git update-index --index-info && git update-index --index-info &&
mv \$GIT_INDEX_FILE.new \$GIT_INDEX_FILE" directorymoved && mv \"\$GIT_INDEX_FILE.new\" \"\$GIT_INDEX_FILE\"" directorymoved &&
test -z "$(git diff HEAD directorymoved:newsubdir)"' test -z "$(git diff HEAD directorymoved:newsubdir)"'
test_expect_success 'stops when msg filter fails' ' test_expect_success 'stops when msg filter fails' '

View File

@ -122,7 +122,7 @@ test_expect_success 'commit using absolute path names' '
test_expect_success 'log using absolute path names' ' test_expect_success 'log using absolute path names' '
echo bb >>a/b/c/d && echo bb >>a/b/c/d &&
git commit -m "bb" $(pwd)/a/b/c/d && git commit -m "bb" "$(pwd)/a/b/c/d" &&
git log a/b/c/d >f1.txt && git log a/b/c/d >f1.txt &&
git log "$(pwd)/a/b/c/d" >f2.txt && git log "$(pwd)/a/b/c/d" >f2.txt &&

View File

@ -112,7 +112,7 @@ test_expect_success 'git-clean with absolute path' '
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
would_clean=$( would_clean=$(
cd docs && cd docs &&
git clean -n $(pwd)/../src | git clean -n "$(pwd)/../src" |
sed -n -e "s|^Would remove ||p" sed -n -e "s|^Would remove ||p"
) && ) &&
test "$would_clean" = ../src/part3.c || { test "$would_clean" = ../src/part3.c || {

View File

@ -79,8 +79,8 @@ test_expect_success \
cat >editor <<\EOF cat >editor <<\EOF
#!/bin/sh #!/bin/sh
sed -e "s/a file/an amend commit/g" < $1 > $1- sed -e "s/a file/an amend commit/g" < "$1" > "$1-"
mv $1- $1 mv "$1-" "$1"
EOF EOF
chmod 755 editor chmod 755 editor
@ -99,8 +99,8 @@ test_expect_success \
cat >editor <<\EOF cat >editor <<\EOF
#!/bin/sh #!/bin/sh
sed -e "s/amend/older/g" < $1 > $1- sed -e "s/amend/older/g" < "$1" > "$1-"
mv $1- $1 mv "$1-" "$1"
EOF EOF
chmod 755 editor chmod 755 editor

View File

@ -19,6 +19,9 @@ cp FAKE_MSG "$1"
exit 0 exit 0
EOF EOF
chmod +x fake-editor chmod +x fake-editor
## Not using test_set_editor here so we can easily ensure the editor variable
## is only set for the editor tests
FAKE_EDITOR="$(pwd)/fake-editor" FAKE_EDITOR="$(pwd)/fake-editor"
export FAKE_EDITOR export FAKE_EDITOR
@ -27,7 +30,7 @@ test_expect_success 'with no hook (editor)' '
echo "more foo" >> file && echo "more foo" >> file &&
git add file && git add file &&
echo "more foo" > FAKE_MSG && echo "more foo" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
' '
@ -44,7 +47,7 @@ test_expect_success '--no-verify with no hook (editor)' '
echo "more bar" > file && echo "more bar" > file &&
git add file && git add file &&
echo "more bar" > FAKE_MSG && echo "more bar" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
' '
@ -71,7 +74,7 @@ test_expect_success 'with succeeding hook (editor)' '
echo "more more" >> file && echo "more more" >> file &&
git add file && git add file &&
echo "more more" > FAKE_MSG && echo "more more" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
' '
@ -88,7 +91,7 @@ test_expect_success '--no-verify with succeeding hook (editor)' '
echo "even more more" >> file && echo "even more more" >> file &&
git add file && git add file &&
echo "even more more" > FAKE_MSG && echo "even more more" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
' '
@ -111,7 +114,7 @@ test_expect_success 'with failing hook (editor)' '
echo "more another" >> file && echo "more another" >> file &&
git add file && git add file &&
echo "more another" > FAKE_MSG && echo "more another" > FAKE_MSG &&
! (GIT_EDITOR="$FAKE_EDITOR" git commit) ! (GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit)
' '
@ -128,7 +131,7 @@ test_expect_success '--no-verify with failing hook (editor)' '
echo "more stuff" >> file && echo "more stuff" >> file &&
git add file && git add file &&
echo "more stuff" > FAKE_MSG && echo "more stuff" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
' '
@ -146,7 +149,7 @@ test_expect_success 'with non-executable hook (editor)' '
echo "content again" >> file && echo "content again" >> file &&
git add file && git add file &&
echo "content again" > FAKE_MSG && echo "content again" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit -m "content again" GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -m "content again"
' '
@ -163,7 +166,7 @@ test_expect_success '--no-verify with non-executable hook (editor)' '
echo "even more content" >> file && echo "even more content" >> file &&
git add file && git add file &&
echo "even more content" > FAKE_MSG && echo "even more content" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
' '
@ -193,7 +196,7 @@ test_expect_success 'hook edits commit message (editor)' '
echo "additional content" >> file && echo "additional content" >> file &&
git add file && git add file &&
echo "additional content" > FAKE_MSG && echo "additional content" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
commit_msg_is "new message" commit_msg_is "new message"
' '
@ -212,7 +215,7 @@ test_expect_success "hook doesn't edit commit message (editor)" '
echo "more plus" >> file && echo "more plus" >> file &&
git add file && git add file &&
echo "more plus" > FAKE_MSG && echo "more plus" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
commit_msg_is "more plus" commit_msg_is "more plus"
' '

View File

@ -18,6 +18,9 @@ cat > fake-editor <<'EOF'
exit 0 exit 0
EOF EOF
chmod +x fake-editor chmod +x fake-editor
## Not using test_set_editor here so we can easily ensure the editor variable
## is only set for the editor tests
FAKE_EDITOR="$(pwd)/fake-editor" FAKE_EDITOR="$(pwd)/fake-editor"
export FAKE_EDITOR export FAKE_EDITOR
@ -58,7 +61,7 @@ test_expect_success 'with hook (-m editor)' '
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
GIT_EDITOR="$FAKE_EDITOR" git commit -e -m "more more" && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -e -m "more more" &&
test "`git log -1 --pretty=format:%s`" = message test "`git log -1 --pretty=format:%s`" = message
' '
@ -85,7 +88,7 @@ test_expect_success 'with hook (-F editor)' '
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
(echo more more | GIT_EDITOR="$FAKE_EDITOR" git commit -e -F -) && (echo more more | GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -e -F -) &&
test "`git log -1 --pretty=format:%s`" = message test "`git log -1 --pretty=format:%s`" = message
' '
@ -104,7 +107,7 @@ test_expect_success 'with hook (editor)' '
echo "more more" >> file && echo "more more" >> file &&
git add file && git add file &&
GIT_EDITOR="$FAKE_EDITOR" git commit && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
test "`git log -1 --pretty=format:%s`" = default test "`git log -1 --pretty=format:%s`" = default
' '
@ -114,7 +117,7 @@ test_expect_success 'with hook (--amend)' '
head=`git rev-parse HEAD` && head=`git rev-parse HEAD` &&
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
GIT_EDITOR="$FAKE_EDITOR" git commit --amend && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --amend &&
test "`git log -1 --pretty=format:%s`" = "$head" test "`git log -1 --pretty=format:%s`" = "$head"
' '
@ -124,7 +127,7 @@ test_expect_success 'with hook (-c)' '
head=`git rev-parse HEAD` && head=`git rev-parse HEAD` &&
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
GIT_EDITOR="$FAKE_EDITOR" git commit -c $head && GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -c $head &&
test "`git log -1 --pretty=format:%s`" = "$head" test "`git log -1 --pretty=format:%s`" = "$head"
' '
@ -139,7 +142,7 @@ test_expect_success 'with failing hook' '
head=`git rev-parse HEAD` && head=`git rev-parse HEAD` &&
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
! GIT_EDITOR="$FAKE_EDITOR" git commit -c $head ! GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -c $head
' '
@ -148,7 +151,7 @@ test_expect_success 'with failing hook (--no-verify)' '
head=`git rev-parse HEAD` && head=`git rev-parse HEAD` &&
echo "more" >> file && echo "more" >> file &&
git add file && git add file &&
! GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify -c $head ! GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify -c $head
' '

View File

@ -20,39 +20,39 @@ esac
echo 'define NO_SVN_TESTS to skip git-svn tests' echo 'define NO_SVN_TESTS to skip git-svn tests'
test_expect_success \ test_expect_success \
'initialize git-svn' " 'initialize git-svn' '
mkdir import && mkdir import &&
cd import && cd import &&
echo foo > foo && echo foo > foo &&
ln -s foo foo.link ln -s foo foo.link
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 bar && mkdir bar &&
echo 'zzz' > bar/zzz && echo "zzz" > bar/zzz &&
echo '#!/bin/sh' > exec.sh && echo "#!/bin/sh" > exec.sh &&
chmod +x exec.sh && chmod +x exec.sh &&
svn import -m 'import for git-svn' . $svnrepo >/dev/null && svn import -m "import for git-svn" . "$svnrepo" >/dev/null &&
cd .. && cd .. &&
rm -rf import && rm -rf import &&
git-svn init $svnrepo" git-svn init "$svnrepo"'
test_expect_success \ 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'" 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'
test_expect_success "$name" " test_expect_success "$name" '
git checkout -f -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 &&
git commit -m '$name' && git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch && remotes/git-svn..mybranch &&
svn up '$SVN_TREE' && 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'
name='detect node change from file to directory #1' name='detect node change from file to directory #1'
@ -68,108 +68,108 @@ test_expect_success "$name" "
name='detect node change from directory to file #1' name='detect node change from directory to file #1'
test_expect_success "$name" " test_expect_success "$name" '
rm -rf dir '$GIT_DIR'/index && rm -rf dir "$GIT_DIR"/index &&
git checkout -f -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 &&
git update-index --remove -- bar/zzz && git update-index --remove -- bar/zzz &&
git update-index --add -- bar && git update-index --add -- bar &&
git commit -m '$name' && git commit -m "$name" &&
! git-svn set-tree --find-copies-harder --rmdir \ ! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch2" || true remotes/git-svn..mybranch2' || true
name='detect node change from file to directory #2' name='detect node change from file to directory #2'
test_expect_success "$name" " test_expect_success "$name" '
rm -f '$GIT_DIR'/index && rm -f "$GIT_DIR"/index &&
git checkout -f -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 &&
echo yyy > bar/zzz/yyy && 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" &&
! git-svn set-tree --find-copies-harder --rmdir \ ! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch3" || true remotes/git-svn..mybranch3' || true
name='detect node change from directory to file #2' name='detect node change from directory to file #2'
test_expect_success "$name" " test_expect_success "$name" '
rm -f '$GIT_DIR'/index && rm -f "$GIT_DIR"/index &&
git checkout -f -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 &&
echo asdf > dir && echo asdf > dir &&
git update-index --add -- dir && git update-index --add -- dir &&
git commit -m '$name' && git commit -m "$name" &&
! git-svn set-tree --find-copies-harder --rmdir \ ! git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch4" || true remotes/git-svn..mybranch4' || true
name='remove executable bit from a file' name='remove executable bit from a file'
test_expect_success "$name" " test_expect_success "$name" '
rm -f '$GIT_DIR'/index && rm -f "$GIT_DIR"/index &&
git checkout -f -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" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 && remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' && svn up "$SVN_TREE" &&
test ! -x '$SVN_TREE'/exec.sh" test ! -x "$SVN_TREE"/exec.sh'
name='add executable bit back file' name='add executable bit back file'
test_expect_success "$name" " test_expect_success "$name" '
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" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 && remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' && 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)' name='executable file becomes a symlink to bar/zzz (file)'
test_expect_success "$name" " test_expect_success "$name" '
rm exec.sh && rm exec.sh &&
ln -s bar/zzz exec.sh && ln -s bar/zzz exec.sh &&
git update-index exec.sh && git update-index exec.sh &&
git commit -m '$name' && git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 && remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' && svn up "$SVN_TREE" &&
test -L '$SVN_TREE'/exec.sh" 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'
test_expect_success "$name" " test_expect_success "$name" '
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" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 && remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' && 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' name='modify a symlink to become a file'
test_expect_success "$name" " test_expect_success "$name" '
echo git help > help || true && echo git help > help || true &&
rm exec-2.sh && rm exec-2.sh &&
cp help exec-2.sh && cp help exec-2.sh &&
git update-index exec-2.sh && git update-index exec-2.sh &&
git commit -m '$name' && git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \ git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 && remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' && svn up "$SVN_TREE" &&
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 &&
git diff help $SVN_TREE/exec-2.sh" git diff help "$SVN_TREE"/exec-2.sh'
if test "$have_utf8" = t if test "$have_utf8" = t
then then
@ -190,10 +190,10 @@ name='test fetch functionality (svn => git) with alternate GIT_SVN_ID'
GIT_SVN_ID=alt GIT_SVN_ID=alt
export GIT_SVN_ID export GIT_SVN_ID
test_expect_success "$name" \ test_expect_success "$name" \
"git-svn init $svnrepo && git-svn fetch && 'git-svn init "$svnrepo" && git-svn fetch &&
git rev-list --pretty=raw remotes/git-svn | grep ^tree | uniq > a && git rev-list --pretty=raw remotes/git-svn | grep ^tree | uniq > a &&
git rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b && git rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
git diff a b" git diff a b'
name='check imported tree checksums expected tree checksums' name='check imported tree checksums expected tree checksums'
rm -f expected rm -f expected
@ -219,22 +219,22 @@ test_expect_success 'exit if remote refs are ambigious' "
! git-svn migrate ! git-svn migrate
" "
test_expect_success 'exit if init-ing a would clobber a URL' " test_expect_success 'exit if init-ing a would clobber a URL' '
svnadmin create ${PWD}/svnrepo2 && svnadmin create "${PWD}/svnrepo2" &&
svn mkdir -m 'mkdir bar' ${svnrepo}2/bar && svn mkdir -m "mkdir bar" "${svnrepo}2/bar" &&
git config --unset svn-remote.svn.fetch \ git config --unset svn-remote.svn.fetch \
'^bar:refs/remotes/git-svn$' && "^bar:refs/remotes/git-svn$" &&
! git-svn init ${svnrepo}2/bar ! git-svn init "${svnrepo}2/bar"
" '
test_expect_success \ test_expect_success \
'init allows us to connect to another directory in the same repo' " 'init allows us to connect to another directory in the same repo' '
git-svn init --minimize-url -i bar $svnrepo/bar && git-svn init --minimize-url -i bar "$svnrepo/bar" &&
git config --get svn-remote.svn.fetch \ git config --get svn-remote.svn.fetch \
'^bar:refs/remotes/bar$' && "^bar:refs/remotes/bar$" &&
git config --get svn-remote.svn.fetch \ git config --get svn-remote.svn.fetch \
'^:refs/remotes/git-svn$' "^:refs/remotes/git-svn$"
" '
test_expect_success 'able to dcommit to a subdirectory' " test_expect_success 'able to dcommit to a subdirectory' "
git-svn fetch -i bar && git-svn fetch -i bar &&

View File

@ -52,7 +52,7 @@ EOF
cd .. cd ..
rm -rf import rm -rf import
test_expect_success 'checkout working copy from svn' "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' \ test_expect_success 'setup some commits to svn' \
'cd test_wc && 'cd test_wc &&
echo Greetings >> kw.c && echo Greetings >> kw.c &&
@ -66,7 +66,7 @@ test_expect_success 'setup some commits to svn' \
svn commit -m "Propset Id" && svn commit -m "Propset Id" &&
cd ..' cd ..'
test_expect_success 'initialize git-svn' "git-svn init $svnrepo" test_expect_success 'initialize git-svn' 'git-svn init "$svnrepo"'
test_expect_success 'fetch revisions from svn' 'git-svn fetch' test_expect_success 'fetch revisions from svn' 'git-svn fetch'
name='test svn:keywords ignoring' name='test svn:keywords ignoring'
@ -90,9 +90,9 @@ test_expect_success "propset CR on crlf files" \
cd ..' cd ..'
test_expect_success 'fetch and pull latest from svn and checkout a new wc' \ test_expect_success 'fetch and pull latest from svn and checkout a new wc' \
"git-svn fetch && 'git-svn fetch &&
git pull . remotes/git-svn && 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

View File

@ -2,29 +2,29 @@
test_description='git-svn rmdir' test_description='git-svn rmdir'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'initialize repo' " test_expect_success 'initialize repo' '
mkdir import && mkdir import &&
cd import && cd import &&
mkdir -p deeply/nested/directory/number/1 && mkdir -p deeply/nested/directory/number/1 &&
mkdir -p deeply/nested/directory/number/2 && mkdir -p deeply/nested/directory/number/2 &&
echo foo > deeply/nested/directory/number/1/file && echo foo > deeply/nested/directory/number/1/file &&
echo foo > deeply/nested/directory/number/2/another && echo foo > deeply/nested/directory/number/2/another &&
svn import -m 'import for git-svn' . $svnrepo && svn import -m "import for git-svn" . "$svnrepo" &&
cd .. cd ..
" '
test_expect_success 'mirror via git-svn' " test_expect_success 'mirror via git-svn' '
git-svn init $svnrepo && git-svn init "$svnrepo" &&
git-svn fetch && git-svn fetch &&
git checkout -f -b test-rmdir remotes/git-svn git checkout -f -b test-rmdir remotes/git-svn
" '
test_expect_success 'Try a commit on rmdir' " test_expect_success 'Try a commit on rmdir' '
git rm -f deeply/nested/directory/number/2/another && git rm -f deeply/nested/directory/number/2/another &&
git commit -a -m 'remove another' && git commit -a -m "remove another" &&
git-svn set-tree --rmdir HEAD && git-svn set-tree --rmdir HEAD &&
svn ls -R $svnrepo | grep ^deeply/nested/directory/number/1 svn ls -R "$svnrepo" | grep ^deeply/nested/directory/number/1
" '
test_done test_done

View File

@ -10,30 +10,30 @@ test_expect_success 'make history for tracking' '
mkdir import && mkdir import &&
mkdir import/trunk && mkdir import/trunk &&
echo hello >> import/trunk/README && echo hello >> import/trunk/README &&
svn import -m initial import $svnrepo && svn import -m initial import "$svnrepo" &&
rm -rf import && rm -rf import &&
svn co $svnrepo/trunk trunk && svn co "$svnrepo"/trunk trunk &&
echo bye bye >> trunk/README && echo bye bye >> trunk/README &&
svn rm -m "gone" $svnrepo/trunk && svn rm -m "gone" "$svnrepo"/trunk &&
rm -rf trunk && rm -rf trunk &&
mkdir trunk && mkdir trunk &&
echo "new" > trunk/FOLLOWME && echo "new" > trunk/FOLLOWME &&
svn import -m "new trunk" trunk $svnrepo/trunk svn import -m "new trunk" trunk "$svnrepo"/trunk
' '
test_expect_success 'clone repo with git' ' test_expect_success 'clone repo with git' '
git svn clone -s $svnrepo x && git svn clone -s "$svnrepo" x &&
test -f x/FOLLOWME && test -f x/FOLLOWME &&
test ! -f x/README test ! -f x/README
' '
test_expect_success 'make sure r2 still has old file' ' test_expect_success 'make sure r2 still has old file' "
cd x && cd x &&
test -n "$(git svn find-rev r1)" && test -n \"\$(git svn find-rev r1)\" &&
git reset --hard $(git svn find-rev r1) && git reset --hard \$(git svn find-rev r1) &&
test -f README && test -f README &&
test ! -f FOLLOWME && test ! -f FOLLOWME &&
test x$(git svn find-rev r2) = x test x\$(git svn find-rev r2) = x
' "
test_done test_done

View File

@ -6,165 +6,165 @@
test_description='git-svn fetching' test_description='git-svn fetching'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'initialize repo' " test_expect_success 'initialize repo' '
mkdir import && mkdir import &&
cd import && cd import &&
mkdir -p trunk && mkdir -p trunk &&
echo hello > trunk/readme && echo hello > trunk/readme &&
svn import -m 'initial' . $svnrepo && svn import -m "initial" . "$svnrepo" &&
cd .. && cd .. &&
svn co $svnrepo wc && svn co "$svnrepo" wc &&
cd wc && cd wc &&
echo world >> trunk/readme && echo world >> trunk/readme &&
poke trunk/readme && poke trunk/readme &&
svn commit -m 'another commit' && svn commit -m "another commit" &&
svn up && svn up &&
svn mv trunk thunk && svn mv trunk thunk &&
echo goodbye >> thunk/readme && echo goodbye >> thunk/readme &&
poke thunk/readme && poke thunk/readme &&
svn commit -m 'bye now' && svn commit -m "bye now" &&
cd .. cd ..
" '
test_expect_success 'init and fetch a moved directory' " test_expect_success 'init and fetch a moved directory' '
git-svn init --minimize-url -i thunk $svnrepo/thunk && git-svn init --minimize-url -i thunk "$svnrepo"/thunk &&
git-svn fetch -i thunk && git-svn fetch -i thunk &&
test \"\`git rev-parse --verify refs/remotes/thunk@2\`\" \ test "`git rev-parse --verify refs/remotes/thunk@2`" \
= \"\`git rev-parse --verify refs/remotes/thunk~1\`\" && = "`git rev-parse --verify refs/remotes/thunk~1`" &&
test \"\`git cat-file blob refs/remotes/thunk:readme |\ test "`git cat-file blob refs/remotes/thunk:readme |\
sed -n -e '3p'\`\" = goodbye && sed -n -e "3p"`" = goodbye &&
test -z \"\`git config --get svn-remote.svn.fetch \ test -z "`git config --get svn-remote.svn.fetch \
'^trunk:refs/remotes/thunk@2$'\`\" "^trunk:refs/remotes/thunk@2$"`"
" '
test_expect_success 'init and fetch from one svn-remote' " test_expect_success 'init and fetch from one svn-remote' '
git config svn-remote.svn.url $svnrepo && git config svn-remote.svn.url "$svnrepo" &&
git config --add svn-remote.svn.fetch \ git config --add svn-remote.svn.fetch \
trunk:refs/remotes/svn/trunk && trunk:refs/remotes/svn/trunk &&
git config --add svn-remote.svn.fetch \ git config --add svn-remote.svn.fetch \
thunk:refs/remotes/svn/thunk && thunk:refs/remotes/svn/thunk &&
git-svn fetch -i svn/thunk && git-svn fetch -i svn/thunk &&
test \"\`git rev-parse --verify refs/remotes/svn/trunk\`\" \ test "`git rev-parse --verify refs/remotes/svn/trunk`" \
= \"\`git rev-parse --verify refs/remotes/svn/thunk~1\`\" && = "`git rev-parse --verify refs/remotes/svn/thunk~1`" &&
test \"\`git cat-file blob refs/remotes/svn/thunk:readme |\ test "`git cat-file blob refs/remotes/svn/thunk:readme |\
sed -n -e '3p'\`\" = goodbye sed -n -e "3p"`" = goodbye
" '
test_expect_success 'follow deleted parent' " test_expect_success 'follow deleted parent' '
(svn cp -m 'resurrecting trunk as junk' \ (svn cp -m "resurrecting trunk as junk" \
$svnrepo/trunk@2 $svnrepo/junk || "$svnrepo"/trunk@2 "$svnrepo"/junk ||
svn cp -m 'resurrecting trunk as junk' \ svn cp -m "resurrecting trunk as junk" \
-r2 $svnrepo/trunk $svnrepo/junk) && -r2 "$svnrepo"/trunk "$svnrepo"/junk) &&
git config --add svn-remote.svn.fetch \ git config --add svn-remote.svn.fetch \
junk:refs/remotes/svn/junk && junk:refs/remotes/svn/junk &&
git-svn fetch -i svn/thunk && git-svn fetch -i svn/thunk &&
git-svn fetch -i svn/junk && git-svn fetch -i svn/junk &&
test -z \"\`git diff svn/junk svn/trunk\`\" && test -z "`git diff svn/junk svn/trunk`" &&
test \"\`git merge-base svn/junk svn/trunk\`\" \ test "`git merge-base svn/junk svn/trunk`" \
= \"\`git rev-parse svn/trunk\`\" = "`git rev-parse svn/trunk`"
" '
test_expect_success 'follow larger parent' " test_expect_success 'follow larger parent' '
mkdir -p import/trunk/thunk/bump/thud && mkdir -p import/trunk/thunk/bump/thud &&
echo hi > import/trunk/thunk/bump/thud/file && echo hi > import/trunk/thunk/bump/thud/file &&
svn import -m 'import a larger parent' import $svnrepo/larger-parent && svn import -m "import a larger parent" import "$svnrepo"/larger-parent &&
svn cp -m 'hi' $svnrepo/larger-parent $svnrepo/another-larger && svn cp -m "hi" "$svnrepo"/larger-parent "$svnrepo"/another-larger &&
git-svn init --minimize-url -i larger \ git-svn init --minimize-url -i larger \
$svnrepo/another-larger/trunk/thunk/bump/thud && "$svnrepo"/another-larger/trunk/thunk/bump/thud &&
git-svn fetch -i larger && git-svn fetch -i larger &&
git rev-parse --verify refs/remotes/larger && git rev-parse --verify refs/remotes/larger &&
git rev-parse --verify \ git rev-parse --verify \
refs/remotes/larger-parent/trunk/thunk/bump/thud && refs/remotes/larger-parent/trunk/thunk/bump/thud &&
test \"\`git merge-base \ test "`git merge-base \
refs/remotes/larger-parent/trunk/thunk/bump/thud \ refs/remotes/larger-parent/trunk/thunk/bump/thud \
refs/remotes/larger\`\" = \ refs/remotes/larger`" = \
\"\`git rev-parse refs/remotes/larger\`\" "`git rev-parse refs/remotes/larger`"
true true
" '
test_expect_success 'follow higher-level parent' " test_expect_success 'follow higher-level parent' '
svn mkdir -m 'follow higher-level parent' $svnrepo/blob && svn mkdir -m "follow higher-level parent" "$svnrepo"/blob &&
svn co $svnrepo/blob blob && svn co "$svnrepo"/blob blob &&
cd blob && cd blob &&
echo hi > hi && echo hi > hi &&
svn add hi && svn add hi &&
svn commit -m 'hihi' && svn commit -m "hihi" &&
cd .. cd ..
svn mkdir -m 'new glob at top level' $svnrepo/glob && svn mkdir -m "new glob at top level" "$svnrepo"/glob &&
svn mv -m 'move blob down a level' $svnrepo/blob $svnrepo/glob/blob && svn mv -m "move blob down a level" "$svnrepo"/blob "$svnrepo"/glob/blob &&
git-svn init --minimize-url -i blob $svnrepo/glob/blob && git-svn init --minimize-url -i blob "$svnrepo"/glob/blob &&
git-svn fetch -i blob git-svn fetch -i blob
" '
test_expect_success 'follow deleted directory' " test_expect_success 'follow deleted directory' '
svn mv -m 'bye!' $svnrepo/glob/blob/hi $svnrepo/glob/blob/bye && svn mv -m "bye!" "$svnrepo"/glob/blob/hi "$svnrepo"/glob/blob/bye &&
svn rm -m 'remove glob' $svnrepo/glob && svn rm -m "remove glob" "$svnrepo"/glob &&
git-svn init --minimize-url -i glob $svnrepo/glob && git-svn init --minimize-url -i glob "$svnrepo"/glob &&
git-svn fetch -i glob && git-svn fetch -i glob &&
test \"\`git cat-file blob refs/remotes/glob:blob/bye\`\" = hi && test "`git cat-file blob refs/remotes/glob:blob/bye`" = hi &&
test \"\`git ls-tree refs/remotes/glob | wc -l \`\" -eq 1 test "`git ls-tree refs/remotes/glob | wc -l `" -eq 1
" '
# ref: r9270 of the Subversion repository: (http://svn.collab.net/repos/svn) # ref: r9270 of the Subversion repository: (http://svn.collab.net/repos/svn)
# in trunk/subversion/bindings/swig/perl # in trunk/subversion/bindings/swig/perl
test_expect_success 'follow-parent avoids deleting relevant info' " test_expect_success 'follow-parent avoids deleting relevant info' '
mkdir -p import/trunk/subversion/bindings/swig/perl/t && mkdir -p import/trunk/subversion/bindings/swig/perl/t &&
for i in a b c ; do \ for i in a b c ; do \
echo \$i > import/trunk/subversion/bindings/swig/perl/\$i.pm && echo $i > import/trunk/subversion/bindings/swig/perl/$i.pm &&
echo _\$i > import/trunk/subversion/bindings/swig/perl/t/\$i.t; \ echo _$i > import/trunk/subversion/bindings/swig/perl/t/$i.t; \
done && done &&
echo 'bad delete test' > \ echo "bad delete test" > \
import/trunk/subversion/bindings/swig/perl/t/larger-parent && import/trunk/subversion/bindings/swig/perl/t/larger-parent &&
echo 'bad delete test 2' > \ echo "bad delete test 2" > \
import/trunk/subversion/bindings/swig/perl/another-larger && import/trunk/subversion/bindings/swig/perl/another-larger &&
cd import && cd import &&
svn import -m 'r9270 test' . $svnrepo/r9270 && svn import -m "r9270 test" . "$svnrepo"/r9270 &&
cd .. && cd .. &&
svn co $svnrepo/r9270/trunk/subversion/bindings/swig/perl r9270 && svn co "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl r9270 &&
cd r9270 && cd r9270 &&
svn mkdir native && svn mkdir native &&
svn mv t native/t && svn mv t native/t &&
for i in a b c; do svn mv \$i.pm native/\$i.pm; done && for i in a b c; do svn mv $i.pm native/$i.pm; done &&
echo z >> native/t/c.t && echo z >> native/t/c.t &&
poke native/t/c.t && poke native/t/c.t &&
svn commit -m 'reorg test' && svn commit -m "reorg test" &&
cd .. && cd .. &&
git-svn init --minimize-url -i r9270-t \ git-svn init --minimize-url -i r9270-t \
$svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t && "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl/native/t &&
git-svn fetch -i r9270-t && git-svn fetch -i r9270-t &&
test \`git rev-list r9270-t | wc -l\` -eq 2 && test `git rev-list r9270-t | wc -l` -eq 2 &&
test \"\`git ls-tree --name-only r9270-t~1\`\" = \ test "`git ls-tree --name-only r9270-t~1`" = \
\"\`git ls-tree --name-only r9270-t\`\" "`git ls-tree --name-only r9270-t`"
" '
test_expect_success "track initial change if it was only made to parent" " test_expect_success "track initial change if it was only made to parent" '
svn cp -m 'wheee!' $svnrepo/r9270/trunk $svnrepo/r9270/drunk && svn cp -m "wheee!" "$svnrepo"/r9270/trunk "$svnrepo"/r9270/drunk &&
git-svn init --minimize-url -i r9270-d \ git-svn init --minimize-url -i r9270-d \
$svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t && "$svnrepo"/r9270/drunk/subversion/bindings/swig/perl/native/t &&
git-svn fetch -i r9270-d && git-svn fetch -i r9270-d &&
test \`git rev-list r9270-d | wc -l\` -eq 3 && test `git rev-list r9270-d | wc -l` -eq 3 &&
test \"\`git ls-tree --name-only r9270-t\`\" = \ test "`git ls-tree --name-only r9270-t`" = \
\"\`git ls-tree --name-only r9270-d\`\" && "`git ls-tree --name-only r9270-d`" &&
test \"\`git rev-parse r9270-t\`\" = \ test "`git rev-parse r9270-t`" = \
\"\`git rev-parse r9270-d~1\`\" "`git rev-parse r9270-d~1`"
" '
test_expect_success "track multi-parent paths" " test_expect_success "track multi-parent paths" '
svn cp -m 'resurrect /glob' $svnrepo/r9270 $svnrepo/glob && svn cp -m "resurrect /glob" "$svnrepo"/r9270 "$svnrepo"/glob &&
git-svn multi-fetch && git-svn multi-fetch &&
test \`git cat-file commit refs/remotes/glob | \ test `git cat-file commit refs/remotes/glob | \
grep '^parent ' | wc -l\` -eq 2 grep "^parent " | wc -l` -eq 2
" '
test_expect_success "multi-fetch continues to work" " test_expect_success "multi-fetch continues to work" "
git-svn multi-fetch git-svn multi-fetch
" "
test_expect_success "multi-fetch works off a 'clean' repository" " test_expect_success "multi-fetch works off a 'clean' repository" '
rm -r $GIT_DIR/svn $GIT_DIR/refs/remotes $GIT_DIR/logs && rm -r "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" "$GIT_DIR/logs" &&
mkdir $GIT_DIR/svn && mkdir "$GIT_DIR/svn" &&
git-svn multi-fetch git-svn multi-fetch
" '
test_debug 'gitk --all &' test_debug 'gitk --all &'

View File

@ -4,18 +4,18 @@
test_description='git-svn commit-diff' test_description='git-svn commit-diff'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'initialize repo' " test_expect_success 'initialize repo' '
mkdir import && mkdir import &&
cd import && cd import &&
echo hello > readme && echo hello > readme &&
svn import -m 'initial' . $svnrepo && svn import -m "initial" . "$svnrepo" &&
cd .. && cd .. &&
echo hello > readme && echo hello > readme &&
git update-index --add readme && git update-index --add readme &&
git commit -a -m 'initial' && git commit -a -m "initial" &&
echo world >> readme && echo world >> readme &&
git commit -a -m 'another' git commit -a -m "another"
" '
head=`git rev-parse --verify HEAD^0` head=`git rev-parse --verify HEAD^0`
prev=`git rev-parse --verify HEAD^1` prev=`git rev-parse --verify HEAD^1`
@ -24,20 +24,20 @@ prev=`git rev-parse --verify HEAD^1`
# commit, so only a basic test of functionality is needed since we've # commit, so only a basic test of functionality is needed since we've
# already tested commit extensively elsewhere # already tested commit extensively elsewhere
test_expect_success 'test the commit-diff command' " test_expect_success 'test the commit-diff command' '
test -n '$prev' && test -n '$head' && test -n "$prev" && test -n "$head" &&
git-svn commit-diff -r1 '$prev' '$head' '$svnrepo' && git-svn commit-diff -r1 "$prev" "$head" "$svnrepo" &&
svn co $svnrepo wc && svn co "$svnrepo" wc &&
cmp readme wc/readme cmp readme wc/readme
" '
test_expect_success 'commit-diff to a sub-directory (with git-svn config)' " test_expect_success 'commit-diff to a sub-directory (with git-svn config)' '
svn import -m 'sub-directory' import $svnrepo/subdir && svn import -m "sub-directory" import "$svnrepo"/subdir &&
git-svn init --minimize-url $svnrepo/subdir && git-svn init --minimize-url "$svnrepo"/subdir &&
git-svn fetch && git-svn fetch &&
git-svn commit-diff -r3 '$prev' '$head' && git-svn commit-diff -r3 "$prev" "$head" &&
svn cat $svnrepo/subdir/readme > readme.2 && svn cat "$svnrepo"/subdir/readme > readme.2 &&
cmp readme readme.2 cmp readme readme.2
" '
test_done test_done

View File

@ -4,56 +4,56 @@
test_description='git-svn commit-diff clobber' test_description='git-svn commit-diff clobber'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'initialize repo' " test_expect_success 'initialize repo' '
mkdir import && mkdir import &&
cd import && cd import &&
echo initial > file && echo initial > file &&
svn import -m 'initial' . $svnrepo && svn import -m "initial" . "$svnrepo" &&
cd .. && cd .. &&
echo initial > file && echo initial > file &&
git update-index --add file && git update-index --add file &&
git commit -a -m 'initial' git commit -a -m "initial"
" '
test_expect_success 'commit change from svn side' " test_expect_success 'commit change from svn side' '
svn co $svnrepo t.svn && svn co "$svnrepo" t.svn &&
cd t.svn && cd t.svn &&
echo second line from svn >> file && echo second line from svn >> file &&
poke file && poke file &&
svn commit -m 'second line from svn' && svn commit -m "second line from svn" &&
cd .. && cd .. &&
rm -rf t.svn rm -rf t.svn
" '
test_expect_success 'commit conflicting change from git' " test_expect_success 'commit conflicting change from git' '
echo second line from git >> file && echo second line from git >> file &&
git commit -a -m 'second line from git' && git commit -a -m "second line from git" &&
! git-svn commit-diff -r1 HEAD~1 HEAD $svnrepo ! git-svn commit-diff -r1 HEAD~1 HEAD "$svnrepo"
" '
test_expect_success 'commit complementing change from git' " test_expect_success 'commit complementing change from git' '
git reset --hard HEAD~1 && git reset --hard HEAD~1 &&
echo second line from svn >> file && echo second line from svn >> file &&
git commit -a -m 'second line from svn' && git commit -a -m "second line from svn" &&
echo third line from git >> file && echo third line from git >> file &&
git commit -a -m 'third line from git' && git commit -a -m "third line from git" &&
git-svn commit-diff -r2 HEAD~1 HEAD $svnrepo git-svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"
" '
test_expect_success 'dcommit fails to commit because of conflict' " test_expect_success 'dcommit fails to commit because of conflict' '
git-svn init $svnrepo && git-svn init "$svnrepo" &&
git-svn fetch && git-svn fetch &&
git reset --hard refs/remotes/git-svn && git reset --hard refs/remotes/git-svn &&
svn co $svnrepo t.svn && svn co "$svnrepo" t.svn &&
cd t.svn && cd t.svn &&
echo fourth line from svn >> file && echo fourth line from svn >> file &&
poke file && poke file &&
svn commit -m 'fourth line from svn' && svn commit -m "fourth line from svn" &&
cd .. && cd .. &&
rm -rf t.svn && rm -rf t.svn &&
echo 'fourth line from git' >> file && echo "fourth line from git" >> file &&
git commit -a -m 'fourth line from git' && git commit -a -m "fourth line from git" &&
! git-svn dcommit ! git-svn dcommit
" '
test_expect_success 'dcommit does the svn equivalent of an index merge' " test_expect_success 'dcommit does the svn equivalent of an index merge' "
git reset --hard refs/remotes/git-svn && git reset --hard refs/remotes/git-svn &&
@ -66,15 +66,15 @@ test_expect_success 'dcommit does the svn equivalent of an index merge' "
git-svn dcommit git-svn dcommit
" "
test_expect_success 'commit another change from svn side' " test_expect_success 'commit another change from svn side' '
svn co $svnrepo t.svn && svn co "$svnrepo" t.svn &&
cd t.svn && cd t.svn &&
echo third line from svn >> file && echo third line from svn >> file &&
poke file && poke file &&
svn commit -m 'third line from svn' && svn commit -m "third line from svn" &&
cd .. && cd .. &&
rm -rf t.svn rm -rf t.svn
" '
test_expect_success 'multiple dcommit from git-svn will not clobber svn' " test_expect_success 'multiple dcommit from git-svn will not clobber svn' "
git reset --hard refs/remotes/git-svn && git reset --hard refs/remotes/git-svn &&

View File

@ -4,30 +4,30 @@
test_description='git-svn dcommit clobber series' test_description='git-svn dcommit clobber series'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'initialize repo' " test_expect_success 'initialize repo' '
mkdir import && mkdir import &&
cd import && cd import &&
awk 'BEGIN { for (i = 1; i < 64; i++) { print i } }' > file awk "BEGIN { for (i = 1; i < 64; i++) { print i } }" > file
svn import -m 'initial' . $svnrepo && svn import -m "initial" . "$svnrepo" &&
cd .. && cd .. &&
git svn init $svnrepo && git svn init "$svnrepo" &&
git svn fetch && git svn fetch &&
test -e file test -e file
" '
test_expect_success '(supposedly) non-conflicting change from SVN' " test_expect_success '(supposedly) non-conflicting change from SVN' '
test x\"\`sed -n -e 58p < file\`\" = x58 && test x"`sed -n -e 58p < file`" = x58 &&
test x\"\`sed -n -e 61p < file\`\" = x61 && test x"`sed -n -e 61p < file`" = x61 &&
svn co $svnrepo tmp && svn co "$svnrepo" tmp &&
cd tmp && cd tmp &&
perl -i -p -e 's/^58\$/5588/' file && perl -i -p -e "s/^58$/5588/" file &&
perl -i -p -e 's/^61\$/6611/' file && perl -i -p -e "s/^61$/6611/" file &&
poke file && poke file &&
test x\"\`sed -n -e 58p < file\`\" = x5588 && test x"`sed -n -e 58p < file`" = x5588 &&
test x\"\`sed -n -e 61p < file\`\" = x6611 && test x"`sed -n -e 61p < file`" = x6611 &&
svn commit -m '58 => 5588, 61 => 6611' && svn commit -m "58 => 5588, 61 => 6611" &&
cd .. cd ..
" '
test_expect_success 'some unrelated changes to git' " test_expect_success 'some unrelated changes to git' "
echo hi > life && echo hi > life &&

View File

@ -3,61 +3,61 @@
test_description='git-svn metadata migrations from previous versions' test_description='git-svn metadata migrations from previous versions'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'setup old-looking metadata' " test_expect_success 'setup old-looking metadata' '
cp $GIT_DIR/config $GIT_DIR/config-old-git-svn && cp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&
mkdir import && mkdir import &&
cd import && cd import &&
for i in trunk branches/a branches/b \ for i in trunk branches/a branches/b \
tags/0.1 tags/0.2 tags/0.3; do tags/0.1 tags/0.2 tags/0.3; do
mkdir -p \$i && \ mkdir -p $i && \
echo hello >> \$i/README || exit 1 echo hello >> $i/README || exit 1
done && \ done && \
svn import -m test . $svnrepo svn import -m test . "$svnrepo"
cd .. && cd .. &&
git-svn init $svnrepo && git-svn init "$svnrepo" &&
git-svn fetch && git-svn fetch &&
mv $GIT_DIR/svn/* $GIT_DIR/ && mv "$GIT_DIR"/svn/* "$GIT_DIR"/ &&
mv $GIT_DIR/svn/.metadata $GIT_DIR/ && mv "$GIT_DIR"/svn/.metadata "$GIT_DIR"/ &&
rmdir $GIT_DIR/svn && rmdir "$GIT_DIR"/svn &&
git update-ref refs/heads/git-svn-HEAD refs/remotes/git-svn && git update-ref refs/heads/git-svn-HEAD refs/remotes/git-svn &&
git update-ref refs/heads/svn-HEAD refs/remotes/git-svn && git update-ref refs/heads/svn-HEAD refs/remotes/git-svn &&
git update-ref -d refs/remotes/git-svn refs/remotes/git-svn git update-ref -d refs/remotes/git-svn refs/remotes/git-svn
" '
head=`git rev-parse --verify refs/heads/git-svn-HEAD^0` head=`git rev-parse --verify refs/heads/git-svn-HEAD^0`
test_expect_success 'git-svn-HEAD is a real HEAD' "test -n '$head'" test_expect_success 'git-svn-HEAD is a real HEAD' "test -n '$head'"
test_expect_success 'initialize old-style (v0) git-svn layout' " test_expect_success 'initialize old-style (v0) git-svn layout' '
mkdir -p $GIT_DIR/git-svn/info $GIT_DIR/svn/info && mkdir -p "$GIT_DIR"/git-svn/info "$GIT_DIR"/svn/info &&
echo $svnrepo > $GIT_DIR/git-svn/info/url && echo "$svnrepo" > "$GIT_DIR"/git-svn/info/url &&
echo $svnrepo > $GIT_DIR/svn/info/url && echo "$svnrepo" > "$GIT_DIR"/svn/info/url &&
git-svn migrate && git-svn migrate &&
! test -d $GIT_DIR/git-svn && ! test -d "$GIT_DIR"/git-svn &&
git rev-parse --verify refs/remotes/git-svn^0 && git rev-parse --verify refs/remotes/git-svn^0 &&
git rev-parse --verify refs/remotes/svn^0 && git rev-parse --verify refs/remotes/svn^0 &&
test \`git config --get svn-remote.svn.url\` = '$svnrepo' && test "$(git config --get svn-remote.svn.url)" = "$svnrepo" &&
test \`git config --get svn-remote.svn.fetch\` = \ test `git config --get svn-remote.svn.fetch` = \
':refs/remotes/git-svn' ":refs/remotes/git-svn"
" '
test_expect_success 'initialize a multi-repository repo' " test_expect_success 'initialize a multi-repository repo' '
git-svn init $svnrepo -T trunk -t tags -b branches && git-svn init "$svnrepo" -T trunk -t tags -b branches &&
git config --get-all svn-remote.svn.fetch > fetch.out && git config --get-all svn-remote.svn.fetch > fetch.out &&
grep '^trunk:refs/remotes/trunk$' fetch.out && grep "^trunk:refs/remotes/trunk$" fetch.out &&
test -n \"\`git config --get svn-remote.svn.branches \ test -n "`git config --get svn-remote.svn.branches \
'^branches/\*:refs/remotes/\*$'\`\" && "^branches/\*:refs/remotes/\*$"`" &&
test -n \"\`git config --get svn-remote.svn.tags \ test -n "`git config --get svn-remote.svn.tags \
'^tags/\*:refs/remotes/tags/\*$'\`\" && "^tags/\*:refs/remotes/tags/\*$"`" &&
git config --unset svn-remote.svn.branches \ git config --unset svn-remote.svn.branches \
'^branches/\*:refs/remotes/\*$' && "^branches/\*:refs/remotes/\*$" &&
git config --unset svn-remote.svn.tags \ git config --unset svn-remote.svn.tags \
'^tags/\*:refs/remotes/tags/\*$' && "^tags/\*:refs/remotes/tags/\*$" &&
git config --add svn-remote.svn.fetch 'branches/a:refs/remotes/a' && git config --add svn-remote.svn.fetch "branches/a:refs/remotes/a" &&
git config --add svn-remote.svn.fetch 'branches/b:refs/remotes/b' && git config --add svn-remote.svn.fetch "branches/b:refs/remotes/b" &&
for i in tags/0.1 tags/0.2 tags/0.3; do for i in tags/0.1 tags/0.2 tags/0.3; do
git config --add svn-remote.svn.fetch \ git config --add svn-remote.svn.fetch \
\$i:refs/remotes/\$i || exit 1; done $i:refs/remotes/$i || exit 1; done
" '
# refs should all be different, but the trees should all be the same: # refs should all be different, but the trees should all be the same:
test_expect_success 'multi-fetch works on partial urls + paths' " test_expect_success 'multi-fetch works on partial urls + paths' "
@ -73,43 +73,43 @@ test_expect_success 'multi-fetch works on partial urls + paths' "
refs/remotes/\$j\`\" ||exit 1; done; done refs/remotes/\$j\`\" ||exit 1; done; done
" "
test_expect_success 'migrate --minimize on old inited layout' " test_expect_success 'migrate --minimize on old inited layout' '
git config --unset-all svn-remote.svn.fetch && git config --unset-all svn-remote.svn.fetch &&
git config --unset-all svn-remote.svn.url && git config --unset-all svn-remote.svn.url &&
rm -rf $GIT_DIR/svn && rm -rf "$GIT_DIR"/svn &&
for i in \`cat fetch.out\`; do for i in `cat fetch.out`; do
path=\`expr \$i : '\\([^:]*\\):.*$'\` path=`expr $i : "\([^:]*\):.*$"`
ref=\`expr \$i : '[^:]*:refs/remotes/\\(.*\\)$'\` ref=`expr $i : "[^:]*:refs/remotes/\(.*\)$"`
if test -z \"\$ref\"; then continue; fi if test -z "$ref"; then continue; fi
if test -n \"\$path\"; then path=\"/\$path\"; fi if test -n "$path"; then path="/$path"; fi
( mkdir -p $GIT_DIR/svn/\$ref/info/ && ( mkdir -p "$GIT_DIR"/svn/$ref/info/ &&
echo $svnrepo\$path > $GIT_DIR/svn/\$ref/info/url ) || exit 1; echo "$svnrepo"$path > "$GIT_DIR"/svn/$ref/info/url ) || exit 1;
done && done &&
git-svn migrate --minimize && git-svn migrate --minimize &&
test -z \"\`git config -l |grep -v '^svn-remote\.git-svn\.'\`\" && test -z "`git config -l |grep -v "^svn-remote\.git-svn\."`" &&
git config --get-all svn-remote.svn.fetch > fetch.out && git config --get-all svn-remote.svn.fetch > fetch.out &&
grep '^trunk:refs/remotes/trunk$' fetch.out && grep "^trunk:refs/remotes/trunk$" fetch.out &&
grep '^branches/a:refs/remotes/a$' fetch.out && grep "^branches/a:refs/remotes/a$" fetch.out &&
grep '^branches/b:refs/remotes/b$' fetch.out && grep "^branches/b:refs/remotes/b$" fetch.out &&
grep '^tags/0\.1:refs/remotes/tags/0\.1$' fetch.out && grep "^tags/0\.1:refs/remotes/tags/0\.1$" fetch.out &&
grep '^tags/0\.2:refs/remotes/tags/0\.2$' fetch.out && grep "^tags/0\.2:refs/remotes/tags/0\.2$" fetch.out &&
grep '^tags/0\.3:refs/remotes/tags/0\.3$' fetch.out grep "^tags/0\.3:refs/remotes/tags/0\.3$" fetch.out
grep '^:refs/remotes/git-svn' fetch.out grep "^:refs/remotes/git-svn" fetch.out
" '
test_expect_success ".rev_db auto-converted to .rev_map.UUID" " test_expect_success ".rev_db auto-converted to .rev_map.UUID" '
git-svn fetch -i trunk && git-svn fetch -i trunk &&
test -z \"\$(ls $GIT_DIR/svn/trunk/.rev_db.* 2>/dev/null)\" && test -z "$(ls "$GIT_DIR"/svn/trunk/.rev_db.* 2>/dev/null)" &&
expect=\"\$(ls $GIT_DIR/svn/trunk/.rev_map.*)\" && expect="$(ls "$GIT_DIR"/svn/trunk/.rev_map.*)" &&
test -n \"\$expect\" && test -n "$expect" &&
rev_db=\$(echo \$expect | sed -e 's,_map,_db,') && rev_db="$(echo $expect | sed -e "s,_map,_db,")" &&
convert_to_rev_db \$expect \$rev_db && convert_to_rev_db "$expect" "$rev_db" &&
rm -f \$expect && rm -f "$expect" &&
test -f \$rev_db && test -f "$rev_db" &&
git-svn fetch -i trunk && git-svn fetch -i trunk &&
test -z \"\$(ls $GIT_DIR/svn/trunk/.rev_db.* 2>/dev/null)\" && test -z "$(ls "$GIT_DIR"/svn/trunk/.rev_db.* 2>/dev/null)" &&
test ! -e $GIT_DIR/svn/trunk/.rev_db && test ! -e "$GIT_DIR"/svn/trunk/.rev_db &&
test -f \$expect test -f "$expect"
" '
test_done test_done

View File

@ -10,77 +10,77 @@ start a new branch
initial initial
EOF EOF
test_expect_success 'test refspec globbing' " test_expect_success 'test refspec globbing' '
mkdir -p trunk/src/a trunk/src/b trunk/doc && mkdir -p trunk/src/a trunk/src/b trunk/doc &&
echo 'hello world' > trunk/src/a/readme && echo "hello world" > trunk/src/a/readme &&
echo 'goodbye world' > trunk/src/b/readme && echo "goodbye world" > trunk/src/b/readme &&
svn import -m 'initial' trunk $svnrepo/trunk && svn import -m "initial" trunk "$svnrepo"/trunk &&
svn co $svnrepo tmp && svn co "$svnrepo" tmp &&
cd tmp && cd tmp &&
mkdir branches tags && mkdir branches tags &&
svn add branches tags && svn add branches tags &&
svn cp trunk branches/start && svn cp trunk branches/start &&
svn commit -m 'start a new branch' && svn commit -m "start a new branch" &&
svn up && svn up &&
echo 'hi' >> branches/start/src/b/readme && echo "hi" >> branches/start/src/b/readme &&
poke branches/start/src/b/readme && poke branches/start/src/b/readme &&
echo 'hey' >> branches/start/src/a/readme && echo "hey" >> branches/start/src/a/readme &&
poke branches/start/src/a/readme && poke branches/start/src/a/readme &&
svn commit -m 'hi' && svn commit -m "hi" &&
svn up && svn up &&
svn cp branches/start tags/end && svn cp branches/start tags/end &&
echo 'bye' >> tags/end/src/b/readme && echo "bye" >> tags/end/src/b/readme &&
poke tags/end/src/b/readme && poke tags/end/src/b/readme &&
echo 'aye' >> tags/end/src/a/readme && echo "aye" >> tags/end/src/a/readme &&
poke tags/end/src/a/readme && poke tags/end/src/a/readme &&
svn commit -m 'the end' && svn commit -m "the end" &&
echo 'byebye' >> tags/end/src/b/readme && echo "byebye" >> tags/end/src/b/readme &&
poke tags/end/src/b/readme && poke tags/end/src/b/readme &&
svn commit -m 'nothing to see here' svn commit -m "nothing to see here"
cd .. && cd .. &&
git config --add svn-remote.svn.url $svnrepo && git config --add svn-remote.svn.url "$svnrepo" &&
git config --add svn-remote.svn.fetch \ git config --add svn-remote.svn.fetch \
'trunk/src/a:refs/remotes/trunk' && "trunk/src/a:refs/remotes/trunk" &&
git config --add svn-remote.svn.branches \ git config --add svn-remote.svn.branches \
'branches/*/src/a:refs/remotes/branches/*' && "branches/*/src/a:refs/remotes/branches/*" &&
git config --add svn-remote.svn.tags\ git config --add svn-remote.svn.tags\
'tags/*/src/a:refs/remotes/tags/*' && "tags/*/src/a:refs/remotes/tags/*" &&
git-svn multi-fetch && git-svn multi-fetch &&
git log --pretty=oneline refs/remotes/tags/end | \ git log --pretty=oneline refs/remotes/tags/end | \
sed -e 's/^.\{41\}//' > output.end && sed -e "s/^.\{41\}//" > output.end &&
cmp expect.end output.end && cmp expect.end output.end &&
test \"\`git rev-parse refs/remotes/tags/end~1\`\" = \ test "`git rev-parse refs/remotes/tags/end~1`" = \
\"\`git rev-parse refs/remotes/branches/start\`\" && "`git rev-parse refs/remotes/branches/start`" &&
test \"\`git rev-parse refs/remotes/branches/start~2\`\" = \ test "`git rev-parse refs/remotes/branches/start~2`" = \
\"\`git rev-parse refs/remotes/trunk\`\" "`git rev-parse refs/remotes/trunk`"
" '
echo try to try > expect.two echo try to try > expect.two
echo nothing to see here >> expect.two echo nothing to see here >> expect.two
cat expect.end >> expect.two cat expect.end >> expect.two
test_expect_success 'test left-hand-side only globbing' " test_expect_success 'test left-hand-side only globbing' '
git config --add svn-remote.two.url $svnrepo && git config --add svn-remote.two.url "$svnrepo" &&
git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk && git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk &&
git config --add svn-remote.two.branches \ git config --add svn-remote.two.branches \
'branches/*:refs/remotes/two/branches/*' && "branches/*:refs/remotes/two/branches/*" &&
git config --add svn-remote.two.tags \ git config --add svn-remote.two.tags \
'tags/*:refs/remotes/two/tags/*' && "tags/*:refs/remotes/two/tags/*" &&
cd tmp && cd tmp &&
echo 'try try' >> tags/end/src/b/readme && echo "try try" >> tags/end/src/b/readme &&
poke tags/end/src/b/readme && poke tags/end/src/b/readme &&
svn commit -m 'try to try' svn commit -m "try to try"
cd .. && cd .. &&
git-svn fetch two && git-svn fetch two &&
test \`git rev-list refs/remotes/two/tags/end | wc -l\` -eq 6 && test `git rev-list refs/remotes/two/tags/end | wc -l` -eq 6 &&
test \`git rev-list refs/remotes/two/branches/start | wc -l\` -eq 3 && test `git rev-list refs/remotes/two/branches/start | wc -l` -eq 3 &&
test \`git rev-parse refs/remotes/two/branches/start~2\` = \ test `git rev-parse refs/remotes/two/branches/start~2` = \
\`git rev-parse refs/remotes/two/trunk\` && `git rev-parse refs/remotes/two/trunk` &&
test \`git rev-parse refs/remotes/two/tags/end~3\` = \ test `git rev-parse refs/remotes/two/tags/end~3` = \
\`git rev-parse refs/remotes/two/branches/start\` && `git rev-parse refs/remotes/two/branches/start` &&
git log --pretty=oneline refs/remotes/two/tags/end | \ git log --pretty=oneline refs/remotes/two/tags/end | \
sed -e 's/^.\{41\}//' > output.two && sed -e "s/^.\{41\}//" > output.two &&
cmp expect.two output.two cmp expect.two output.two
" '
test_done test_done

View File

@ -7,15 +7,15 @@ test_description='git-svn useSvmProps test'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'load svm repo' " test_expect_success 'load svm repo' '
svnadmin load -q $rawsvnrepo < ../t9110/svm.dump && svnadmin load -q "$rawsvnrepo" < ../t9110/svm.dump &&
git-svn init --minimize-url -R arr -i bar $svnrepo/mirror/arr && git-svn init --minimize-url -R arr -i bar "$svnrepo"/mirror/arr &&
git-svn init --minimize-url -R argh -i dir $svnrepo/mirror/argh && git-svn init --minimize-url -R argh -i dir "$svnrepo"/mirror/argh &&
git-svn init --minimize-url -R argh -i e \ git-svn init --minimize-url -R argh -i e \
$svnrepo/mirror/argh/a/b/c/d/e && "$svnrepo"/mirror/argh/a/b/c/d/e &&
git config svn.useSvmProps true && git config svn.useSvmProps true &&
git-svn fetch --all git-svn fetch --all
" '
uuid=161ce429-a9dd-4828-af4a-52023f968c89 uuid=161ce429-a9dd-4828-af4a-52023f968c89

View File

@ -7,14 +7,14 @@ test_description='git-svn useSvnsyncProps test'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'load svnsync repo' " test_expect_success 'load svnsync repo' '
svnadmin load -q $rawsvnrepo < ../t9111/svnsync.dump && svnadmin load -q "$rawsvnrepo" < ../t9111/svnsync.dump &&
git-svn init --minimize-url -R arr -i bar $svnrepo/bar && git-svn init --minimize-url -R arr -i bar "$svnrepo"/bar &&
git-svn init --minimize-url -R argh -i dir $svnrepo/dir && git-svn init --minimize-url -R argh -i dir "$svnrepo"/dir &&
git-svn init --minimize-url -R argh -i e $svnrepo/dir/a/b/c/d/e && git-svn init --minimize-url -R argh -i e "$svnrepo"/dir/a/b/c/d/e &&
git config svn.useSvnsyncProps true && git config svn.useSvnsyncProps true &&
git-svn fetch --all git-svn fetch --all
" '
uuid=161ce429-a9dd-4828-af4a-52023f968c89 uuid=161ce429-a9dd-4828-af4a-52023f968c89

View File

@ -40,8 +40,8 @@ PROPS-END
EOF EOF
test_expect_success 'load svn dumpfile' "svnadmin load $rawsvnrepo < dumpfile.svn" test_expect_success 'load svn dumpfile' 'svnadmin load "$rawsvnrepo" < dumpfile.svn'
test_expect_success 'initialize git-svn' "git-svn init $svnrepo" test_expect_success 'initialize git-svn' 'git-svn init "$svnrepo"'
test_expect_success 'fetch revisions from svn' 'git-svn fetch' test_expect_success 'fetch revisions from svn' 'git-svn fetch'
test_done test_done

View File

@ -15,18 +15,18 @@ test_description='git-svn dcommit new files over svn:// test'
start_svnserve () { start_svnserve () {
svnserve --listen-port $SVNSERVE_PORT \ svnserve --listen-port $SVNSERVE_PORT \
--root $rawsvnrepo \ --root "$rawsvnrepo" \
--listen-once \ --listen-once \
--listen-host 127.0.0.1 & --listen-host 127.0.0.1 &
} }
test_expect_success 'start tracking an empty repo' " test_expect_success 'start tracking an empty repo' '
svn mkdir -m 'empty dir' $svnrepo/empty-dir && svn mkdir -m "empty dir" "$svnrepo"/empty-dir &&
echo anon-access = write >> $rawsvnrepo/conf/svnserve.conf && echo anon-access = write >> "$rawsvnrepo"/conf/svnserve.conf &&
start_svnserve && start_svnserve &&
git svn init svn://127.0.0.1:$SVNSERVE_PORT && git svn init svn://127.0.0.1:$SVNSERVE_PORT &&
git svn fetch git svn fetch
" '
test_expect_success 'create files in new directory with dcommit' " test_expect_success 'create files in new directory with dcommit' "
mkdir git-new-dir && mkdir git-new-dir &&

View File

@ -34,35 +34,35 @@ cat << EOF
EOF EOF
} }
test_expect_success 'setup svn repository' " test_expect_success 'setup svn repository' '
svn co $svnrepo mysvnwork && svn co "$svnrepo" mysvnwork &&
mkdir -p mysvnwork/trunk && mkdir -p mysvnwork/trunk &&
cd mysvnwork && cd mysvnwork &&
big_text_block >> trunk/README && big_text_block >> trunk/README &&
svn add trunk && svn add trunk &&
svn ci -m 'first commit' trunk && svn ci -m "first commit" trunk &&
cd .. cd ..
" '
test_expect_success 'setup git mirror and merge' " test_expect_success 'setup git mirror and merge' '
git svn init $svnrepo -t tags -T trunk -b branches && git svn init "$svnrepo" -t tags -T trunk -b branches &&
git svn fetch && git svn fetch &&
git checkout --track -b svn remotes/trunk && git checkout --track -b svn remotes/trunk &&
git checkout -b merge && git checkout -b merge &&
echo new file > new_file && echo new file > new_file &&
git add new_file && git add new_file &&
git commit -a -m 'New file' && git commit -a -m "New file" &&
echo hello >> README && echo hello >> README &&
git commit -a -m 'hello' && git commit -a -m "hello" &&
echo add some stuff >> new_file && echo add some stuff >> new_file &&
git commit -a -m 'add some stuff' && git commit -a -m "add some stuff" &&
git checkout svn && git checkout svn &&
mv -f README tmp && mv -f README tmp &&
echo friend > README && echo friend > README &&
cat tmp >> README && cat tmp >> README &&
git commit -a -m 'friend' && git commit -a -m "friend" &&
git pull . merge git pull . merge
" '
test_debug 'gitk --all & sleep 1' test_debug 'gitk --all & sleep 1'

View File

@ -7,16 +7,16 @@ test_description='git-svn dcommit can commit renames of files with ugly names'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'load repository with strange names' " test_expect_success 'load repository with strange names' '
svnadmin load -q $rawsvnrepo < ../t9115/funky-names.dump && svnadmin load -q "$rawsvnrepo" < ../t9115/funky-names.dump &&
start_httpd start_httpd
" '
test_expect_success 'init and fetch repository' " test_expect_success 'init and fetch repository' '
git svn init $svnrepo && git svn init "$svnrepo" &&
git svn fetch && git svn fetch &&
git reset --hard git-svn git reset --hard git-svn
" '
test_expect_success 'create file in existing ugly and empty dir' ' test_expect_success 'create file in existing ugly and empty dir' '
mkdir "#{bad_directory_name}" && mkdir "#{bad_directory_name}" &&

View File

@ -6,17 +6,17 @@
test_description='git-svn log tests' test_description='git-svn log tests'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'setup repository and import' " test_expect_success 'setup repository and import' '
mkdir import && mkdir import &&
cd import && cd import &&
for i in trunk branches/a branches/b \ for i in trunk branches/a branches/b \
tags/0.1 tags/0.2 tags/0.3; do tags/0.1 tags/0.2 tags/0.3; do
mkdir -p \$i && \ mkdir -p $i && \
echo hello >> \$i/README || exit 1 echo hello >> $i/README || exit 1
done && \ done && \
svn import -m test . $svnrepo svn import -m test . "$svnrepo"
cd .. && cd .. &&
git-svn init $svnrepo -T trunk -b branches -t tags && git-svn init "$svnrepo" -T trunk -b branches -t tags &&
git-svn fetch && git-svn fetch &&
git reset --hard trunk && git reset --hard trunk &&
echo bye >> README && echo bye >> README &&
@ -37,7 +37,7 @@ test_expect_success 'setup repository and import' "
echo try >> README && echo try >> README &&
git commit -a -m try && git commit -a -m try &&
git svn dcommit git svn dcommit
" '
test_expect_success 'run log' " test_expect_success 'run log' "
git reset --hard a && git reset --hard a &&

View File

@ -13,43 +13,43 @@ rm -r .git
mkdir tmp mkdir tmp
cd tmp cd tmp
test_expect_success 'setup svnrepo' " test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags && mkdir project project/trunk project/branches project/tags &&
echo foo > project/trunk/foo && echo foo > project/trunk/foo &&
svn import -m '$test_description' project $svnrepo/project && svn import -m "$test_description" project "$svnrepo"/project &&
rm -rf project rm -rf project
" '
test_expect_success 'basic clone' " test_expect_success 'basic clone' '
test ! -d trunk && test ! -d trunk &&
git svn clone $svnrepo/project/trunk && git svn clone "$svnrepo"/project/trunk &&
test -d trunk/.git/svn && test -d trunk/.git/svn &&
test -e trunk/foo && test -e trunk/foo &&
rm -rf trunk rm -rf trunk
" '
test_expect_success 'clone to target directory' " test_expect_success 'clone to target directory' '
test ! -d target && test ! -d target &&
git svn clone $svnrepo/project/trunk target && git svn clone "$svnrepo"/project/trunk target &&
test -d target/.git/svn && test -d target/.git/svn &&
test -e target/foo && test -e target/foo &&
rm -rf target rm -rf target
" '
test_expect_success 'clone with --stdlayout' " test_expect_success 'clone with --stdlayout' '
test ! -d project && test ! -d project &&
git svn clone -s $svnrepo/project && git svn clone -s "$svnrepo"/project &&
test -d project/.git/svn && test -d project/.git/svn &&
test -e project/foo && test -e project/foo &&
rm -rf project rm -rf project
" '
test_expect_success 'clone to target directory with --stdlayout' " test_expect_success 'clone to target directory with --stdlayout' '
test ! -d target && test ! -d target &&
git svn clone -s $svnrepo/project target && git svn clone -s "$svnrepo"/project target &&
test -d target/.git/svn && test -d target/.git/svn &&
test -e target/foo && test -e target/foo &&
rm -rf target rm -rf target
" '
test_done test_done

View File

@ -6,25 +6,25 @@
test_description='git-svn funky branch names' test_description='git-svn funky branch names'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'setup svnrepo' " test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags && mkdir project project/trunk project/branches project/tags &&
echo foo > project/trunk/foo && echo foo > project/trunk/foo &&
svn import -m '$test_description' project \"$svnrepo/pr ject\" && svn import -m "$test_description" project "$svnrepo/pr ject" &&
rm -rf project && rm -rf project &&
svn cp -m 'fun' \"$svnrepo/pr ject/trunk\" \ svn cp -m "fun" "$svnrepo/pr ject/trunk" \
\"$svnrepo/pr ject/branches/fun plugin\" && "$svnrepo/pr ject/branches/fun plugin" &&
svn cp -m 'more fun!' \"$svnrepo/pr ject/branches/fun plugin\" \ svn cp -m "more fun!" "$svnrepo/pr ject/branches/fun plugin" \
\"$svnrepo/pr ject/branches/more fun plugin!\" && "$svnrepo/pr ject/branches/more fun plugin!" &&
start_httpd start_httpd
" '
test_expect_success 'test clone with funky branch names' " test_expect_success 'test clone with funky branch names' '
git svn clone -s \"$svnrepo/pr ject\" project && git svn clone -s "$svnrepo/pr ject" project &&
cd project && cd project &&
git rev-parse 'refs/remotes/fun%20plugin' && git rev-parse "refs/remotes/fun%20plugin" &&
git rev-parse 'refs/remotes/more%20fun%20plugin!' && git rev-parse "refs/remotes/more%20fun%20plugin!" &&
cd .. cd ..
" '
test_expect_success 'test dcommit to funky branch' " test_expect_success 'test dcommit to funky branch' "
cd project && cd project &&

View File

@ -6,13 +6,13 @@
test_description='git-svn clone with percent escapes' test_description='git-svn clone with percent escapes'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'setup svnrepo' " test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags && mkdir project project/trunk project/branches project/tags &&
echo foo > project/trunk/foo && echo foo > project/trunk/foo &&
svn import -m '$test_description' project '$svnrepo/pr ject' && svn import -m "$test_description" project "$svnrepo/pr ject" &&
rm -rf project && rm -rf project &&
start_httpd start_httpd
" '
if test "$SVN_HTTPD_PORT" = "" if test "$SVN_HTTPD_PORT" = ""
then then

View File

@ -7,14 +7,14 @@ test_description='git-svn can fetch renamed directories'
. ./lib-git-svn.sh . ./lib-git-svn.sh
test_expect_success 'load repository with renamed directory' " test_expect_success 'load repository with renamed directory' '
svnadmin load -q $rawsvnrepo < ../t9121/renamed-dir.dump svnadmin load -q "$rawsvnrepo" < ../t9121/renamed-dir.dump
" '
test_expect_success 'init and fetch repository' " test_expect_success 'init and fetch repository' '
git svn init $svnrepo/newname && git svn init "$svnrepo/newname" &&
git svn fetch git svn fetch
" '
test_done test_done

View File

@ -153,21 +153,21 @@ test_expect_success 'req_Root failure (conflicting roots)' \
tail log | grep "^error 1 Conflicting roots specified$"' tail log | grep "^error 1 Conflicting roots specified$"'
test_expect_success 'req_Root (strict paths)' \ test_expect_success 'req_Root (strict paths)' \
'cat request-anonymous | git-cvsserver --strict-paths pserver $SERVERDIR >log 2>&1 && 'cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&
sed -ne \$p log | grep "^I LOVE YOU$"' sed -ne \$p log | grep "^I LOVE YOU$"'
test_expect_success 'req_Root failure (strict-paths)' ' test_expect_success 'req_Root failure (strict-paths)' '
! cat request-anonymous | ! cat request-anonymous |
git-cvsserver --strict-paths pserver $WORKDIR >log 2>&1 git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1
' '
test_expect_success 'req_Root (w/o strict-paths)' \ test_expect_success 'req_Root (w/o strict-paths)' \
'cat request-anonymous | git-cvsserver pserver $WORKDIR/ >log 2>&1 && 'cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&
sed -ne \$p log | grep "^I LOVE YOU$"' sed -ne \$p log | grep "^I LOVE YOU$"'
test_expect_success 'req_Root failure (w/o strict-paths)' ' test_expect_success 'req_Root failure (w/o strict-paths)' '
! cat request-anonymous | ! cat request-anonymous |
git-cvsserver pserver $WORKDIR/gitcvs >log 2>&1 git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1
' '
cat >request-base <<EOF cat >request-base <<EOF
@ -180,25 +180,25 @@ Root /gitcvs.git
EOF EOF
test_expect_success 'req_Root (base-path)' \ test_expect_success 'req_Root (base-path)' \
'cat request-base | git-cvsserver --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 && 'cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&
sed -ne \$p log | grep "^I LOVE YOU$"' sed -ne \$p log | grep "^I LOVE YOU$"'
test_expect_success 'req_Root failure (base-path)' ' test_expect_success 'req_Root failure (base-path)' '
! cat request-anonymous | ! cat request-anonymous |
git-cvsserver --strict-paths --base-path $WORKDIR pserver $SERVERDIR >log 2>&1 git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1
' '
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false || exit 1 GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false || exit 1
test_expect_success 'req_Root (export-all)' \ test_expect_success 'req_Root (export-all)' \
'cat request-anonymous | git-cvsserver --export-all pserver $WORKDIR >log 2>&1 && 'cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&
sed -ne \$p log | grep "^I LOVE YOU$"' sed -ne \$p log | grep "^I LOVE YOU$"'
test_expect_success 'req_Root failure (export-all w/o whitelist)' \ test_expect_success 'req_Root failure (export-all w/o whitelist)' \
'! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)' '! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
test_expect_success 'req_Root (everything together)' \ test_expect_success 'req_Root (everything together)' \
'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 && 'cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&
sed -ne \$p log | grep "^I LOVE YOU$"' sed -ne \$p log | grep "^I LOVE YOU$"'
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true || exit 1 GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true || exit 1

View File

@ -10,6 +10,7 @@ commandline, and checks that it would not write any errors
or warnings to log.' or warnings to log.'
gitweb_init () { gitweb_init () {
safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
cat >gitweb_config.perl <<EOF cat >gitweb_config.perl <<EOF
#!/usr/bin/perl #!/usr/bin/perl
@ -17,16 +18,16 @@ gitweb_init () {
our \$version = "current"; our \$version = "current";
our \$GIT = "git"; our \$GIT = "git";
our \$projectroot = "$(pwd)"; our \$projectroot = "$safe_pwd";
our \$project_maxdepth = 8; our \$project_maxdepth = 8;
our \$home_link_str = "projects"; our \$home_link_str = "projects";
our \$site_name = "[localhost]"; our \$site_name = "[localhost]";
our \$site_header = ""; our \$site_header = "";
our \$site_footer = ""; our \$site_footer = "";
our \$home_text = "indextext.html"; our \$home_text = "indextext.html";
our @stylesheets = ("file:///$(pwd)/../../gitweb/gitweb.css"); our @stylesheets = ("file:///$safe_pwd/../../gitweb/gitweb.css");
our \$logo = "file:///$(pwd)/../../gitweb/git-logo.png"; our \$logo = "file:///$safe_pwd/../../gitweb/git-logo.png";
our \$favicon = "file:///$(pwd)/../../gitweb/git-favicon.png"; our \$favicon = "file:///$safe_pwd/../../gitweb/git-favicon.png";
our \$projects_list = ""; our \$projects_list = "";
our \$export_ok = ""; our \$export_ok = "";
our \$strict_export = ""; our \$strict_export = "";
@ -53,7 +54,7 @@ gitweb_run () {
# written to web server logs, so we are not interested in that: # written to web server logs, so we are not interested in that:
# we are interested only in properly formatted errors/warnings # we are interested only in properly formatted errors/warnings
rm -f gitweb.log && rm -f gitweb.log &&
perl -- $(pwd)/../../gitweb/gitweb.perl \ perl -- "$(pwd)/../../gitweb/gitweb.perl" \
>/dev/null 2>gitweb.log && >/dev/null 2>gitweb.log &&
if grep -q -s "^[[]" gitweb.log >/dev/null; then false; else true; fi if grep -q -s "^[[]" gitweb.log >/dev/null; then false; else true; fi

View File

@ -36,7 +36,7 @@ test_expect_success 'setup cvsroot' 'cvs init'
test_expect_success 'setup a cvs module' ' test_expect_success 'setup a cvs module' '
mkdir $CVSROOT/module && mkdir "$CVSROOT/module" &&
cvs co -d module-cvs module && cvs co -d module-cvs module &&
cd module-cvs && cd module-cvs &&
cat <<EOF >o_fortuna && cat <<EOF >o_fortuna &&