Skip to content

Commit 6117570

Browse files
committed
feat(builder): disable simultaneous push in the same repository
1 parent e99ae10 commit 6117570

1 file changed

Lines changed: 24 additions & 13 deletions

File tree

builder/image/templates/gitreceive

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,30 @@ EOF
4242
pre-receive)
4343
while read oldrev newrev refname
4444
do
45-
# check for authorization on this repo
46-
$GITHOME/receiver "$RECEIVE_REPO" "$newrev" "$RECEIVE_USER" "$RECEIVE_FINGERPRINT"
47-
rc=$?
48-
if [[ $rc != 0 ]] ; then
49-
echo " ERROR: failed on rev $newrev - push denied"
50-
exit $rc
51-
fi
52-
# builder assumes that we are running this script from $GITHOME
53-
cd $GITHOME
54-
# if we're processing a receive-pack on an existing repo, run a build
55-
if [[ $SSH_ORIGINAL_COMMAND == git-receive-pack* ]]; then
56-
# SECURITY: git user runs the builder as root (for docker access)
57-
sudo $GITHOME/builder $RECEIVE_USER $RECEIVE_REPO $newrev 2>&1 | strip_remote_prefix
45+
LOCKFILE="/tmp/$RECEIVE_REPO.lock"
46+
if ( set -o noclobber; echo "$$" > "$LOCKFILE" ) 2> /dev/null; then
47+
trap 'rm -f "$LOCKFILE"; exit $?' INT TERM EXIT
48+
49+
# check for authorization on this repo
50+
$GITHOME/receiver "$RECEIVE_REPO" "$newrev" "$RECEIVE_USER" "$RECEIVE_FINGERPRINT"
51+
rc=$?
52+
if [[ $rc != 0 ]] ; then
53+
echo " ERROR: failed on rev $newrev - push denied"
54+
exit $rc
55+
fi
56+
# builder assumes that we are running this script from $GITHOME
57+
cd $GITHOME
58+
# if we're processing a receive-pack on an existing repo, run a build
59+
if [[ $SSH_ORIGINAL_COMMAND == git-receive-pack* ]]; then
60+
# SECURITY: git user runs the builder as root (for docker access)
61+
sudo $GITHOME/builder $RECEIVE_USER $RECEIVE_REPO $newrev 2>&1 | strip_remote_prefix
62+
fi
63+
64+
rm -f "$LOCKFILE"
65+
trap - INT TERM EXIT
66+
else
67+
echo "Another git push is ongoing. Aborting..."
68+
exit 1
5869
fi
5970
done
6071
;;

0 commit comments

Comments
 (0)