Skip to content

Commit

Permalink
Add new simplified git-remote-testgit
Browse files Browse the repository at this point in the history
Exercising the python remote helper framework is for another tool and
another test. This is about testing the remote-helper interface.

It's way simpler, it exercises the same features of remote helpers, it's
easy to read and understand, and it doesn't depend on python.

For now let's just copy the old remote-helpers test script, although
some of those tests don't make sense. In addition, this script would be
able to test other features not currently being tested.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Felipe Contreras authored and Junio C Hamano committed Nov 29, 2012
1 parent d0ac3ff commit fc407f9
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Documentation/git-remote-testgit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ testcase for the remote-helper functionality, and as an example to
show remote-helper authors one possible implementation.

The best way to learn more is to read the comments and source code in
'git-remote-testgit.py'.
'git-remote-testgit'.

SEE ALSO
--------
Expand Down
64 changes: 64 additions & 0 deletions git-remote-testgit
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Copyright (c) 2012 Felipe Contreras

alias=$1
url=$2

# huh?
url="${url#file://}"

dir="$GIT_DIR/testgit/$alias"
prefix="refs/testgit/$alias"
refspec="refs/heads/*:${prefix}/heads/*"

gitmarks="$dir/git.marks"
testgitmarks="$dir/testgit.marks"

export GIT_DIR="$url/.git"

mkdir -p "$dir"

test -e "$gitmarks" || > "$gitmarks"
test -e "$testgitmarks" || > "$testgitmarks"

while read line
do
case $line in
capabilities)
echo 'import'
echo 'export'
echo "refspec $refspec"
echo "*import-marks $gitmarks"
echo "*export-marks $gitmarks"
echo
;;
list)
git for-each-ref --format='? %(refname)' 'refs/heads/'
head=$(git symbolic-ref HEAD)
echo "@$head HEAD"
echo
;;
import*)
# read all import lines
while true
do
ref="${line#* }"
refs="$refs $ref"
read line
test "${line%% *}" != "import" && break
done

echo "feature import-marks=$gitmarks"
echo "feature export-marks=$gitmarks"
git fast-export --use-done-feature --{import,export}-marks="$testgitmarks" $refs |
sed -e "s#refs/heads/#${prefix}/heads/#g"
;;
export)
git fast-import --{import,export}-marks="$testgitmarks" --quiet
echo
;;
'')
exit
;;
esac
done
139 changes: 139 additions & 0 deletions t/t5801-remote-helpers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
#!/bin/sh
#
# Copyright (c) 2010 Sverre Rabbelier
#

test_description='Test remote-helper import and export commands'

. ./test-lib.sh

if ! type "${BASH-bash}" >/dev/null 2>&1; then
skip_all='skipping remote-testgit tests, bash not available'
test_done
fi

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 &&
echo content >file &&
git add file &&
git commit -m one &&
git push origin master)
'

test_expect_success 'cloning from local repo' '
git clone "testgit::${PWD}/server" localclone &&
test_cmp public/file localclone/file
'

test_expect_success 'cloning from remote repo' '
git clone "testgit::file://${PWD}/server" clone &&
test_cmp public/file clone/file
'

test_expect_success 'create new commit on remote' '
(cd public &&
echo content >>file &&
git commit -a -m two &&
git push)
'

test_expect_success 'pulling from local repo' '
(cd localclone && git pull) &&
test_cmp public/file localclone/file
'

test_expect_success 'pulling from remote remote' '
(cd clone && git pull) &&
test_cmp public/file clone/file
'

test_expect_success 'pushing to local repo' '
(cd localclone &&
echo content >>file &&
git commit -a -m three &&
git push) &&
compare_refs localclone HEAD server HEAD
'

# Generally, skip this test. It demonstrates a now-fixed race in
# git-remote-testgit, but is too slow to leave in for general use.
: test_expect_success 'racily pushing to local repo' '
test_when_finished "rm -rf server2 localclone2" &&
cp -R server server2 &&
git clone "testgit::${PWD}/server2" localclone2 &&
(cd localclone2 &&
echo content >>file &&
git commit -a -m three &&
GIT_REMOTE_TESTGIT_SLEEPY=2 git push) &&
compare_refs localclone2 HEAD server2 HEAD
'

test_expect_success 'synch with changes from localclone' '
(cd clone &&
git pull)
'

test_expect_success 'pushing remote local repo' '
(cd clone &&
echo content >>file &&
git commit -a -m four &&
git push) &&
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

0 comments on commit fc407f9

Please sign in to comment.