/tests/hook_update.sh (cfe9a8d8861bbeedda3a4e93933470094fa800e3) (7745 bytes) (mode 100755) (type blob)

#!/bin/bash

tests=`pwd`

export ROCKETGIT_CONF_FILE="`pwd`/config.php"
export ROCKETGIT_LOGIN_UID=1234
export ROCKETGIT_REPO_ID=5678
export ROCKETGIT_IP="127.0.0.1"
export ROCKETGIT_REPO_PATH="`pwd`/hook_update_dest.git"
export ROCKETGIT_REPO_UID=22

rm -rf hook_update_*.git
mkdir hook_update_dest.git
(
cd hook_update_dest.git
git init --bare
)
cp -v ../hooks/update hook_update_dest.git/hooks/

ln -sf ../../root/themes/default themes/

git clone hook_update_dest.git hook_update_src.git

cd hook_update_src.git

php ${tests}/hook_update_help.php init
if [ "${?}" != "0" ]; then
	echo "Cannot init user and repo!"
	exit 1
fi

echo
echo "=== Testing push without rights..."
echo "aaa" > a
git add a
git commit -m "a" a >/dev/null || exit 1
echo "bbb" >> a
git commit -m "b" a >/dev/null || exit 1
#strace -s200 -ff -o ${tests}/hook_update.strace \
git push origin master
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing push with rights..."
export ROCKETGIT_REPO_RIGHTS="CP"
php ${tests}/hook_update_help.php refs
#strace -s200 -ff -o ${tests}/hook_update.strace \
git push origin master
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing not fast-forward without rights..."
git reset --hard HEAD~1
echo "bbb" > a
git commit -m "new a" a
git push --force origin master
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing not fast-forward with rights..."
export ROCKETGIT_REPO_RIGHTS="COP"
php ${tests}/hook_update_help.php refs
git push --force origin master
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing un-annotated tag creation without rights..."
git tag tag1
git push --tags origin
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing un-annotated tag creation with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}Y"
php ${tests}/hook_update_help.php refs
git push --tags origin
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing un-annotated tag modify without rights..."
git tag -d tag1
git tag tag1 HEAD~1
git push --force --tags origin
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing un-annotated tag modify with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}U"
php ${tests}/hook_update_help.php refs
git push --force --tags origin
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing un-annotated tag deletion without rights..."
git tag -d tag1
git push origin :refs/tags/tag1
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing un-annotated tag deletion with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}u"
php ${tests}/hook_update_help.php refs
git push origin :refs/tags/tag1
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing merge-commit without rights (${ROCKETGIT_REPO_RIGHTS})..."
git checkout -b branch1
echo "ccc" >> a
git commit -m "new b" a
git checkout master
echo "a" > b; git add b
git commit -m "c" b
git merge -m "x" branch1
git push origin master
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing merge-commit with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}M"
php ${tests}/hook_update_help.php refs
git push origin master
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing bad-whitespace without rights..."
echo -e " \t \ta \t\n \r\n" > b
git commit -m "d" b
git push origin master
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing bad-whitespace with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}W"
php ${tests}/hook_update_help.php refs
git push origin master
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing branch delete without rights..."
git push origin branch1
git push origin :branch1
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing branch delete with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}D"
php ${tests}/hook_update_help.php refs
git push origin :branch1
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing annotated tag create without rights..."
git tag -a tag2 -m "xxx"
git push origin --tags
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing annotated tag create with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}S"
php ${tests}/hook_update_help.php refs
git push origin --tags
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Testing annotated tag delete without rights (${ROCKETGIT_REPO_RIGHTS})..."
git tag -d tag2
git push origin :refs/tags/tag2
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing annotated tag delete with rights..."
export ROCKETGIT_REPO_RIGHTS="${ROCKETGIT_REPO_RIGHTS}n"
php ${tests}/hook_update_help.php refs
git push origin :refs/tags/tag2
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi

