# this command will setup the repo and send a mail for confirmation.
GITDIR="/var/git"
-MULTIMAIL="/usr/doc/git-2.14.5/contrib/hooks/multimail/git_multimail.py"
+BASEDIR=".gitbase"
+MULTIMAIL="/usr/doc/git-*/contrib/hooks/multimail/git_multimail.py"
GITUSER="git"
GITGRP="git"
VENVSDIR="/usr/local/venvs"
function git_init() {
PROJECT=$1
echo "creating project \"${PROJECT}.git\""
- read -p "Describe your project in one line: " DESCRIPTION
+ echo -n "Describe your project in one line: "
+ read DESCRIPTION
if [ ! -d ${GITDIR}/${PROJECT}.git ]; then
mkdir ${GITDIR}/${PROJECT}.git
fi
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
- touch hooks/post-receive
- cat > hooks/post-receive <<EOPR
-#!/bin/sh
-/usr/bin/pee ${GITDIR}/${PROJECT}.git/custom-hooks/deploy.sh \
- ${GITDIR}/${PROJECT}.git/custom-hooks/pip_install \
- ${GITDIR}/${PROJECT}.git/custom-hooks/git_multimail.py
-EOPR
+ # check if we are creating a python project
if [ $USEVENV == true ]; then
- cat > custom-hooks/pip_install << EOPIP
-#!/bin/sh
-while read oldrev newrev refname; do
- if [[ \$refname =~ .*/master$ ]]; then
- # definitely updating master;
- CHECKFILE=\$(git ls-tree --full-tree -r HEAD |grep requirements.txt |awk '{print \$3}')
- TMPREQ=\$(git cat-file -p \$CHECKFILE > /tmp/${PROJECT}-req.txt)
- if [ \$CHECKFILE ]; then
- ${VENVSDIR}/${PROJECT}/bin/pip install -r /tmp/${PROJECT}-req.txt
- fi
- if git diff-tree --name-only -r -z \$oldrev \$newrev \$CHECKFILE; then
- ${VENVSDIR}/${PROJECT}/bin/pip install -r /tmp/${PROJECT}-req.txt
- fi
- fi
-done
-EOPIP
+ # 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]
logFile = "/var/log/multimail.log"
errorLogFile = "/var/log/multimail_err.log"
EOT
- touch custom-hooks/deploy.sh
- cat > custom-hooks/deploy.sh <<EODP
-#!/bin/bash
-# Directory where to deploy files from repository
-DPTARGET=""
-# Directory containing repository
-DPGIT_DIR="${GITDIR}/${PROJECT}.git"
-# Branch that is going to be deployed to server
-DPBRANCH="master"
-
-while read oldrev newrev ref
-do
- # if DPTARGET is empty we don't want deploy for this project
- if [[ ! "" == \$DPTARGET ]]; then
- # let's check that we are deploying to the correct branch
- if [[ \$ref = refs/heads/\${DPBRANCH} ]]; then
- echo "Ref \$ref received. Deploying \${DPBRANCH} branch to production..."
- git --work-tree=\$DPTARGET --git-dir=\$DPGIT_DIR checkout -f \$DPBRANCH
- NOW=\$(date +"%d%m%Y-%H%M")
- git tag release_\$NOW \$DPBRANCH
- echo " /==============================="
- echo " | DEPLOYMENT COMPLETED"
- echo " | Target branch: \$DPTARGET"
- echo " | Target folder: \$DPGIT_DIR"
- echo " | Tag name : release_\$NOW"
- echo " \=============================="
- else
- echo "Ref \$ref received. Doing nothing: only the \${DPBRANCH} branch may be deployed on this server."
- fi
- else
- echo "Target directory not declared. Skipping deploy to server."
- fi
-done
-EODP
+ # 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 now clone this repository at ssh://danix_git:/${GITDIR}/${PROJECT}.git"
exit 0
}