blob: 8ee66108574a92254449806235762f3a05af72e8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#! /bin/bash
# usage: create <PROJECT> - create a git bare repository named PROJECT.git
# this command will setup the repo and send a mail for confirmation.
GITDIR="/var/git"
BASEDIR=".gitbase"
MULTIMAIL="/usr/doc/git-2.14.5/contrib/hooks/multimail/git_multimail.py"
GITUSER="git"
GITGRP="git"
VENVSDIR="/usr/local/venvs"
USEVENV=false
function is_bare() {
repodir=$1
if "$(git --git-dir="$repodir" rev-parse --is-bare-repository)" = true
then
true
else
false
fi
}
function git_init() {
PROJECT=$1
echo "creating project \"${PROJECT}.git\""
echo -n "Describe your project in one line: "
read DESCRIPTION
if [ ! -d ${GITDIR}/${PROJECT}.git ]; then
mkdir ${GITDIR}/${PROJECT}.git
fi
cd ${GITDIR}/${PROJECT}.git
git init --bare
echo "Remember to insert a README.md file to explain what your project is about."
mkdir custom-hooks
ln -s $MULTIMAIL custom-hooks/git_multimail.py
# check if we are creating a python project
if [ $USEVENV == true ]; then
# if yes
cp ${GITDIR}/${BASEDIR}/post-receive-py hooks/post-receive
sed -i "s|{{GITDIR}}|${GITDIR}|g" hooks/post-receive
sed -i "s|{{PROJECT}}|${PROJECT}|g" hooks/post-receive
cp ${GITDIR}/${BASEDIR}/pip_install custom-hooks/pip_install
sed -i "s|{{VENVSDIR}}|${VENVSDIR}|g" custom-hooks/pip_install
sed -i "s|{{PROJECT}}|${PROJECT}|g" custom-hooks/pip_install
chmod 0755 custom-hooks/pip_install
else
# otherwise
cp ${GITDIR}/${BASEDIR}/post-receive hooks/post-receive
sed -i "s|{{GITDIR}}|${GITDIR}|g" hooks/post-receive
sed -i "s|{{PROJECT}}|${PROJECT}|g" hooks/post-receive
fi
# in any case we setup so that we can deploy
cp ${GITDIR}/${BASEDIR}/deploy.sh custom-hooks/deploy.sh
sed -i "s|{{GITDIR}}|${GITDIR}|g" custom-hooks/deploy.sh
sed -i "s|{{PROJECT}}|${PROJECT}|g" custom-hooks/deploy.sh
# add multimail settings to config
cat >> config <<EOT
[multimailhook]
mailer = "sendmail"
refchangeShowGraph = true
mailingList = "danixland@gmail.com"
commitEmailFormat = "html"
htmlInIntro = true
htmlInFooter = true
from = "danix@danix.xyz"
administrator = "danix@danix.xyz"
quiet = true
logFile = "/var/log/multimail.log"
errorLogFile = "/var/log/multimail_err.log"
EOT
# fix permissions to post-receive and deploy.sh scripts
chmod 0755 hooks/post-receive custom-hooks/deploy.sh
echo $DESCRIPTION > description
cd ${GITDIR}/
chown -R ${GITUSER}:${GITGRP} ${GITDIR}/${PROJECT}.git
echo "All done, you can now work on \"${PROJECT}.git\""
echo "You can clone this repository at ssh://danix_git:/${GITDIR}/${PROJECT}.git"
exit 0
}
if [ ! -z $1 ]; then
if [ "python" == $1 ]; then
USEVENV=true
# this is a python project. Let's create a virtualenv
if [ ! -z $2 ]; then
PROJECT=$2
else
read -p 'Python project name: ' PROJECT
fi
virtualenv ${VENVSDIR}/${PROJECT}
echo "virtual environment created inside ${VENVSDIR}/${PROJECT}"
else
PROJECT=$1
fi
else
read -p 'Project name: ' PROJECT
fi
if [ ! -d ${GITDIR}/${PROJECT}.git ]; then
git_init $PROJECT
else
echo "Project directory ${PROJECT}.git already exists."
if [ $(ls -A ${GITDIR}/${PROJECT}.git) ]; then
if is_bare ${GITDIR}/${PROJECT}.git
then
echo "looks like \"${PROJECT}.git\" is an existing git project directory, choose another name."
exit 171
else
echo "\"${PROJECT}.git\" is not empty, I can't create a Git Project in it. Choose another name."
exit 172
fi
else
echo "\"${PROJECT}.git\" is an empty directory. Do you want to initialize a Git Project here? [y/N]"
read answer
case $answer in
Y|y)
git_init $PROJECT
;;
N|n)
echo "Aborting due to user request."
exit 173
;;
*)
# we assume no as default answer.
echo "you said \"$answer\" which I don't understand, so to me is no. Aborting."
exit 177
;;
esac
fi
fi
|