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:
Junio C Hamano
2011-08-01 15:00:14 -07:00
15 changed files with 475 additions and 187 deletions

View File

@ -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

View File

@ -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