echo
echo "=== Preparing for anonymous push..."
# We should allow only W? TODO
export ROCKETGIT_REPO_RIGHTS="W"
php ${tests}/hook_update_help.php refs
export GIT_NAMESPACE="hook_update_ns1"
echo "xx" > b; git add b
git commit -m "preparing for anonymous push" b
# We need to do this because it is done in remote.php that we do not call here
X="../hook_update_dest.git/refs/namespaces/${GIT_NAMESPACE}/refs/heads"
mkdir -p ${X}
cp -a ../hook_update_dest.git/refs/heads/* "${X}/"
echo "=== Testing anonymous push without rights..."
#strace -s200 -ff -o ${tests}/hook_update.strace \
git push origin master
if [ "${?}" != "1" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing anonymous push with rights..."
export ROCKETGIT_REPO_RIGHTS="HW"
php ${tests}/hook_update_help.php refs
git push origin master
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi
# Test if the namespace has been updated instead of main namespace
A=`diff ../hook_update_dest.git/refs/namespaces/${GIT_NAMESPACE}/refs/heads/master \
	.git/refs/heads/master`
if [ "${?}" != 0 ]; then
	echo "Cannot do the diff for anonymous push"
	exit 1
fi
if [ "${A}" != "" ]; then
	echo "We did not update the namespace!"
	exit 1
fi
A=`diff ../hook_update_dest.git/refs/heads/master \
	.git/refs/heads/master`
if [ "${A}" = "" ]; then
	echo "Seems we updated also main namespace!"
	exit 1
fi

# TODO: we should not allow force pushes on anonymous branches?


echo "=== Preparing for branch anonymous push without rights..."
echo "*** Creating a branch..."
git checkout -b branch_anon1
echo "=== Testing branch anonymous push without rights..."
export ROCKETGIT_REPO_RIGHTS=""
php ${tests}/hook_update_help.php refs
git push origin branch_anon1:branch_anon1
if [ "${?}" = "0" ]; then
	echo "Should not work!"
	exit 1
fi
echo "=== Testing branch anonymous push with rights..."
export ROCKETGIT_REPO_RIGHTS="H"
php ${tests}/hook_update_help.php refs
git push origin branch_anon1:branch_anon1
if [ "${?}" != "0" ]; then
	echo "Should work!"
	exit 1
fi
# Test if the namespace has been updated instead of the namespace
if [ "${?}" != 0 ]; then
	echo "Cannot do the diff for anonymous push"
	exit 1
fi
A=`diff ../hook_update_dest.git/refs/namespaces/${GIT_NAMESPACE}/refs/heads/branch_anon1 \
	.git/refs/heads/branch_anon1`
if [ "${A}" != "" ]; then
	echo "We did not update the namespace but main refs (anon+branch)!"
	exit 1
fi
A=`diff ../hook_update_dest.git/refs/heads/master \
	.git/refs/heads/branch_anon1`
if [ "${A}" = "" ]; then
	echo "Seems we updated also main refs (anon+branch)!"
	exit 1
fi


cd ..

rm -rf hook_update_*.git

echo "hook_pre-update: OK!";


Mode Type Size Ref File
100644 blob 9 f3c7a7c5da68804a1bdf391127ba34aed33c3cca .exclude
100644 blob 102 eaeb7d777062c60a55cdd4b5734902cdf6e1790c .gitignore
100644 blob 289 fabbff669e768c05d6cfab4d9aeb651bf623e174 AUTHORS
100644 blob 1132 dd65951315f3de6d52d52a82fca59889d1d95187 Certs.txt
100644 blob 1339 6ef73b238cddfb5bd83fe344a186e48f12e9da2c Compare.txt
100644 blob 549 41c3bdbba8ec2523fe24b84bdd46777fc13e8345 History.txt
100644 blob 34520 dba13ed2ddf783ee8118c6a581dbf75305f816a3 LICENSE
100644 blob 2695 994656805a9db0ea31cf9be1e5776182efbefecc Makefile.in
100644 blob 4788 eb8fa578df718b058ebbde968998718c669984cd README
100644 blob 100438 17de6db8f4fc99c18991fb346451c50d91c8bdff TODO
100644 blob 1294 f22911eb777f0695fcf81ad686eac133eb11fcc4 TODO-plans
100644 blob 203 a2863c67c3da44126b61a15a6f09738c25e0fbe0 TODO.perf
100644 blob 373 ca2fd2e49069f5d13d557928e0bf53135782530f TODO.vm
040000 tree - 21928e906ad2907a55c2e81c2a8b0502b586b8a0 artwork
100755 blob 30 92c4bc48245c00408cd7e1fd89bc1a03058f4ce4 configure
040000 tree - 788c57f7b8b4a17ab4e6903b044addae9617da09 debian
040000 tree - 681465a8d96259004db092e8aab5111ad18900f1 docker
040000 tree - f67d3605efbd6422a8acdd953578991139266391 docs
100755 blob 16711 924262b2f8dbf3bbe02358e7f404175732e970d1 duilder
100644 blob 536 db9185faa969a77379e8d949b1943b95c92f2600 duilder.conf
040000 tree - b0cc8cc0386eddf4373339a7860e46e8f74e0202 hooks
040000 tree - 3d0ce82f618b8a7ea674b0bbbb375da6f45bd1fd inc
100644 blob 3881 074e596bfc98db0f5ea8368ba9839659629bb814 rocketgit.spec.in
040000 tree - 7fb729ee5d25ac107e8f357d3911da8f6a64bd1a root
040000 tree - 429d043eb48791f798eeca03636a43dedd6b442a samples
040000 tree - a400a14155cebfc40cf6323af694b5135ec57b6e scripts
040000 tree - 162702b941f66ce024967308ea694eae46506304 selinux
100755 blob 256 462ccd108c431f54e380cdac2329129875a318b5 spell_check.sh
040000 tree - cb54e074b3ca35943edfcda9dd9cfcd281bcd9e7 techdocs
040000 tree - 5e4e7da913966f00733b01a18e7e4972a44e91b1 tests
040000 tree - d39824f9d9ba0f8b2f00f4a101f5cd5aeebc2f83 tools
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/catalinux/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/catalinux/rocketgit

Clone this repository using git:
git clone git://git.rocketgit.com/user/catalinux/rocketgit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main