Proiect nou Trac + SVN, într-un pas

Atât pentru proiecte personale, cât și pentru chestii comerciale, folosesc SVN pentru version control. Îmi e la îndemână, deși, având în vedere că de cele mai multe ori folosesc un GUI pentru accesarea lor (gen Eclipse sau RabbitVCS sau ceva de genul ăsta) – aș putea folosi pentru ce fac eu și orice altceva – Dan ne-a trecut, spre exemplu, la robot, pe Mercurial.

Trac este util mai ales pentru echipe și pentru bugtracking, este scris în Python și are și o interfață XMLRPC (pe care eu încă nu am reușit să o folosesc din Eclipse – pentru Trac 0.12 cu Mylyn).

De fiecare dată când vreau să pornesc un proiect nou – poate și pentru că nu se întâmplă foarte des, trebuie să dau un google sau să verific pagina de man pentru cum se creează un repo în SVN, care sunt permisiunile care trebuie setate, cum se creează un environment în Trac, pe unde am pus eu folder-ul care conține site-urile de Trac pe server, și alte chestii cu care îmi cheltui timpul aiurea.

Pornind de la un script de aici (am ruginit puternic la capitolul bash scripting, deși la vremea mea eram as – pe vremea când făceam SO cu :P) am inventat un scriptuleț care creează un repo SVN și apoi crează pentru el un environment Trac. Față de script-ul original am făcut câteva modificări:

  • am scos în variabile path-urile către folder-ul în care se găsesc proiectele Trac, path-ul în care se găsesc repo-urile SVN și root-ul URL-ului la care pot fi accesate
  • am adăugat structura recomandată pentru repo-uri SVN, care se commit-uieste automat, acum
  • începând cu Trac 0.12, pot exista mai multe repo-uri pe environment, și, înafară de cel (default), care nu mai este obligatoriu, se salvează în baza de date și se pot modifica cu trac-admin. De aceea, repo-ul SVN este adăugat separat, cu trac-admin repository add.
  • am adăugat user-ul meu ca Trac admin – ca să am acces direct la interfața web
  • am adăugat hook-urile pentru sincronizarea Trac cu repo-ul SVN, despre care am citit aici, ca totul să meargă smooth :)

Script-ul presupune că există o scheletul pentru layout-ul repo-ului SVN în folder-ul care conține repo-uri (la mine, /home/svn), în folderul skel. De asemenea, pentru hook-urile pentru Trac, se presupune că există tot acolo un folder hooktemplates, care conține template-ul pentru hook-uri (post-commit, post-revprop-change).

#!/bin/bash
# createproject.sh
# Based on a script by Hans de Ruiter (http://hdrlab.org.nz/articles/a-linux-server-for-software-developers/setting-up-and-using-a-secure-trac-and-svn-server/adding-deleting-a-project-to-trac-and-svn/)

EXPECTED_ARGS=1

if [ $# -ne $EXPECTED_ARGS ]; then
	echo "$0 creates a new Trac project complete with a new SVN repository"
	echo "USAGE: $0 [newprojname]"
	echo "e.g., $0 \"New Project\""
	exit 1
fi

if [ $(whoami) != "root" ]; then
	echo "You need to run this script as root."
	scriptname=`basename "$0"`
	echo "Use 'sudo ./$scriptname' then enter your password when prompted. Or"
	echo "use su, enter your password, and then execute ./$scriptname"
	exit 1
fi

proj_name=$1
proj_dirname=`echo "$proj_name" | tr " " "_"`

trac_root=`echo "/path/to/trac/sites/"`
svn_root=`echo "/path/to/svn/repos/"`
site_root=`echo "http://yoursite.com"`

echo "The project repository will be found in $site_root/$proj_dirname"
echo "The Trac pages will be found in $site_root/$proj_dirname"

#	Creating SVN repo
cd $svn_root
su www-data -c "svnadmin create $proj_dirname"
svn import $svn_root/skel file://$svn_root/$proj_dirname/ -m "Creating basic folder structure $proj_name"
chown www-data:subversion $svn_root/$proj_dirname -R

#	Creating Trac site
su www-data -c "mkdir $trac_root/$proj_dirname"
cd $trac_root/$proj_dirname
trac-admin $trac_root/$proj_dirname initenv "$proj_name" sqlite:db/trac.db #svn /home/svn/$proj_dirname
trac-admin $trac_root/$proj_dirname repository add default /home/svn/$proj_dirname svn
trac-admin $trac_root/$proj_dirname repository set default "url" "$site_root/svn/$proj_dirname"
trac-admin $trac_root/$proj_dirname repository resync default
trac-admin $trac_root/$proj_dirname permission add yeti TRAC_ADMIN
chown -R www-data $trac_root/$proj_dirname

# subversion hooks
su www-data -c "sed 's/PROJ_NAME/$proj_dirname/g' $svn_root/hooktemplates/post-commit > $svn_root/$proj_dirname/hooks/post-commit"
chmod ug+x $svn_root/$proj_dirname/hooks/post-commit
su www-data -c "sed 's/PROJ_NAME/$proj_dirname/g' $svn_root/hooktemplates/post-revprop-change > $svn_root/$proj_dirname/hooks/post-revprop-change"
chmod ug+x $svn_root/$proj_dirname/hooks/post-revprop-change

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.