提交 761adeb4 编写于 作者: J Junio C Hamano

Merge branch 'bd/tests'

* bd/tests:
  Rename the test trash directory to contain spaces.
  Fix tests breaking when checkout path contains shell metacharacters
  Don't use the 'export NAME=value' in the test scripts.
  lib-git-svn.sh: Fix quoting issues with paths containing shell metacharacters
  test-lib.sh: Fix some missing path quoting
  Use test_set_editor in t9001-send-email.sh
  test-lib.sh: Add a test_set_editor function to safely set $VISUAL
  git-send-email.perl: Handle shell metacharacters in $EDITOR properly
  config.c: Escape backslashes in section names properly
  git-rebase.sh: Fix --merge --abort failures when path contains whitespace

Conflicts:

	t/t9115-git-svn-dcommit-funky-renames.sh
......@@ -698,7 +698,7 @@ static int store_write_section(int fd, const char* key)
if (dot) {
strbuf_addf(&sb, "[%.*s \"", (int)(dot - key), key);
for (i = dot - key + 1; i < store.baselen; i++) {
if (key[i] == '"')
if (key[i] == '"' || key[i] == '\\')
strbuf_addch(&sb, '\\');
strbuf_addch(&sb, key[i]);
}
......
......@@ -214,7 +214,7 @@ do
else
die "No rebase in progress?"
fi
git reset --hard $(cat $dotest/orig-head)
git reset --hard $(cat "$dotest/orig-head")
rm -r "$dotest"
exit
;;
......
......@@ -513,7 +513,7 @@ sub expand_aliases {
close(C);
my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
system('sh', '-c', '$0 $@', $editor, $compose_filename);
system('sh', '-c', $editor.' "$@"', $editor, $compose_filename);
open(C2,">",$compose_filename . ".final")
or die "Failed to open $compose_filename.final : " . $!;
......
......@@ -20,12 +20,13 @@ then
fi
svnrepo=$PWD/svnrepo
export svnrepo
perl -w -e "
use SVN::Core;
use SVN::Repos;
\$SVN::Core::VERSION gt '1.1.0' or exit(42);
system(qw/svnadmin create --fs-type fsfs/, '$svnrepo') == 0 or exit(41);
system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41);
" >&3 2>&4
x=$?
if test $x -ne 0
......
......@@ -61,7 +61,8 @@ prepare_httpd() {
-new -x509 -nodes \
-out $HTTPD_ROOT_PATH/httpd.pem \
-keyout $HTTPD_ROOT_PATH/httpd.pem
export GIT_SSL_NO_VERIFY=t
GIT_SSL_NO_VERIFY=t
export GIT_SSL_NO_VERIFY
HTTPD_PARA="$HTTPD_PARA -DSSL"
else
HTTPD_URL=http://127.0.0.1:$LIB_HTTPD_PORT
......
......@@ -305,10 +305,10 @@ test_expect_success 'absolute path works as expected' '
file="$dir"/index &&
test "$file" = "$(test-absolute-path $dir2/index)" &&
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 &&
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' '
......
......@@ -21,7 +21,7 @@ LF='
'
test_expect_success 'update-index and ls-files' '
cd $HERE &&
cd "$HERE" &&
git update-index --add one &&
case "`git ls-files`" in
one) echo ok one ;;
......@@ -41,7 +41,7 @@ test_expect_success 'update-index and ls-files' '
'
test_expect_success 'cat-file' '
cd $HERE &&
cd "$HERE" &&
two=`git ls-files -s dir/two` &&
two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
echo "$two" &&
......@@ -54,7 +54,7 @@ test_expect_success 'cat-file' '
rm -f actual dir/actual
test_expect_success 'diff-files' '
cd $HERE &&
cd "$HERE" &&
echo a >>one &&
echo d >>dir/two &&
case "`git diff-files --name-only`" in
......@@ -74,7 +74,7 @@ test_expect_success 'diff-files' '
'
test_expect_success 'write-tree' '
cd $HERE &&
cd "$HERE" &&
top=`git write-tree` &&
echo $top &&
cd dir &&
......@@ -84,7 +84,7 @@ test_expect_success 'write-tree' '
'
test_expect_success 'checkout-index' '
cd $HERE &&
cd "$HERE" &&
git checkout-index -f -u one &&
cmp one original.one &&
cd dir &&
......@@ -93,7 +93,7 @@ test_expect_success 'checkout-index' '
'
test_expect_success 'read-tree' '
cd $HERE &&
cd "$HERE" &&
rm -f one dir/two &&
tree=`git write-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' '
cd $HERE &&
cd "$HERE" &&
git commit -a -m 1 &&
cd $HERE/.git &&
cd "$HERE"/.git &&
git show -s HEAD
'
test_expect_success 'no file/rev ambiguity check inside a bare repo' '
cd $HERE &&
cd "$HERE" &&
git clone -s --bare .git foo.git &&
cd foo.git && GIT_DIR=. git show -s HEAD
'
# This still does not work as it should...
: test_expect_success 'no file/rev ambiguity check inside a bare repo' '
cd $HERE &&
cd "$HERE" &&
git clone -s --bare .git foo.git &&
cd foo.git && git show -s HEAD
'
test_expect_success 'detection should not be fooled by a symlink' '
cd $HERE &&
cd "$HERE" &&
rm -fr foo.git &&
git clone -s .git another &&
ln -s another yetanother &&
......
......@@ -34,4 +34,10 @@ test_expect_success 'add key in different section' '
check section2.key bar
'
SECTION="test.q\"s\\sq'sp e.key"
test_expect_success 'make sure git-config escapes section names properly' '
git config "$SECTION" bar &&
check "$SECTION" bar
'
test_done
......@@ -51,8 +51,9 @@ test_rev_parse 'core.bare undefined' false false true
mkdir work || exit 1
cd work || exit 1
export GIT_DIR=../.git
export GIT_CONFIG="$(pwd)"/../.git/config
GIT_DIR=../.git
GIT_CONFIG="$(pwd)"/../.git/config
export GIT_DIR GIT_CONFIG
git config core.bare false
test_rev_parse 'GIT_DIR=../.git, core.bare = false' false false true ''
......@@ -64,8 +65,8 @@ git config --unset core.bare
test_rev_parse 'GIT_DIR=../.git, core.bare undefined' false false true ''
mv ../.git ../repo.git || exit 1
export GIT_DIR=../repo.git
export GIT_CONFIG="$(pwd)"/../repo.git/config
GIT_DIR=../repo.git
GIT_CONFIG="$(pwd)"/../repo.git/config
git config core.bare false
test_rev_parse 'GIT_DIR=../repo.git, core.bare = false' false false true ''
......
......@@ -32,24 +32,25 @@ mkdir -p work/sub/dir || exit 1
mv .git repo.git || exit 1
say "core.worktree = relative path"
export GIT_DIR=repo.git
export GIT_CONFIG="$(pwd)"/$GIT_DIR/config
GIT_DIR=repo.git
GIT_CONFIG="$(pwd)"/$GIT_DIR/config
export GIT_DIR GIT_CONFIG
unset GIT_WORK_TREE
git config core.worktree ../work
test_rev_parse 'outside' false false false
cd work || exit 1
export GIT_DIR=../repo.git
export GIT_CONFIG="$(pwd)"/$GIT_DIR/config
GIT_DIR=../repo.git
GIT_CONFIG="$(pwd)"/$GIT_DIR/config
test_rev_parse 'inside' false false true ''
cd sub/dir || exit 1
export GIT_DIR=../../../repo.git
export GIT_CONFIG="$(pwd)"/$GIT_DIR/config
GIT_DIR=../../../repo.git
GIT_CONFIG="$(pwd)"/$GIT_DIR/config
test_rev_parse 'subdirectory' false false true sub/dir/
cd ../../.. || exit 1
say "core.worktree = absolute path"
export GIT_DIR=$(pwd)/repo.git
export GIT_CONFIG=$GIT_DIR/config
GIT_DIR=$(pwd)/repo.git
GIT_CONFIG=$GIT_DIR/config
git config core.worktree "$(pwd)/work"
test_rev_parse 'outside' false false false
cd work || exit 1
......@@ -59,25 +60,26 @@ test_rev_parse 'subdirectory' false false true sub/dir/
cd ../../.. || exit 1
say "GIT_WORK_TREE=relative path (override core.worktree)"
export GIT_DIR=$(pwd)/repo.git
export GIT_CONFIG=$GIT_DIR/config
GIT_DIR=$(pwd)/repo.git
GIT_CONFIG=$GIT_DIR/config
git config core.worktree non-existent
export GIT_WORK_TREE=work
GIT_WORK_TREE=work
export GIT_WORK_TREE
test_rev_parse 'outside' false false false
cd work || exit 1
export GIT_WORK_TREE=.
GIT_WORK_TREE=.
test_rev_parse 'inside' false false true ''
cd sub/dir || exit 1
export GIT_WORK_TREE=../..
GIT_WORK_TREE=../..
test_rev_parse 'subdirectory' false false true sub/dir/
cd ../../.. || exit 1
mv work repo.git/work
say "GIT_WORK_TREE=absolute path, work tree below git dir"
export GIT_DIR=$(pwd)/repo.git
export GIT_CONFIG=$GIT_DIR/config
export GIT_WORK_TREE=$(pwd)/repo.git/work
GIT_DIR=$(pwd)/repo.git
GIT_CONFIG=$GIT_DIR/config
GIT_WORK_TREE=$(pwd)/repo.git/work
test_rev_parse 'outside' false false false
cd repo.git || exit 1
test_rev_parse 'in repo.git' false true false
......
......@@ -20,7 +20,7 @@ test_expect_success setup '
'
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 &&
(
cd cloned &&
......
......@@ -9,7 +9,8 @@ This test runs git rebase and checks that the author information is not lost.
'
. ./test-lib.sh
export GIT_AUTHOR_EMAIL=bogus_email_address
GIT_AUTHOR_EMAIL=bogus_email_address
export GIT_AUTHOR_EMAIL
test_expect_success \
'prepare repository with topic branches' \
......
......@@ -91,9 +91,8 @@ for line in $FAKE_LINES; do
done
EOF
test_set_editor "$(pwd)/fake-editor.sh"
chmod a+x fake-editor.sh
VISUAL="$(pwd)/fake-editor.sh"
export VISUAL
test_expect_success 'no changes are a nop' '
git rebase -i F &&
......
......@@ -4,7 +4,13 @@ test_description='git rebase --abort tests'
. ./test-lib.sh
### Test that we handle space characters properly
work_dir="$(pwd)/test dir"
test_expect_success setup '
mkdir -p "$work_dir" &&
cd "$work_dir" &&
git init &&
echo a > a &&
git add a &&
git commit -m a &&
......@@ -28,32 +34,35 @@ testrebase() {
dotest=$2
test_expect_success "rebase$type --abort" '
cd "$work_dir" &&
# Clean up the state from the previous one
git reset --hard pre-rebase
test_must_fail git rebase'"$type"' master &&
test -d '$dotest' &&
git reset --hard pre-rebase &&
test_must_fail git rebase$type master &&
test -d "$dotest" &&
git rebase --abort &&
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
test ! -d '$dotest'
test ! -d "$dotest"
'
test_expect_success "rebase$type --abort after --skip" '
cd "$work_dir" &&
# Clean up the state from the previous one
git reset --hard pre-rebase
test_must_fail git rebase'"$type"' master &&
test -d '$dotest' &&
git reset --hard pre-rebase &&
test_must_fail git rebase$type master &&
test -d "$dotest" &&
test_must_fail git rebase --skip &&
test $(git rev-parse HEAD) = $(git rev-parse master) &&
git-rebase --abort &&
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
test ! -d '$dotest'
test ! -d "$dotest"
'
test_expect_success "rebase$type --abort after --continue" '
cd "$work_dir" &&
# Clean up the state from the previous one
git reset --hard pre-rebase
test_must_fail git rebase'"$type"' master &&
test -d '$dotest' &&
git reset --hard pre-rebase &&
test_must_fail git rebase$type master &&
test -d "$dotest" &&
echo c > a &&
echo d >> a &&
git add a &&
......@@ -61,7 +70,7 @@ testrebase() {
test $(git rev-parse HEAD) != $(git rev-parse master) &&
git rebase --abort &&
test $(git rev-parse to-rebase) = $(git rev-parse pre-rebase) &&
test ! -d '$dotest'
test ! -d "$dotest"
'
}
......
......@@ -10,7 +10,8 @@ checks that git cherry only returns the second patch in the local branch
'
. ./test-lib.sh
export GIT_AUTHOR_EMAIL=bogus_email_address
GIT_AUTHOR_EMAIL=bogus_email_address
export GIT_AUTHOR_EMAIL
test_expect_success \
'prepare repository with topic branch, and check cherry finds the 2 patches from there' \
......
......@@ -31,7 +31,7 @@ add () {
sec=$(($sec+1))
commit=$(echo "$text" | GIT_AUTHOR_DATE=$sec \
git commit-tree $tree $parents 2>>log2.txt)
export $name=$commit
eval "$name=$commit; export $name"
echo $commit > .git/refs/heads/$branch
eval ${branch}TIP=$commit
}
......@@ -129,7 +129,7 @@ pull_to_client 2nd "B" $((64*3))
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
......
......@@ -17,7 +17,7 @@ test_expect_success setup '
git show-ref -d | sed -e "s/ / /"
) >expected.all &&
git remote add self $(pwd)/.git
git remote add self "$(pwd)/.git"
'
......
......@@ -105,7 +105,7 @@ test_expect_success 'fetch with insteadOf' '
(
TRASH=$(pwd)/ &&
cd testrepo &&
git config url.$TRASH.insteadOf trash/
git config "url.$TRASH.insteadOf" trash/ &&
git config remote.up.url trash/. &&
git config remote.up.fetch "refs/heads/*:refs/remotes/origin/*" &&
git fetch up &&
......@@ -145,8 +145,8 @@ test_expect_success 'push with wildcard' '
test_expect_success 'push with insteadOf' '
mk_empty &&
TRASH=$(pwd)/ &&
git config url.$TRASH.insteadOf trash/ &&
TRASH="$(pwd)/" &&
git config "url./$TRASH/.insteadOf" trash/ &&
git push trash/testrepo refs/heads/master:refs/remotes/origin/master &&
(
cd testrepo &&
......
......@@ -51,7 +51,7 @@ diff expected current'
cd "$base_dir"
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"
......
......@@ -81,9 +81,9 @@ test_valid_repo'
cd "$base_dir"
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 &&
test_valid_repo"
test_valid_repo'
cd "$base_dir"
......
......@@ -49,13 +49,15 @@ as_author()
shift 1
_save=$GIT_AUTHOR_EMAIL
export GIT_AUTHOR_EMAIL="$_author"
GIT_AUTHOR_EMAIL="$_author"
export GIT_AUTHOR_EMAIL
"$@"
if test -z "$_save"
then
unset GIT_AUTHOR_EMAIL
else
export GIT_AUTHOR_EMAIL="$_save"
GIT_AUTHOR_EMAIL="$_save"
export GIT_AUTHOR_EMAIL
fi
}
......@@ -69,7 +71,8 @@ on_committer_date()
{
_date=$1
shift 1
export GIT_COMMITTER_DATE="$_date"
GIT_COMMITTER_DATE="$_date"
export GIT_COMMITTER_DATE
"$@"
unset GIT_COMMITTER_DATE
}
......
......@@ -13,10 +13,11 @@ T=$(git write-tree)
M=1130000000
Z=+0000
export GIT_COMMITTER_EMAIL=git@comm.iter.xz
export GIT_COMMITTER_NAME='C O Mmiter'
export GIT_AUTHOR_NAME='A U Thor'
export GIT_AUTHOR_EMAIL=git@au.thor.xz
GIT_COMMITTER_EMAIL=git@comm.iter.xz
GIT_COMMITTER_NAME='C O Mmiter'
GIT_AUTHOR_NAME='A U Thor'
GIT_AUTHOR_EMAIL=git@au.thor.xz
export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
doit() {
OFFSET=$1; shift
......
......@@ -82,14 +82,14 @@ test_expect_success 'merge-msg test #1' '
git diff actual expected
'
cat >expected <<\EOF
Merge branch 'left' of ../trash
cat >expected <<EOF
Merge branch 'left' of ../$test
EOF
test_expect_success 'merge-msg test #2' '
git checkout master &&
git fetch ../trash left &&
git fetch ../"$test" left &&
git fmt-merge-msg <.git/FETCH_HEAD >actual &&
git diff actual expected
......
......@@ -125,7 +125,7 @@ test_expect_success 'use index-filter to move into a subdirectory' '
"git ls-files -s | sed \"s-\\t-&newsubdir/-\" |
GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \
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_expect_success 'stops when msg filter fails' '
......
......@@ -626,7 +626,8 @@ esac
cp -R ../t7004 ./gpghome
chmod 0700 gpghome
export GNUPGHOME="$(pwd)/gpghome"
GNUPGHOME="$(pwd)/gpghome"
export GNUPGHOME
get_tag_header signed-tag $commit commit $time >expect
echo 'A signed tag message' >>expect
......
......@@ -122,7 +122,7 @@ test_expect_success 'commit using absolute path names' '
test_expect_success 'log using absolute path names' '
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 "$(pwd)/a/b/c/d" >f2.txt &&
......
......@@ -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 &&
would_clean=$(
cd docs &&
git clean -n $(pwd)/../src |
git clean -n "$(pwd)/../src" |
sed -n -e "s|^Would remove ||p"
) &&
test "$would_clean" = ../src/part3.c || {
......
......@@ -79,8 +79,8 @@ test_expect_success \
cat >editor <<\EOF
#!/bin/sh
sed -e "s/a file/an amend commit/g" < $1 > $1-
mv $1- $1
sed -e "s/a file/an amend commit/g" < "$1" > "$1-"
mv "$1-" "$1"
EOF
chmod 755 editor
......@@ -99,8 +99,8 @@ test_expect_success \
cat >editor <<\EOF
#!/bin/sh
sed -e "s/amend/older/g" < $1 > $1-
mv $1- $1
sed -e "s/amend/older/g" < "$1" > "$1-"
mv "$1-" "$1"
EOF
chmod 755 editor
......
......@@ -19,6 +19,9 @@ cp FAKE_MSG "$1"
exit 0
EOF
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"
export FAKE_EDITOR
......@@ -27,7 +30,7 @@ test_expect_success 'with no hook (editor)' '
echo "more foo" >> file &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
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 &&
git add file &&
echo "additional content" > FAKE_MSG &&
GIT_EDITOR="$FAKE_EDITOR" git commit &&
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
commit_msg_is "new message"
'
......@@ -212,7 +215,7 @@ test_expect_success "hook doesn't edit commit message (editor)" '
echo "more plus" >> file &&
git add file &&
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"
'
......
......@@ -18,6 +18,9 @@ cat > fake-editor <<'EOF'
exit 0
EOF
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"
export FAKE_EDITOR
......@@ -58,7 +61,7 @@ test_expect_success 'with hook (-m editor)' '
echo "more" >> 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
'
......@@ -85,7 +88,7 @@ test_expect_success 'with hook (-F editor)' '
echo "more" >> 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
'
......@@ -104,7 +107,7 @@ test_expect_success 'with hook (editor)' '
echo "more more" >> file &&
git add file &&
GIT_EDITOR="$FAKE_EDITOR" git commit &&
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
test "`git log -1 --pretty=format:%s`" = default
'
......@@ -114,7 +117,7 @@ test_expect_success 'with hook (--amend)' '
head=`git rev-parse HEAD` &&
echo "more" >> 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"
'
......@@ -124,7 +127,7 @@ test_expect_success 'with hook (-c)' '
head=`git rev-parse HEAD` &&
echo "more" >> 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"
'
......@@ -139,7 +142,7 @@ test_expect_success 'with failing hook' '
head=`git rev-parse HEAD` &&
echo "more" >> 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` &&
echo "more" >> file &&
git add file &&
! GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify -c $head
! GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify -c $head
'
......
......@@ -139,15 +139,16 @@ test_expect_success 'Valid In-Reply-To when prompting' '
test_expect_success 'setup fake editor' '
(echo "#!/bin/sh" &&
echo "echo fake edit >>\$1"
echo "echo fake edit >>\"\$1\""
) >fake-editor &&
chmod +x fake-editor
'
test_set_editor "$(pwd)/fake-editor"
test_expect_success '--compose works' '
clean_fake_sendmail &&
echo y | \
GIT_EDITOR=$(pwd)/fake-editor \
GIT_SEND_EMAIL_NOTTY=1 \
git send-email \
--compose --subject foo \
......
......@@ -20,39 +20,39 @@ esac
echo 'define NO_SVN_TESTS to skip git-svn tests'
test_expect_success \
'initialize git-svn' "
'initialize git-svn' '
mkdir import &&
cd import &&
echo foo > foo &&
ln -s foo foo.link
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 &&
echo 'zzz' > bar/zzz &&
echo '#!/bin/sh' > exec.sh &&
echo "zzz" > bar/zzz &&
echo "#!/bin/sh" > 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 .. &&
rm -rf import &&
git-svn init $svnrepo"
git-svn init "$svnrepo"'
test_expect_success \
'import an SVN revision into git' \
'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'
test_expect_success "$name" "
test_expect_success "$name" '
git checkout -f -b mybranch remotes/git-svn &&
mv dir/a/b/c/d/e/file dir/file &&
cp dir/file file &&
git update-index --add --remove dir/a/b/c/d/e/file dir/file file &&
git commit -m '$name' &&
git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch &&
svn up '$SVN_TREE' &&
test -d '$SVN_TREE'/dir && test ! -d '$SVN_TREE'/dir/a"
svn up "$SVN_TREE" &&
test -d "$SVN_TREE"/dir && test ! -d "$SVN_TREE"/dir/a'
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'
test_expect_success "$name" "
rm -rf dir '$GIT_DIR'/index &&
test_expect_success "$name" '
rm -rf dir "$GIT_DIR"/index &&
git checkout -f -b mybranch2 remotes/git-svn &&
mv bar/zzz zzz &&
rm -rf bar &&
mv zzz bar &&
git update-index --remove -- bar/zzz &&
git update-index --add -- bar &&
git commit -m '$name' &&
git commit -m "$name" &&
! 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'
test_expect_success "$name" "
rm -f '$GIT_DIR'/index &&
test_expect_success "$name" '
rm -f "$GIT_DIR"/index &&
git checkout -f -b mybranch3 remotes/git-svn &&
rm bar/zzz &&
git update-index --remove bar/zzz &&
mkdir bar/zzz &&
echo yyy > 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 \
remotes/git-svn..mybranch3" || true
remotes/git-svn..mybranch3' || true
name='detect node change from directory to file #2'
test_expect_success "$name" "
rm -f '$GIT_DIR'/index &&
test_expect_success "$name" '
rm -f "$GIT_DIR"/index &&
git checkout -f -b mybranch4 remotes/git-svn &&
rm -rf dir &&
git update-index --remove -- dir/file &&
touch dir &&
echo asdf > dir &&
git update-index --add -- dir &&
git commit -m '$name' &&
git commit -m "$name" &&
! 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'
test_expect_success "$name" "
rm -f '$GIT_DIR'/index &&
test_expect_success "$name" '
rm -f "$GIT_DIR"/index &&
git checkout -f -b mybranch5 remotes/git-svn &&
chmod -x exec.sh &&
git update-index exec.sh &&
git commit -m '$name' &&
git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' &&
test ! -x '$SVN_TREE'/exec.sh"
svn up "$SVN_TREE" &&
test ! -x "$SVN_TREE"/exec.sh'
name='add executable bit back file'
test_expect_success "$name" "
test_expect_success "$name" '
chmod +x exec.sh &&
git update-index exec.sh &&
git commit -m '$name' &&
git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' &&
test -x '$SVN_TREE'/exec.sh"
svn up "$SVN_TREE" &&
test -x "$SVN_TREE"/exec.sh'
name='executable file becomes a symlink to bar/zzz (file)'
test_expect_success "$name" "
test_expect_success "$name" '
rm exec.sh &&
ln -s bar/zzz exec.sh &&
git update-index exec.sh &&
git commit -m '$name' &&
git commit -m "$name" &&
git-svn set-tree --find-copies-harder --rmdir \
remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' &&
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'
test_expect_success "$name" "
test_expect_success "$name" '
chmod +x bar/zzz &&
ln -s 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 \
remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' &&
test -x '$SVN_TREE'/bar/zzz &&
test -L '$SVN_TREE'/exec-2.sh"
svn up "$SVN_TREE" &&
test -x "$SVN_TREE"/bar/zzz &&
test -L "$SVN_TREE"/exec-2.sh'
name='modify a symlink to become a file'
test_expect_success "$name" "
test_expect_success "$name" '
echo git help > help || true &&
rm exec-2.sh &&
cp help 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 \
remotes/git-svn..mybranch5 &&
svn up '$SVN_TREE' &&
test -f '$SVN_TREE'/exec-2.sh &&
test ! -L '$SVN_TREE'/exec-2.sh &&
git diff help $SVN_TREE/exec-2.sh"
svn up "$SVN_TREE" &&
test -f "$SVN_TREE"/exec-2.sh &&
test ! -L "$SVN_TREE"/exec-2.sh &&
git diff help "$SVN_TREE"/exec-2.sh'
if test "$have_utf8" = t
then
......@@ -190,10 +190,10 @@ name='test fetch functionality (svn => git) with alternate GIT_SVN_ID'
GIT_SVN_ID=alt
export GIT_SVN_ID
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/alt | grep ^tree | uniq > b &&
git diff a b"
git diff a b'
name='check imported tree checksums expected tree checksums'
rm -f expected
......@@ -219,22 +219,22 @@ test_expect_success 'exit if remote refs are ambigious' "
! git-svn migrate
"
test_expect_success 'exit if init-ing a would clobber a URL' "
svnadmin create ${PWD}/svnrepo2 &&
svn mkdir -m 'mkdir bar' ${svnrepo}2/bar &&
test_expect_success 'exit if init-ing a would clobber a URL' '
svnadmin create "${PWD}/svnrepo2" &&
svn mkdir -m "mkdir bar" "${svnrepo}2/bar" &&
git config --unset svn-remote.svn.fetch \
'^bar:refs/remotes/git-svn$' &&
! git-svn init ${svnrepo}2/bar
"
"^bar:refs/remotes/git-svn$" &&
! git-svn init "${svnrepo}2/bar"
'
test_expect_success \
'init allows us to connect to another directory in the same repo' "
git-svn init --minimize-url -i bar $svnrepo/bar &&
'init allows us to connect to another directory in the same repo' '
git-svn init --minimize-url -i bar "$svnrepo/bar" &&
git config --get svn-remote.svn.fetch \
'^bar:refs/remotes/bar$' &&
"^bar:refs/remotes/bar$" &&
git config --get svn-remote.svn.fetch \
'^:refs/remotes/git-svn$'
"
"^:refs/remotes/git-svn$"
'
test_expect_success 'able to dcommit to a subdirectory' "
git-svn fetch -i bar &&
......
......@@ -52,7 +52,7 @@ EOF
cd ..
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' \
'cd test_wc &&
echo Greetings >> kw.c &&
......@@ -66,7 +66,7 @@ test_expect_success 'setup some commits to svn' \
svn commit -m "Propset Id" &&
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'
name='test svn:keywords ignoring'
......@@ -90,9 +90,9 @@ test_expect_success "propset CR on crlf files" \
cd ..'
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 &&
svn co $svnrepo new_wc"
svn co "$svnrepo" new_wc'
for i in crlf ne_crlf lf ne_lf cr ne_cr empty_cr empty_lf empty empty_crlf
do
......
......@@ -2,29 +2,29 @@
test_description='git-svn rmdir'
. ./lib-git-svn.sh
test_expect_success 'initialize repo' "
test_expect_success 'initialize repo' '
mkdir import &&
cd import &&
mkdir -p deeply/nested/directory/number/1 &&
mkdir -p deeply/nested/directory/number/2 &&
echo foo > deeply/nested/directory/number/1/file &&
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 ..
"
'
test_expect_success 'mirror via git-svn' "
git-svn init $svnrepo &&
test_expect_success 'mirror via git-svn' '
git-svn init "$svnrepo" &&
git-svn fetch &&
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 commit -a -m 'remove another' &&
git commit -a -m "remove another" &&
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
......@@ -10,30 +10,30 @@ test_expect_success 'make history for tracking' '
mkdir import &&
mkdir import/trunk &&
echo hello >> import/trunk/README &&
svn import -m initial import $svnrepo &&
svn import -m initial import "$svnrepo" &&
rm -rf import &&
svn co $svnrepo/trunk trunk &&
svn co "$svnrepo"/trunk trunk &&
echo bye bye >> trunk/README &&
svn rm -m "gone" $svnrepo/trunk &&
svn rm -m "gone" "$svnrepo"/trunk &&
rm -rf trunk &&
mkdir trunk &&
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' '
git svn clone -s $svnrepo x &&
git svn clone -s "$svnrepo" x &&
test -f x/FOLLOWME &&
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 &&
test -n "$(git svn find-rev r1)" &&
git reset --hard $(git svn find-rev r1) &&
test -n \"\$(git svn find-rev r1)\" &&
git reset --hard \$(git svn find-rev r1) &&
test -f README &&
test ! -f FOLLOWME &&
test x$(git svn find-rev r2) = x
'
test x\$(git svn find-rev r2) = x
"
test_done
......@@ -6,165 +6,165 @@
test_description='git-svn fetching'
. ./lib-git-svn.sh
test_expect_success 'initialize repo' "
test_expect_success 'initialize repo' '
mkdir import &&
cd import &&
mkdir -p trunk &&
echo hello > trunk/readme &&
svn import -m 'initial' . $svnrepo &&
svn import -m "initial" . "$svnrepo" &&
cd .. &&
svn co $svnrepo wc &&
svn co "$svnrepo" wc &&
cd wc &&
echo world >> trunk/readme &&
poke trunk/readme &&
svn commit -m 'another commit' &&
svn commit -m "another commit" &&
svn up &&
svn mv trunk thunk &&
echo goodbye >> thunk/readme &&
poke thunk/readme &&
svn commit -m 'bye now' &&
svn commit -m "bye now" &&
cd ..
"
'
test_expect_success 'init and fetch a moved directory' "
git-svn init --minimize-url -i thunk $svnrepo/thunk &&
test_expect_success 'init and fetch a moved directory' '
git-svn init --minimize-url -i thunk "$svnrepo"/thunk &&
git-svn fetch -i thunk &&
test \"\`git rev-parse --verify refs/remotes/thunk@2\`\" \
= \"\`git rev-parse --verify refs/remotes/thunk~1\`\" &&
test \"\`git cat-file blob refs/remotes/thunk:readme |\
sed -n -e '3p'\`\" = goodbye &&
test -z \"\`git config --get svn-remote.svn.fetch \
'^trunk:refs/remotes/thunk@2$'\`\"
"
test "`git rev-parse --verify refs/remotes/thunk@2`" \
= "`git rev-parse --verify refs/remotes/thunk~1`" &&
test "`git cat-file blob refs/remotes/thunk:readme |\
sed -n -e "3p"`" = goodbye &&
test -z "`git config --get svn-remote.svn.fetch \
"^trunk:refs/remotes/thunk@2$"`"
'
test_expect_success 'init and fetch from one svn-remote' "
git config svn-remote.svn.url $svnrepo &&
test_expect_success 'init and fetch from one svn-remote' '
git config svn-remote.svn.url "$svnrepo" &&
git config --add svn-remote.svn.fetch \
trunk:refs/remotes/svn/trunk &&
git config --add svn-remote.svn.fetch \
thunk:refs/remotes/svn/thunk &&
git-svn fetch -i svn/thunk &&
test \"\`git rev-parse --verify refs/remotes/svn/trunk\`\" \
= \"\`git rev-parse --verify refs/remotes/svn/thunk~1\`\" &&
test \"\`git cat-file blob refs/remotes/svn/thunk:readme |\
sed -n -e '3p'\`\" = goodbye
"
test "`git rev-parse --verify refs/remotes/svn/trunk`" \
= "`git rev-parse --verify refs/remotes/svn/thunk~1`" &&
test "`git cat-file blob refs/remotes/svn/thunk:readme |\
sed -n -e "3p"`" = goodbye
'
test_expect_success 'follow deleted parent' "
(svn cp -m 'resurrecting trunk as junk' \
$svnrepo/trunk@2 $svnrepo/junk ||
svn cp -m 'resurrecting trunk as junk' \
-r2 $svnrepo/trunk $svnrepo/junk) &&
test_expect_success 'follow deleted parent' '
(svn cp -m "resurrecting trunk as junk" \
"$svnrepo"/trunk@2 "$svnrepo"/junk ||
svn cp -m "resurrecting trunk as junk" \
-r2 "$svnrepo"/trunk "$svnrepo"/junk) &&
git config --add svn-remote.svn.fetch \
junk:refs/remotes/svn/junk &&
git-svn fetch -i svn/thunk &&
git-svn fetch -i svn/junk &&
test -z \"\`git diff svn/junk svn/trunk\`\" &&
test \"\`git merge-base svn/junk svn/trunk\`\" \
= \"\`git rev-parse svn/trunk\`\"
"
test -z "`git diff svn/junk svn/trunk`" &&
test "`git merge-base svn/junk 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 &&
echo hi > import/trunk/thunk/bump/thud/file &&
svn import -m 'import a larger parent' import $svnrepo/larger-parent &&
svn cp -m 'hi' $svnrepo/larger-parent $svnrepo/another-larger &&
svn import -m "import a larger parent" import "$svnrepo"/larger-parent &&
svn cp -m "hi" "$svnrepo"/larger-parent "$svnrepo"/another-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 rev-parse --verify refs/remotes/larger &&
git rev-parse --verify \
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\`\" = \
\"\`git rev-parse refs/remotes/larger\`\"
refs/remotes/larger`" = \
"`git rev-parse refs/remotes/larger`"
true
"
'
test_expect_success 'follow higher-level parent' "
svn mkdir -m 'follow higher-level parent' $svnrepo/blob &&
svn co $svnrepo/blob blob &&
test_expect_success 'follow higher-level parent' '
svn mkdir -m "follow higher-level parent" "$svnrepo"/blob &&
svn co "$svnrepo"/blob blob &&
cd blob &&
echo hi > hi &&
svn add hi &&
svn commit -m 'hihi' &&
svn commit -m "hihi" &&
cd ..
svn mkdir -m 'new glob at top level' $svnrepo/glob &&
svn mv -m 'move blob down a level' $svnrepo/blob $svnrepo/glob/blob &&
git-svn init --minimize-url -i blob $svnrepo/glob/blob &&
svn mkdir -m "new glob at top level" "$svnrepo"/glob &&
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 fetch -i blob
"
'
test_expect_success 'follow deleted directory' "
svn mv -m 'bye!' $svnrepo/glob/blob/hi $svnrepo/glob/blob/bye &&
svn rm -m 'remove glob' $svnrepo/glob &&
git-svn init --minimize-url -i glob $svnrepo/glob &&
test_expect_success 'follow deleted directory' '
svn mv -m "bye!" "$svnrepo"/glob/blob/hi "$svnrepo"/glob/blob/bye &&
svn rm -m "remove glob" "$svnrepo"/glob &&
git-svn init --minimize-url -i glob "$svnrepo"/glob &&
git-svn fetch -i glob &&
test \"\`git cat-file blob refs/remotes/glob:blob/bye\`\" = hi &&
test \"\`git ls-tree refs/remotes/glob | wc -l \`\" -eq 1
"
test "`git cat-file blob refs/remotes/glob:blob/bye`" = hi &&
test "`git ls-tree refs/remotes/glob | wc -l `" -eq 1
'
# ref: r9270 of the Subversion repository: (http://svn.collab.net/repos/svn)
# 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 &&
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/t/\$i.t; \
echo $i > import/trunk/subversion/bindings/swig/perl/$i.pm &&
echo _$i > import/trunk/subversion/bindings/swig/perl/t/$i.t; \
done &&
echo 'bad delete test' > \
echo "bad delete test" > \
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 &&
cd import &&
svn import -m 'r9270 test' . $svnrepo/r9270 &&
svn import -m "r9270 test" . "$svnrepo"/r9270 &&
cd .. &&
svn co $svnrepo/r9270/trunk/subversion/bindings/swig/perl r9270 &&
svn co "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl r9270 &&
cd r9270 &&
svn mkdir native &&
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 &&
poke native/t/c.t &&
svn commit -m 'reorg test' &&
svn commit -m "reorg test" &&
cd .. &&
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 &&
test \`git rev-list r9270-t | wc -l\` -eq 2 &&
test \"\`git ls-tree --name-only r9270-t~1\`\" = \
\"\`git ls-tree --name-only r9270-t\`\"
"
test `git rev-list r9270-t | wc -l` -eq 2 &&
test "`git ls-tree --name-only r9270-t~1`" = \
"`git ls-tree --name-only r9270-t`"
'
test_expect_success "track initial change if it was only made to parent" "
svn cp -m 'wheee!' $svnrepo/r9270/trunk $svnrepo/r9270/drunk &&
test_expect_success "track initial change if it was only made to parent" '
svn cp -m "wheee!" "$svnrepo"/r9270/trunk "$svnrepo"/r9270/drunk &&
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 &&
test \`git rev-list r9270-d | wc -l\` -eq 3 &&
test \"\`git ls-tree --name-only r9270-t\`\" = \
\"\`git ls-tree --name-only r9270-d\`\" &&
test \"\`git rev-parse r9270-t\`\" = \
\"\`git rev-parse r9270-d~1\`\"
"
test `git rev-list r9270-d | wc -l` -eq 3 &&
test "`git ls-tree --name-only r9270-t`" = \
"`git ls-tree --name-only r9270-d`" &&
test "`git rev-parse r9270-t`" = \
"`git rev-parse r9270-d~1`"
'
test_expect_success "track multi-parent paths" "
svn cp -m 'resurrect /glob' $svnrepo/r9270 $svnrepo/glob &&
test_expect_success "track multi-parent paths" '
svn cp -m "resurrect /glob" "$svnrepo"/r9270 "$svnrepo"/glob &&
git-svn multi-fetch &&
test \`git cat-file commit refs/remotes/glob | \
grep '^parent ' | wc -l\` -eq 2
"
test `git cat-file commit refs/remotes/glob | \
grep "^parent " | wc -l` -eq 2
'
test_expect_success "multi-fetch continues to work" "
git-svn multi-fetch
"
test_expect_success "multi-fetch works off a 'clean' repository" "
rm -r $GIT_DIR/svn $GIT_DIR/refs/remotes $GIT_DIR/logs &&
mkdir $GIT_DIR/svn &&
test_expect_success "multi-fetch works off a 'clean' repository" '
rm -r "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" "$GIT_DIR/logs" &&
mkdir "$GIT_DIR/svn" &&
git-svn multi-fetch
"
'
test_debug 'gitk --all &'
......
......@@ -4,18 +4,18 @@
test_description='git-svn commit-diff'
. ./lib-git-svn.sh
test_expect_success 'initialize repo' "
test_expect_success 'initialize repo' '
mkdir import &&
cd import &&
echo hello > readme &&
svn import -m 'initial' . $svnrepo &&
svn import -m "initial" . "$svnrepo" &&
cd .. &&
echo hello > readme &&
git update-index --add readme &&
git commit -a -m 'initial' &&
git commit -a -m "initial" &&
echo world >> readme &&
git commit -a -m 'another'
"
git commit -a -m "another"
'
head=`git rev-parse --verify HEAD^0`
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
# already tested commit extensively elsewhere
test_expect_success 'test the commit-diff command' "
test -n '$prev' && test -n '$head' &&
git-svn commit-diff -r1 '$prev' '$head' '$svnrepo' &&
svn co $svnrepo wc &&
test_expect_success 'test the commit-diff command' '
test -n "$prev" && test -n "$head" &&
git-svn commit-diff -r1 "$prev" "$head" "$svnrepo" &&
svn co "$svnrepo" wc &&
cmp readme wc/readme
"
'
test_expect_success 'commit-diff to a sub-directory (with git-svn config)' "
svn import -m 'sub-directory' import $svnrepo/subdir &&
git-svn init --minimize-url $svnrepo/subdir &&
test_expect_success 'commit-diff to a sub-directory (with git-svn config)' '
svn import -m "sub-directory" import "$svnrepo"/subdir &&
git-svn init --minimize-url "$svnrepo"/subdir &&
git-svn fetch &&
git-svn commit-diff -r3 '$prev' '$head' &&
svn cat $svnrepo/subdir/readme > readme.2 &&
git-svn commit-diff -r3 "$prev" "$head" &&
svn cat "$svnrepo"/subdir/readme > readme.2 &&
cmp readme readme.2
"
'
test_done
......@@ -4,56 +4,56 @@
test_description='git-svn commit-diff clobber'
. ./lib-git-svn.sh
test_expect_success 'initialize repo' "
test_expect_success 'initialize repo' '
mkdir import &&
cd import &&
echo initial > file &&
svn import -m 'initial' . $svnrepo &&
svn import -m "initial" . "$svnrepo" &&
cd .. &&
echo initial > file &&
git update-index --add file &&
git commit -a -m 'initial'
"
test_expect_success 'commit change from svn side' "
svn co $svnrepo t.svn &&
git commit -a -m "initial"
'
test_expect_success 'commit change from svn side' '
svn co "$svnrepo" t.svn &&
cd t.svn &&
echo second line from svn >> file &&
poke file &&
svn commit -m 'second line from svn' &&
svn commit -m "second line from svn" &&
cd .. &&
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 &&
git commit -a -m 'second line from git' &&
! git-svn commit-diff -r1 HEAD~1 HEAD $svnrepo
"
git commit -a -m "second line from git" &&
! 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 &&
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 &&
git commit -a -m 'third line from git' &&
git-svn commit-diff -r2 HEAD~1 HEAD $svnrepo
"
git commit -a -m "third line from git" &&
git-svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"
'
test_expect_success 'dcommit fails to commit because of conflict' "
git-svn init $svnrepo &&
test_expect_success 'dcommit fails to commit because of conflict' '
git-svn init "$svnrepo" &&
git-svn fetch &&
git reset --hard refs/remotes/git-svn &&
svn co $svnrepo t.svn &&
svn co "$svnrepo" t.svn &&
cd t.svn &&
echo fourth line from svn >> file &&
poke file &&
svn commit -m 'fourth line from svn' &&
svn commit -m "fourth line from svn" &&
cd .. &&
rm -rf t.svn &&
echo 'fourth line from git' >> file &&
git commit -a -m 'fourth line from git' &&
echo "fourth line from git" >> file &&
git commit -a -m "fourth line from git" &&
! git-svn dcommit
"
'
test_expect_success 'dcommit does the svn equivalent of an index merge' "
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
"
test_expect_success 'commit another change from svn side' "
svn co $svnrepo t.svn &&
test_expect_success 'commit another change from svn side' '
svn co "$svnrepo" t.svn &&
cd t.svn &&
echo third line from svn >> file &&
poke file &&
svn commit -m 'third line from svn' &&
svn commit -m "third line from svn" &&
cd .. &&
rm -rf t.svn
"
'
test_expect_success 'multiple dcommit from git-svn will not clobber svn' "
git reset --hard refs/remotes/git-svn &&
......
......@@ -4,30 +4,30 @@
test_description='git-svn dcommit clobber series'
. ./lib-git-svn.sh
test_expect_success 'initialize repo' "
test_expect_success 'initialize repo' '
mkdir import &&
cd import &&
awk 'BEGIN { for (i = 1; i < 64; i++) { print i } }' > file
svn import -m 'initial' . $svnrepo &&
awk "BEGIN { for (i = 1; i < 64; i++) { print i } }" > file
svn import -m "initial" . "$svnrepo" &&
cd .. &&
git svn init $svnrepo &&
git svn init "$svnrepo" &&
git svn fetch &&
test -e file
"
'
test_expect_success '(supposedly) non-conflicting change from SVN' "
test x\"\`sed -n -e 58p < file\`\" = x58 &&
test x\"\`sed -n -e 61p < file\`\" = x61 &&
svn co $svnrepo tmp &&
test_expect_success '(supposedly) non-conflicting change from SVN' '
test x"`sed -n -e 58p < file`" = x58 &&
test x"`sed -n -e 61p < file`" = x61 &&
svn co "$svnrepo" tmp &&
cd tmp &&
perl -i -p -e 's/^58\$/5588/' file &&
perl -i -p -e 's/^61\$/6611/' file &&
perl -i -p -e "s/^58$/5588/" file &&
perl -i -p -e "s/^61$/6611/" file &&
poke file &&
test x\"\`sed -n -e 58p < file\`\" = x5588 &&
test x\"\`sed -n -e 61p < file\`\" = x6611 &&
svn commit -m '58 => 5588, 61 => 6611' &&
test x"`sed -n -e 58p < file`" = x5588 &&
test x"`sed -n -e 61p < file`" = x6611 &&
svn commit -m "58 => 5588, 61 => 6611" &&
cd ..
"
'
test_expect_success 'some unrelated changes to git' "
echo hi > life &&
......
......@@ -3,61 +3,61 @@
test_description='git-svn metadata migrations from previous versions'
. ./lib-git-svn.sh
test_expect_success 'setup old-looking metadata' "
cp $GIT_DIR/config $GIT_DIR/config-old-git-svn &&
test_expect_success 'setup old-looking metadata' '
cp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&
mkdir import &&
cd import &&
for i in trunk branches/a branches/b \
tags/0.1 tags/0.2 tags/0.3; do
mkdir -p \$i && \
echo hello >> \$i/README || exit 1
mkdir -p $i && \
echo hello >> $i/README || exit 1
done && \
svn import -m test . $svnrepo
svn import -m test . "$svnrepo"
cd .. &&
git-svn init $svnrepo &&
git-svn init "$svnrepo" &&
git-svn fetch &&
mv $GIT_DIR/svn/* $GIT_DIR/ &&
mv $GIT_DIR/svn/.metadata $GIT_DIR/ &&
rmdir $GIT_DIR/svn &&
mv "$GIT_DIR"/svn/* "$GIT_DIR"/ &&
mv "$GIT_DIR"/svn/.metadata "$GIT_DIR"/ &&
rmdir "$GIT_DIR"/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 -d refs/remotes/git-svn refs/remotes/git-svn
"
'
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 'initialize old-style (v0) git-svn layout' "
mkdir -p $GIT_DIR/git-svn/info $GIT_DIR/svn/info &&
echo $svnrepo > $GIT_DIR/git-svn/info/url &&
echo $svnrepo > $GIT_DIR/svn/info/url &&
test_expect_success 'initialize old-style (v0) git-svn layout' '
mkdir -p "$GIT_DIR"/git-svn/info "$GIT_DIR"/svn/info &&
echo "$svnrepo" > "$GIT_DIR"/git-svn/info/url &&
echo "$svnrepo" > "$GIT_DIR"/svn/info/url &&
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/svn^0 &&
test \`git config --get svn-remote.svn.url\` = '$svnrepo' &&
test \`git config --get svn-remote.svn.fetch\` = \
':refs/remotes/git-svn'
"
test "$(git config --get svn-remote.svn.url)" = "$svnrepo" &&
test `git config --get svn-remote.svn.fetch` = \
":refs/remotes/git-svn"
'
test_expect_success 'initialize a multi-repository repo' "
git-svn init $svnrepo -T trunk -t tags -b branches &&
test_expect_success 'initialize a multi-repository repo' '
git-svn init "$svnrepo" -T trunk -t tags -b branches &&
git config --get-all svn-remote.svn.fetch > fetch.out &&
grep '^trunk:refs/remotes/trunk$' fetch.out &&
test -n \"\`git config --get svn-remote.svn.branches \
'^branches/\*:refs/remotes/\*$'\`\" &&
test -n \"\`git config --get svn-remote.svn.tags \
'^tags/\*:refs/remotes/tags/\*$'\`\" &&
grep "^trunk:refs/remotes/trunk$" fetch.out &&
test -n "`git config --get svn-remote.svn.branches \
"^branches/\*:refs/remotes/\*$"`" &&
test -n "`git config --get svn-remote.svn.tags \
"^tags/\*:refs/remotes/tags/\*$"`" &&
git config --unset svn-remote.svn.branches \
'^branches/\*:refs/remotes/\*$' &&
"^branches/\*:refs/remotes/\*$" &&
git config --unset svn-remote.svn.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/b:refs/remotes/b' &&
"^tags/\*:refs/remotes/tags/\*$" &&
git config --add svn-remote.svn.fetch "branches/a:refs/remotes/a" &&
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
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:
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
"
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.url &&
rm -rf $GIT_DIR/svn &&
for i in \`cat fetch.out\`; do
path=\`expr \$i : '\\([^:]*\\):.*$'\`
ref=\`expr \$i : '[^:]*:refs/remotes/\\(.*\\)$'\`
if test -z \"\$ref\"; then continue; fi
if test -n \"\$path\"; then path=\"/\$path\"; fi
( mkdir -p $GIT_DIR/svn/\$ref/info/ &&
echo $svnrepo\$path > $GIT_DIR/svn/\$ref/info/url ) || exit 1;
rm -rf "$GIT_DIR"/svn &&
for i in `cat fetch.out`; do
path=`expr $i : "\([^:]*\):.*$"`
ref=`expr $i : "[^:]*:refs/remotes/\(.*\)$"`
if test -z "$ref"; then continue; fi
if test -n "$path"; then path="/$path"; fi
( mkdir -p "$GIT_DIR"/svn/$ref/info/ &&
echo "$svnrepo"$path > "$GIT_DIR"/svn/$ref/info/url ) || exit 1;
done &&
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 &&
grep '^trunk:refs/remotes/trunk$' fetch.out &&
grep '^branches/a:refs/remotes/a$' fetch.out &&
grep '^branches/b:refs/remotes/b$' 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\.3:refs/remotes/tags/0\.3$' fetch.out
grep '^:refs/remotes/git-svn' fetch.out
"
grep "^trunk:refs/remotes/trunk$" fetch.out &&
grep "^branches/a:refs/remotes/a$" fetch.out &&
grep "^branches/b:refs/remotes/b$" 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\.3:refs/remotes/tags/0\.3$" 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 &&
test -z \"\$(ls $GIT_DIR/svn/trunk/.rev_db.* 2>/dev/null)\" &&
expect=\"\$(ls $GIT_DIR/svn/trunk/.rev_map.*)\" &&
test -n \"\$expect\" &&
rev_db=\$(echo \$expect | sed -e 's,_map,_db,') &&
convert_to_rev_db \$expect \$rev_db &&
rm -f \$expect &&
test -f \$rev_db &&
test -z "$(ls "$GIT_DIR"/svn/trunk/.rev_db.* 2>/dev/null)" &&
expect="$(ls "$GIT_DIR"/svn/trunk/.rev_map.*)" &&
test -n "$expect" &&
rev_db="$(echo $expect | sed -e "s,_map,_db,")" &&
convert_to_rev_db "$expect" "$rev_db" &&
rm -f "$expect" &&
test -f "$rev_db" &&
git-svn fetch -i trunk &&
test -z \"\$(ls $GIT_DIR/svn/trunk/.rev_db.* 2>/dev/null)\" &&
test ! -e $GIT_DIR/svn/trunk/.rev_db &&
test -f \$expect
"
test -z "$(ls "$GIT_DIR"/svn/trunk/.rev_db.* 2>/dev/null)" &&
test ! -e "$GIT_DIR"/svn/trunk/.rev_db &&
test -f "$expect"
'
test_done
......@@ -10,77 +10,77 @@ start a new branch
initial
EOF
test_expect_success 'test refspec globbing' "
test_expect_success 'test refspec globbing' '
mkdir -p trunk/src/a trunk/src/b trunk/doc &&
echo 'hello world' > trunk/src/a/readme &&
echo 'goodbye world' > trunk/src/b/readme &&
svn import -m 'initial' trunk $svnrepo/trunk &&
svn co $svnrepo tmp &&
echo "hello world" > trunk/src/a/readme &&
echo "goodbye world" > trunk/src/b/readme &&
svn import -m "initial" trunk "$svnrepo"/trunk &&
svn co "$svnrepo" tmp &&
cd tmp &&
mkdir branches tags &&
svn add branches tags &&
svn cp trunk branches/start &&
svn commit -m 'start a new branch' &&
svn commit -m "start a new branch" &&
svn up &&
echo 'hi' >> branches/start/src/b/readme &&
echo "hi" >> 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 &&
svn commit -m 'hi' &&
svn commit -m "hi" &&
svn up &&
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 &&
echo 'aye' >> tags/end/src/a/readme &&
echo "aye" >> tags/end/src/a/readme &&
poke tags/end/src/a/readme &&
svn commit -m 'the end' &&
echo 'byebye' >> tags/end/src/b/readme &&
svn commit -m "the end" &&
echo "byebye" >> 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 .. &&
git config --add svn-remote.svn.url $svnrepo &&
git config --add svn-remote.svn.url "$svnrepo" &&
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 \
'branches/*/src/a:refs/remotes/branches/*' &&
"branches/*/src/a:refs/remotes/branches/*" &&
git config --add svn-remote.svn.tags\
'tags/*/src/a:refs/remotes/tags/*' &&
"tags/*/src/a:refs/remotes/tags/*" &&
git-svn multi-fetch &&
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 &&
test \"\`git rev-parse refs/remotes/tags/end~1\`\" = \
\"\`git rev-parse refs/remotes/branches/start\`\" &&
test \"\`git rev-parse refs/remotes/branches/start~2\`\" = \
\"\`git rev-parse refs/remotes/trunk\`\"
"
test "`git rev-parse refs/remotes/tags/end~1`" = \
"`git rev-parse refs/remotes/branches/start`" &&
test "`git rev-parse refs/remotes/branches/start~2`" = \
"`git rev-parse refs/remotes/trunk`"
'
echo try to try > expect.two
echo nothing to see here >> expect.two
cat expect.end >> expect.two
test_expect_success 'test left-hand-side only globbing' "
git config --add svn-remote.two.url $svnrepo &&
test_expect_success 'test left-hand-side only globbing' '
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.branches \
'branches/*:refs/remotes/two/branches/*' &&
"branches/*:refs/remotes/two/branches/*" &&
git config --add svn-remote.two.tags \
'tags/*:refs/remotes/two/tags/*' &&
"tags/*:refs/remotes/two/tags/*" &&
cd tmp &&
echo 'try try' >> tags/end/src/b/readme &&
echo "try try" >> tags/end/src/b/readme &&
poke tags/end/src/b/readme &&
svn commit -m 'try to try'
svn commit -m "try to try"
cd .. &&
git-svn fetch two &&
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-parse refs/remotes/two/branches/start~2\` = \
\`git rev-parse refs/remotes/two/trunk\` &&
test \`git rev-parse refs/remotes/two/tags/end~3\` = \
\`git rev-parse refs/remotes/two/branches/start\` &&
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-parse refs/remotes/two/branches/start~2` = \
`git rev-parse refs/remotes/two/trunk` &&
test `git rev-parse refs/remotes/two/tags/end~3` = \
`git rev-parse refs/remotes/two/branches/start` &&
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
"
'
test_done
......@@ -7,15 +7,15 @@ test_description='git-svn useSvmProps test'
. ./lib-git-svn.sh
test_expect_success 'load svm repo' "
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 argh -i dir $svnrepo/mirror/argh &&
test_expect_success 'load svm repo' '
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 argh -i dir "$svnrepo"/mirror/argh &&
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-svn fetch --all
"
'
uuid=161ce429-a9dd-4828-af4a-52023f968c89
......
......@@ -7,14 +7,14 @@ test_description='git-svn useSvnsyncProps test'
. ./lib-git-svn.sh
test_expect_success 'load svnsync repo' "
svnadmin load -q $rawsvnrepo < ../t9111/svnsync.dump &&
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 e $svnrepo/dir/a/b/c/d/e &&
test_expect_success 'load svnsync repo' '
svnadmin load -q "$rawsvnrepo" < ../t9111/svnsync.dump &&
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 e "$svnrepo"/dir/a/b/c/d/e &&
git config svn.useSvnsyncProps true &&
git-svn fetch --all
"
'
uuid=161ce429-a9dd-4828-af4a-52023f968c89
......
......@@ -40,8 +40,8 @@ PROPS-END
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_done
......@@ -15,18 +15,18 @@ test_description='git-svn dcommit new files over svn:// test'
start_svnserve () {
svnserve --listen-port $SVNSERVE_PORT \
--root $rawsvnrepo \
--root "$rawsvnrepo" \
--listen-once \
--listen-host 127.0.0.1 &
}
test_expect_success 'start tracking an empty repo' "
svn mkdir -m 'empty dir' $svnrepo/empty-dir &&
echo anon-access = write >> $rawsvnrepo/conf/svnserve.conf &&
test_expect_success 'start tracking an empty repo' '
svn mkdir -m "empty dir" "$svnrepo"/empty-dir &&
echo anon-access = write >> "$rawsvnrepo"/conf/svnserve.conf &&
start_svnserve &&
git svn init svn://127.0.0.1:$SVNSERVE_PORT &&
git svn fetch
"
'
test_expect_success 'create files in new directory with dcommit' "
mkdir git-new-dir &&
......
......@@ -34,35 +34,35 @@ cat << EOF
EOF
}
test_expect_success 'setup svn repository' "
svn co $svnrepo mysvnwork &&
test_expect_success 'setup svn repository' '
svn co "$svnrepo" mysvnwork &&
mkdir -p mysvnwork/trunk &&
cd mysvnwork &&
big_text_block >> trunk/README &&
svn add trunk &&
svn ci -m 'first commit' trunk &&
svn ci -m "first commit" trunk &&
cd ..
"
'
test_expect_success 'setup git mirror and merge' "
git svn init $svnrepo -t tags -T trunk -b branches &&
test_expect_success 'setup git mirror and merge' '
git svn init "$svnrepo" -t tags -T trunk -b branches &&
git svn fetch &&
git checkout --track -b svn remotes/trunk &&
git checkout -b merge &&
echo new file > new_file &&
git add new_file &&
git commit -a -m 'New file' &&
git commit -a -m "New file" &&
echo hello >> README &&
git commit -a -m 'hello' &&
git commit -a -m "hello" &&
echo add some stuff >> new_file &&
git commit -a -m 'add some stuff' &&
git commit -a -m "add some stuff" &&
git checkout svn &&
mv -f README tmp &&
echo friend > README &&
cat tmp >> README &&
git commit -a -m 'friend' &&
git commit -a -m "friend" &&
git pull . merge
"
'
test_debug 'gitk --all & sleep 1'
......
......@@ -7,16 +7,16 @@ test_description='git-svn dcommit can commit renames of files with ugly names'
. ./lib-git-svn.sh
test_expect_success 'load repository with strange names' "
svnadmin load -q $rawsvnrepo < ../t9115/funky-names.dump &&
test_expect_success 'load repository with strange names' '
svnadmin load -q "$rawsvnrepo" < ../t9115/funky-names.dump &&
start_httpd gtk+
"
'
test_expect_success 'init and fetch repository' "
git svn init $svnrepo &&
test_expect_success 'init and fetch repository' '
git svn init "$svnrepo" &&
git svn fetch &&
git reset --hard git-svn
"
'
test_expect_success 'create file in existing ugly and empty dir' '
mkdir "#{bad_directory_name}" &&
......@@ -59,28 +59,28 @@ test_expect_success 'add a file with plus signs' '
git svn dcommit
'
test_expect_success 'clone the repository to test rebase' "
git svn clone $svnrepo test-rebase &&
test_expect_success 'clone the repository to test rebase' '
git svn clone "$svnrepo" test-rebase &&
cd test-rebase &&
echo test-rebase > test-rebase &&
git add test-rebase &&
git commit -m test-rebase &&
cd ..
"
'
test_expect_success 'make a commit to test rebase' "
test_expect_success 'make a commit to test rebase' '
echo test-rebase-main > test-rebase-main &&
git add test-rebase-main &&
git commit -m test-rebase-main &&
git svn dcommit
"
'
test_expect_success 'git-svn rebase works inside a fresh-cloned repository' "
test_expect_success 'git-svn rebase works inside a fresh-cloned repository' '
cd test-rebase &&
git svn rebase &&
test -e test-rebase-main &&
test -e test-rebase
"
'
stop_httpd
......
......@@ -6,17 +6,17 @@
test_description='git-svn log tests'
. ./lib-git-svn.sh
test_expect_success 'setup repository and import' "
test_expect_success 'setup repository and import' '
mkdir import &&
cd import &&
for i in trunk branches/a branches/b \
tags/0.1 tags/0.2 tags/0.3; do
mkdir -p \$i && \
echo hello >> \$i/README || exit 1
mkdir -p $i && \
echo hello >> $i/README || exit 1
done && \
svn import -m test . $svnrepo
svn import -m test . "$svnrepo"
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 reset --hard trunk &&
echo bye >> README &&
......@@ -37,7 +37,7 @@ test_expect_success 'setup repository and import' "
echo try >> README &&
git commit -a -m try &&
git svn dcommit
"
'
test_expect_success 'run log' "
git reset --hard a &&
......
......@@ -13,43 +13,43 @@ rm -r .git
mkdir tmp
cd tmp
test_expect_success 'setup svnrepo' "
test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags &&
echo foo > project/trunk/foo &&
svn import -m '$test_description' project $svnrepo/project &&
svn import -m "$test_description" project "$svnrepo"/project &&
rm -rf project
"
'
test_expect_success 'basic clone' "
test_expect_success 'basic clone' '
test ! -d trunk &&
git svn clone $svnrepo/project/trunk &&
git svn clone "$svnrepo"/project/trunk &&
test -d trunk/.git/svn &&
test -e trunk/foo &&
rm -rf trunk
"
'
test_expect_success 'clone to target directory' "
test_expect_success 'clone to target directory' '
test ! -d target &&
git svn clone $svnrepo/project/trunk target &&
git svn clone "$svnrepo"/project/trunk target &&
test -d target/.git/svn &&
test -e target/foo &&
rm -rf target
"
'
test_expect_success 'clone with --stdlayout' "
test_expect_success 'clone with --stdlayout' '
test ! -d project &&
git svn clone -s $svnrepo/project &&
git svn clone -s "$svnrepo"/project &&
test -d project/.git/svn &&
test -e project/foo &&
rm -rf project
"
'
test_expect_success 'clone to target directory with --stdlayout' "
test_expect_success 'clone to target directory with --stdlayout' '
test ! -d target &&
git svn clone -s $svnrepo/project target &&
git svn clone -s "$svnrepo"/project target &&
test -d target/.git/svn &&
test -e target/foo &&
rm -rf target
"
'
test_done
......@@ -6,25 +6,25 @@
test_description='git-svn funky branch names'
. ./lib-git-svn.sh
test_expect_success 'setup svnrepo' "
test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags &&
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 &&
svn cp -m 'fun' \"$svnrepo/pr ject/trunk\" \
\"$svnrepo/pr ject/branches/fun plugin\" &&
svn cp -m 'more fun!' \"$svnrepo/pr ject/branches/fun plugin\" \
\"$svnrepo/pr ject/branches/more fun plugin!\" &&
svn cp -m "fun" "$svnrepo/pr ject/trunk" \
"$svnrepo/pr ject/branches/fun plugin" &&
svn cp -m "more fun!" "$svnrepo/pr ject/branches/fun plugin" \
"$svnrepo/pr ject/branches/more fun plugin!" &&
start_httpd
"
'
test_expect_success 'test clone with funky branch names' "
git svn clone -s \"$svnrepo/pr ject\" project &&
test_expect_success 'test clone with funky branch names' '
git svn clone -s "$svnrepo/pr ject" project &&
cd project &&
git rev-parse 'refs/remotes/fun%20plugin' &&
git rev-parse 'refs/remotes/more%20fun%20plugin!' &&
git rev-parse "refs/remotes/fun%20plugin" &&
git rev-parse "refs/remotes/more%20fun%20plugin!" &&
cd ..
"
'
test_expect_success 'test dcommit to funky branch' "
cd project &&
......
......@@ -6,13 +6,13 @@
test_description='git-svn clone with percent escapes'
. ./lib-git-svn.sh
test_expect_success 'setup svnrepo' "
test_expect_success 'setup svnrepo' '
mkdir project project/trunk project/branches project/tags &&
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 &&
start_httpd
"
'
if test "$SVN_HTTPD_PORT" = ""
then
......
......@@ -7,14 +7,14 @@ test_description='git-svn can fetch renamed directories'
. ./lib-git-svn.sh
test_expect_success 'load repository with renamed directory' "
svnadmin load -q $rawsvnrepo < ../t9121/renamed-dir.dump
"
test_expect_success 'load repository with renamed directory' '
svnadmin load -q "$rawsvnrepo" < ../t9121/renamed-dir.dump
'
test_expect_success 'init and fetch repository' "
git svn init $svnrepo/newname &&
test_expect_success 'init and fetch repository' '
git svn init "$svnrepo/newname" &&
git svn fetch
"
'
test_done
......@@ -153,21 +153,21 @@ test_expect_success 'req_Root failure (conflicting roots)' \
tail log | grep "^error 1 Conflicting roots specified$"'
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$"'
test_expect_success 'req_Root failure (strict-paths)' '
! 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)' \
'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$"'
test_expect_success 'req_Root failure (w/o strict-paths)' '
! cat request-anonymous |
git-cvsserver pserver $WORKDIR/gitcvs >log 2>&1
git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1
'
cat >request-base <<EOF
......@@ -180,25 +180,25 @@ Root /gitcvs.git
EOF
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$"'
test_expect_success 'req_Root failure (base-path)' '
! 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
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$"'
test_expect_success 'req_Root failure (export-all w/o whitelist)' \
'! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
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$"'
GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true || exit 1
......
......@@ -10,6 +10,7 @@ commandline, and checks that it would not write any errors
or warnings to log.'
gitweb_init () {
safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
cat >gitweb_config.perl <<EOF
#!/usr/bin/perl
......@@ -17,16 +18,16 @@ gitweb_init () {
our \$version = "current";
our \$GIT = "git";
our \$projectroot = "$(pwd)";
our \$projectroot = "$safe_pwd";
our \$project_maxdepth = 8;
our \$home_link_str = "projects";
our \$site_name = "[localhost]";
our \$site_header = "";
our \$site_footer = "";
our \$home_text = "indextext.html";
our @stylesheets = ("file:///$(pwd)/../../gitweb/gitweb.css");
our \$logo = "file:///$(pwd)/../../gitweb/git-logo.png";
our \$favicon = "file:///$(pwd)/../../gitweb/git-favicon.png";
our @stylesheets = ("file:///$safe_pwd/../../gitweb/gitweb.css");
our \$logo = "file:///$safe_pwd/../../gitweb/git-logo.png";
our \$favicon = "file:///$safe_pwd/../../gitweb/git-favicon.png";
our \$projects_list = "";
our \$export_ok = "";
our \$strict_export = "";
......@@ -39,19 +40,21 @@ EOF
}
gitweb_run () {
export GATEWAY_INTERFACE="CGI/1.1"
export HTTP_ACCEPT="*/*"
export REQUEST_METHOD="GET"
export QUERY_STRING=""$1""
export PATH_INFO=""$2""
GATEWAY_INTERFACE="CGI/1.1"
HTTP_ACCEPT="*/*"
REQUEST_METHOD="GET"
QUERY_STRING=""$1""
PATH_INFO=""$2""
export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD QUERY_STRING PATH_INFO
export GITWEB_CONFIG=$(pwd)/gitweb_config.perl
GITWEB_CONFIG=$(pwd)/gitweb_config.perl
export GITWEB_CONFIG
# some of git commands write to STDERR on error, but this is not
# written to web server logs, so we are not interested in that:
# we are interested only in properly formatted errors/warnings
rm -f gitweb.log &&
perl -- $(pwd)/../../gitweb/gitweb.perl \
perl -- "$(pwd)/../../gitweb/gitweb.perl" \
>/dev/null 2>gitweb.log &&
if grep -q -s "^[[]" gitweb.log >/dev/null; then false; else true; fi
......
......@@ -36,7 +36,7 @@ test_expect_success 'setup cvsroot' 'cvs init'
test_expect_success 'setup a cvs module' '
mkdir $CVSROOT/module &&
mkdir "$CVSROOT/module" &&
cvs co -d module-cvs module &&
cd module-cvs &&
cat <<EOF >o_fortuna &&
......
......@@ -160,6 +160,22 @@ die () {
trap 'die' exit
# The semantics of the editor variables are that of invoking
# sh -c "$EDITOR \"$@\"" files ...
#
# If our trash directory contains shell metacharacters, they will be
# interpreted if we just set $EDITOR directly, so do a little dance with
# environment variables to work around this.
#
# In particular, quoting isn't enough, as the path may contain the same quote
# that we're using.
test_set_editor () {
FAKE_EDITOR="$1"
export FAKE_EDITOR
VISUAL='"$FAKE_EDITOR"'
export VISUAL
}
test_tick () {
if test -z "${test_tick+set}"
then
......@@ -329,7 +345,7 @@ test_create_repo () {
repo="$1"
mkdir "$repo"
cd "$repo" || error "Cannot setup test environment"
"$GIT_EXEC_PATH/git" init --template=$GIT_EXEC_PATH/templates/blt/ >/dev/null 2>&1 ||
"$GIT_EXEC_PATH/git" init "--template=$GIT_EXEC_PATH/templates/blt/" >/dev/null 2>&1 ||
error "cannot run git init -- have you built things yet?"
mv .git/hooks .git/hooks-disabled
cd "$owd"
......@@ -395,14 +411,14 @@ fi
. ../GIT-BUILD-OPTIONS
# Test repository
test=trash
test="trash directory"
rm -fr "$test" || {
trap - exit
echo >&5 "FATAL: Cannot prepare test area"
exit 1
}
test_create_repo $test
test_create_repo "$test"
cd "$test"
this_test=$(expr "./$0" : '.*/\(t[0-9]*\)-[^/]*$')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册