Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content

Commit 0cd06b4

Browse files
committed
initial commit
0 parents  commit 0cd06b4

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

gitreceive

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/bin/bash
2+
3+
GITUSER=${GITUSER:-git}
4+
GITHOME="/home/$GITUSER"
5+
SELF=`which $0`
6+
7+
case "$1" in
8+
# Public commands
9+
10+
init) # gitreceive init
11+
useradd -d $GITHOME $GITUSER
12+
mkdir -p $GITHOME/.ssh
13+
touch $GITHOME/.ssh/authorized_keys
14+
cat > $GITHOME/receiver <<EOF
15+
#!/bin/bash
16+
URL=http://requestb.in/rlh4znrl
17+
curl \
18+
-X 'POST' \
19+
-F "repository=\$1" \
20+
-F "revision=\$2" \
21+
-F "username=\$3" \
22+
-F "fingerprint=\$4" \
23+
\$URL
24+
#cat > /tmp/received
25+
sleep 4
26+
echo "Ok, done"
27+
EOF
28+
chmod +x $GITHOME/receiver
29+
chown -R $GITUSER $GITHOME
30+
;;
31+
32+
upload-key) # gitreceive upload-key <username>
33+
KEY=$(cat)
34+
FINGERPRINT=$(ssh-keygen -lf /dev/stdin <<< $(echo $KEY) | awk '{print $2}')
35+
AUTHORIZED_KEYS=$GITHOME/.ssh/authorized_keys
36+
KEY_PREFIX="command=\"$SELF run $2 $FINGERPRINT\",no-agent-forwarding,no-pty,no-user-rc,no-X11-forwarding,no-port-forwarding"
37+
echo "$KEY_PREFIX $KEY" >> $AUTHORIZED_KEYS
38+
;;
39+
40+
# Internal commands
41+
run)
42+
export RECEIVE_USER=$2
43+
export RECEIVE_FINGERPRINT=$3
44+
eval $(echo $SSH_ORIGINAL_COMMAND | awk '{print "RECEIVE_REPO="$2}')
45+
REPO_PATH="$GITHOME/$RECEIVE_REPO"
46+
if [ ! -d $REPO_PATH ]; then
47+
mkdir -p $REPO_PATH
48+
cd $REPO_PATH
49+
git init --bare
50+
cd -
51+
fi
52+
PRERECEIVE_HOOK="$REPO_PATH/hooks/pre-receive"
53+
cat > $PRERECEIVE_HOOK <<EOF
54+
#!/bin/bash
55+
cat | $SELF hook
56+
EOF
57+
chmod +x $PRERECEIVE_HOOK
58+
eval $SSH_ORIGINAL_COMMAND
59+
;;
60+
61+
hook)
62+
while read oldrev newrev refname
63+
do
64+
# Only run this script for the master branch. You can remove this
65+
# if block if you wish to run it for others as well.
66+
if [[ $refname = "refs/heads/master" ]] ; then
67+
echo "----> Receiving $newrev ... "
68+
69+
git archive $newrev | $GITHOME/receiver "$RECEIVE_REPO" "$newrev" "$RECEIVE_USER" "$RECEIVE_FINGERPRINT"
70+
71+
rc=$?
72+
if [[ $rc != 0 ]] ; then
73+
echo " ERROR: failed on rev $newrev - push denied"
74+
exit $rc
75+
fi
76+
fi
77+
done
78+
exit 1 # for debugging
79+
;;
80+
81+
*)
82+
echo "Usage: gitreceive <command> [options]"
83+
;;
84+
esac

0 commit comments

Comments
 (0)