Merge branch 'sr/transport-helper-fix'
* sr/transport-helper-fix: (21 commits) transport-helper: die early on encountering deleted refs transport-helper: implement marks location as capability transport-helper: Use capname for refspec capability too transport-helper: change import semantics transport-helper: update ref status after push with export transport-helper: use the new done feature where possible transport-helper: check status code of finish_command transport-helper: factor out push_update_refs_status fast-export: support done feature fast-import: introduce 'done' command git-remote-testgit: fix error handling git-remote-testgit: only push for non-local repositories remote-curl: accept empty line as terminator remote-helpers: export GIT_DIR variable to helpers git_remote_helpers: push all refs during a non-local export transport-helper: don't feed bogus refs to export push git-remote-testgit: import non-HEAD refs t5800: document some non-functional parts of remote helpers t5800: use skip_all instead of prereq t5800: factor out some ref tests ...
This commit is contained in:
@ -7,17 +7,27 @@ test_description='Test remote-helper import and export commands'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if test_have_prereq PYTHON && "$PYTHON_PATH" -c '
|
||||
if ! test_have_prereq PYTHON ; then
|
||||
skip_all='skipping git-remote-hg tests, python not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
"$PYTHON_PATH" -c '
|
||||
import sys
|
||||
if sys.hexversion < 0x02040000:
|
||||
sys.exit(1)
|
||||
'
|
||||
then
|
||||
# Requires Python 2.4 or newer
|
||||
test_set_prereq PYTHON_24
|
||||
fi
|
||||
' || {
|
||||
skip_all='skipping git-remote-hg tests, python version < 2.4'
|
||||
test_done
|
||||
}
|
||||
|
||||
test_expect_success PYTHON_24 'setup repository' '
|
||||
compare_refs() {
|
||||
git --git-dir="$1/.git" rev-parse --verify $2 >expect &&
|
||||
git --git-dir="$3/.git" rev-parse --verify $4 >actual &&
|
||||
test_cmp expect actual
|
||||
}
|
||||
|
||||
test_expect_success 'setup repository' '
|
||||
git init --bare server/.git &&
|
||||
git clone server public &&
|
||||
(cd public &&
|
||||
@ -27,54 +37,99 @@ test_expect_success PYTHON_24 'setup repository' '
|
||||
git push origin master)
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'cloning from local repo' '
|
||||
test_expect_success 'cloning from local repo' '
|
||||
git clone "testgit::${PWD}/server" localclone &&
|
||||
test_cmp public/file localclone/file
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'cloning from remote repo' '
|
||||
test_expect_success 'cloning from remote repo' '
|
||||
git clone "testgit::file://${PWD}/server" clone &&
|
||||
test_cmp public/file clone/file
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'create new commit on remote' '
|
||||
test_expect_success 'create new commit on remote' '
|
||||
(cd public &&
|
||||
echo content >>file &&
|
||||
git commit -a -m two &&
|
||||
git push)
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'pulling from local repo' '
|
||||
test_expect_success 'pulling from local repo' '
|
||||
(cd localclone && git pull) &&
|
||||
test_cmp public/file localclone/file
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'pulling from remote remote' '
|
||||
test_expect_success 'pulling from remote remote' '
|
||||
(cd clone && git pull) &&
|
||||
test_cmp public/file clone/file
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'pushing to local repo' '
|
||||
test_expect_success 'pushing to local repo' '
|
||||
(cd localclone &&
|
||||
echo content >>file &&
|
||||
git commit -a -m three &&
|
||||
git push) &&
|
||||
HEAD=$(git --git-dir=localclone/.git rev-parse --verify HEAD) &&
|
||||
test $HEAD = $(git --git-dir=server/.git rev-parse --verify HEAD)
|
||||
compare_refs localclone HEAD server HEAD
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'synch with changes from localclone' '
|
||||
test_expect_success 'synch with changes from localclone' '
|
||||
(cd clone &&
|
||||
git pull)
|
||||
'
|
||||
|
||||
test_expect_success PYTHON_24 'pushing remote local repo' '
|
||||
test_expect_success 'pushing remote local repo' '
|
||||
(cd clone &&
|
||||
echo content >>file &&
|
||||
git commit -a -m four &&
|
||||
git push) &&
|
||||
HEAD=$(git --git-dir=clone/.git rev-parse --verify HEAD) &&
|
||||
test $HEAD = $(git --git-dir=server/.git rev-parse --verify HEAD)
|
||||
compare_refs clone HEAD server HEAD
|
||||
'
|
||||
|
||||
test_expect_success 'fetch new branch' '
|
||||
(cd public &&
|
||||
git checkout -b new &&
|
||||
echo content >>file &&
|
||||
git commit -a -m five &&
|
||||
git push origin new
|
||||
) &&
|
||||
(cd localclone &&
|
||||
git fetch origin new
|
||||
) &&
|
||||
compare_refs public HEAD localclone FETCH_HEAD
|
||||
'
|
||||
|
||||
test_expect_success 'fetch multiple branches' '
|
||||
(cd localclone &&
|
||||
git fetch
|
||||
) &&
|
||||
compare_refs server master localclone refs/remotes/origin/master &&
|
||||
compare_refs server new localclone refs/remotes/origin/new
|
||||
'
|
||||
|
||||
test_expect_success 'push when remote has extra refs' '
|
||||
(cd clone &&
|
||||
echo content >>file &&
|
||||
git commit -a -m six &&
|
||||
git push
|
||||
) &&
|
||||
compare_refs clone master server master
|
||||
'
|
||||
|
||||
test_expect_success 'push new branch by name' '
|
||||
(cd clone &&
|
||||
git checkout -b new-name &&
|
||||
echo content >>file &&
|
||||
git commit -a -m seven &&
|
||||
git push origin new-name
|
||||
) &&
|
||||
compare_refs clone HEAD server refs/heads/new-name
|
||||
'
|
||||
|
||||
test_expect_failure 'push new branch with old:new refspec' '
|
||||
(cd clone &&
|
||||
git push origin new-name:new-refspec
|
||||
) &&
|
||||
compare_refs clone HEAD server refs/heads/new-refspec
|
||||
'
|
||||
|
||||
test_done
|
||||
|
@ -2197,6 +2197,48 @@ test_expect_success 'R: quiet option results in no stats being output' '
|
||||
test_cmp empty output
|
||||
'
|
||||
|
||||
test_expect_success 'R: feature done means terminating "done" is mandatory' '
|
||||
echo feature done | test_must_fail git fast-import &&
|
||||
test_must_fail git fast-import --done </dev/null
|
||||
'
|
||||
|
||||
test_expect_success 'R: terminating "done" with trailing gibberish is ok' '
|
||||
git fast-import <<-\EOF &&
|
||||
feature done
|
||||
done
|
||||
trailing gibberish
|
||||
EOF
|
||||
git fast-import <<-\EOF
|
||||
done
|
||||
more trailing gibberish
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'R: terminating "done" within commit' '
|
||||
cat >expect <<-\EOF &&
|
||||
OBJID
|
||||
:000000 100644 OBJID OBJID A hello.c
|
||||
:000000 100644 OBJID OBJID A hello2.c
|
||||
EOF
|
||||
git fast-import <<-EOF &&
|
||||
commit refs/heads/done-ends
|
||||
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
|
||||
data <<EOT
|
||||
Commit terminated by "done" command
|
||||
EOT
|
||||
M 100644 inline hello.c
|
||||
data <<EOT
|
||||
Hello, world.
|
||||
EOT
|
||||
C hello.c hello2.c
|
||||
done
|
||||
EOF
|
||||
git rev-list done-ends |
|
||||
git diff-tree -r --stdin --root --always |
|
||||
sed -e "s/$_x40/OBJID/g" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat >input <<EOF
|
||||
option git non-existing-option
|
||||
EOF
|
||||
|
Reference in New Issue
Block a user