oriolrius.cat

Des del 2000 compartiendo sobre…

Tag: svn

Podcast 1×07: gestió de projectes

Reading time: 1 – 2 minutes

Després de molt de temps usant Trac, des de movilpoint hem hagut de deixar-lo d’usar per les seves limitacions i l’hem substituit per les eines que descric en aquest podcast:

  • Mantis – gestió de tickets
  • Dokuwiki – aplicació Wiki
  • CAS – servidor d’autenticacions
  • SCMBug – sistema SCM per enllaçar Mantis i controladors de versions de codi
  • Elastix – software appliance que integra Asterisk i Openfire
  • Openfire – servidor Jabber
  • Asterisk – open source PBX

Després dels enllaços demanar-vos disculpes per l’allargada d’aquest podcast però crec que valia la pena repassar el perquè de tot plegat i les avantatges i inconvenients. Sobretot si voleu aclarir qualsevol concepte o resoldre dubte deixeu comentaris i els respondré en molt de gust.

[display_podcast]

Trick per Subversion

Reading time: < 1 minute

Fa temps que no escribia coses tècniques així que per anar fent boca aquí va un petit truquillo pel Subversion.

Si sou usuaris de línia de comandes del SVN quan esteu programant un projecte i no sabeu quins fitxers no heu pujat al repositori sabeu que podeu fer un:

svn status

I això ús mostra una llista dels fitxers que s’ha modificat i dels que no han estat afegits al repositori, doncs ara ve un petit script per afegir-los tots de cop:

for F in $(svn status | grep "?" | cut -c 8-);
do
  svn add $F;
done

Ara ja podem fer un commit i no em d’anar recorrent tots els directoris i fitxers per afegir-los al repositori.

Fent un tar sense els directoris .svn

Reading time: < 1 minute

Després de molts anys d’experiències en Unix/Linux encara de vegades m’ofusco en tonteries com la que comento al títol, què trist,eh!? bé doncs perquè no ús passi com a mi que he trigat quasi 10min per inspirar-me i fer algo tan senzill com això:

tar cvfz fitxer.tar.gz $(find directori/ -type f | grep -v .svn)

Suposo que és obvi entendre que volem fer una còpia en un fitxer comprimit del codi que hi ha a directori sense els fitxers i directoris .svn del control de versions (subversion).

Shell Script: backup dels repositoris de subversion

Reading time: 2 – 2 minutes

La setmana passada vaig fer un petit shell script per fer backup dels repositoris de software del meu servidor. Bàsicament el que fa és mirar a /var/svn/repos quins directoris hi ha. Llavors llença un svnadmin dump i al mateix temps comprimeix amb bzip2 la sortida cap a un fitxer, després aquest fitxer es guarda a /home/backup/subversion que és una unitat de xarxa montada per fer backups en el servidor. L’últim detall que em fa falta comentar és que després de fer la còpia del fitxer, deixa 3 fitxers de cada repositori al directori de backup i la resta els borra. D’aquesta forma tinc 3 còpies de cada un dels repositoris, una d’ahir, l’altre d’abans d’ahir i finalment una de fa 3 dies. Així si passa algún desastre d’incosistència o algo semblant tinc més marge per recuperar el repositori.

Veureu que el codi és molt simple i si algú el vol adaptar no crec que li costi gaire, tot esta programat amb ordres típiques, sense comandes rares ni res. Finalment l’únic que he hagut de fer és posar-lo al cron a alguna hora de matinada.

#!/bin/sh
BASE="/var/svn/repos"
DATA=`date "+%Y%m%d"`
cd $BASE
REPOSS=`find . -maxdepth 1 -mindepth 1 -type d | cut -f 2 -d "/"`
BACKUPDIR="/home/backup/subversion"
for REPOS in $REPOSS
do
        BACKUPFITXER=backup-repos-$REPOS
        FITXER=$BACKUPFITXER-$DATA.dump.bz2
        echo -n "Starting $REPOS backup..."
        svnadmin dump -q $BASE/$REPOS | bzip2 > $FITXER 2>/dev/null
        mv $FITXER $BACKUPDIR
        cd $BACKUPDIR
        rm -f `ls -t $BACKUPFITXER* | sed -e 1,3d` 2> /dev/null
        echo "OK"
        cd $BASE
done

Generant RSS de les revisions de Subversion

Reading time: 2 – 2 minutes

rss.jpg

Quan treballes en un projecte on hi ha més d’una persona treballant contra un repositori de codi és molt bona idea poder-se sindicar via RSS a les noves revisions que es van publicant del codi i als comentaris associats a aquestes revisions. De fet, aconseguir això amb subversion no és gens difícil. Jo fins ara ho he fet amb el WebSVN (port del ViewCVS. A més gràcies al trac també podem obtenir aquests RSS i moltes més funcionalitats. Però tot això ja us ho he explicat. En alguns casos però ens pot interessar publicar aquests RSS sense haver de tenir programes orientats a altres funcionalitats sinó únicament aprofitar les extencions WebDAV/DAV_SVN per publicar els RSS. Això és el que ens expliquen a l’article HOWTO: Adding an RSS feed to a Subversion Server (local).

De fet, el que planteja aquest article és força senzill. Simplement usa un generador d’RSS a partir de les revisions de l’SVN, l’script esta fet en python i després li diem al subversion que després de cada commit que es fassi al repositori es genir un nou fitxer RSS. Així doncs el tema no té cap misteri però va bé tenir-ho en un howto per si mai fa falta.

I love symfony

Reading time: 2 – 2 minutes

symfony.gif

Porto dos dies enganxat al Zend Studio programant en PHP5, concretament amb el framework anomenat symfony. Doncs bé no tinc cap ganes de posar-me a escriure un article tècnic sobre aquests dos aplicatius i menys a entrar en detall en la potencia d’ambdues eines juntes. Però si que volia deixar constància que això no té res que veure amb la programació de PHP que feia fa uns anys amb el PHP3. Això si que és un plaer, classes, object factories, ADO amb Abstract Factory Design, debugger, SOAP… i un llarg etcetera que no s’acaba mai.

Realment si quan heu de programar us agrada tenir eines com deu mana al vostre abast, jo diria que aquest és el duo perfecte. Si a més podeu tenir un servidor amb apache2 i el Zend Studio Server instal·lat, un control de versions amb subversion, una gestió de tasques amb taskspro i un sistema de tiqueting i roadmap amb trac jo diria que ja no es pot demanar gran cosa més.

L’últim comentari al tema abans de plegar per avui, la curva d’aprenentage del symfony és força llarga, a més interioritzar el model MVC i la implmentació basada en mojavi que en fa symfony costa lo seu. Però després passes a una nova dimenció, m’ha costat arribari però ara em declaro un enamorat del symfony.

SVN: Tortoise per Linux i Nautilus-scripts

Reading time: 2 – 2 minutes

Per windows tenim disponible el TortoiseSVN una aplicació que queda instal·lada com a opcions de contexte de l’explorer de windows. Ens permet treballar amb el VCS de forma súper còmode. De fet, el subversion es converteix en algo d’allò més senzill gràcies a aquest aplicació i acabes agafant dependència de l’eina.

Doncs bé aquesta eina com passa sovint no existeix per linux i més concretament com a extenció del nautilus per gnome encara menys. Però avui m’he instal·lat un script de nautilus (concepte que desconeixia fins avui) que ens permet d’una forma força rudimentaria, però eficaç, treballar amb el menú de contexte del nautilus directament contra el subversion. Sense haver de sortir a la consola per llençar manualment les comandes més típiques.

Concretament l’script l’he trobat al mariuss’ blog en l’article Nautilus Script for Subversion ens explica com s’ha currat aquest script. De fet, m’he informat sobre aquests scripts del nautilus i són trivials de fer. Quan els domini una mica més ús explico com es fan. De moment ús deixo amb el gusanillo.

Si useu el subversion i no voleu haver d’anar amb la línia de comandes amunt i aball cada dos per tres, us recomano que descomprimiu el fitxer: nautilus-svn-scripts-0.9.2.tar.gz dins del directori ~/.gnome2/nautilus-scripts, després reinicieu el nautilus i llestos ja podeu veure el menú de contexte apretant el botó dret del ratolí, el menú és algo així:

NautilusSubversionScripts.png

cookbook: importar projecte de symfony al subversion

Reading time: 2 – 2 minutes

Petit cookbook de com hem d’importar un projecte que estiguem programant amb el framework symfony. Primer creem el directori del repositori on volem pujar el projecte, anem al directori del projecte. Borrem els directoris log i cache del qual no ens interessa mantenir un control de versions. I després importem el projecte.

svn mkdir -m "NOTA: Creem directori on hi posarem projecte" http://exemple.com/svn/repos/projecte/dev
cd directori_projecte_symfony
rm -rf log
rm -rf cache
svn import -m "NOTA: importem primera versio del projecte" . http://exemple.com/svn/repos/projecte/dev

Ara movem el directori actual del projecte i en creem un de nou, que ja tindrà control de versions. Fem un checkout (co) de la versió que em importat abans i defenim que els directoris log i cache no s’importaràn mai quan fem un commit (ci). Després creem els directoris en qüestió i els assignem un propietari igual al del procés d’apache perquè aquest el pugui escriure-hi mentre esta execucutant el nostre projecte symfony.

mv directori_projecte_symfony directori_projecte_symfony.bak
mkdir directori_projecte_symfony_amb_svn
cd directori_projecte_symfony_amb_svn
svn co http://exemple.com/svn/repos/projecte/dev .
svn propedit svn:ignore .
log
cache
mkdir log
mkdir cache
chown apache:apache log
chown apache:apache cache

Subversion: recuperant el repositori

Reading time: 2 – 2 minutes

subversion.png

Ahir dissabte vaig estar fent updates d’un munt de servidors i com sempre diu la Daphne, si una versió d’algo va perquè carai l’has d’actualitzar. Doncs bé jo diria que quasi tot va quedar al seu lloc excepte el Subversion que després de montar de nou el mòdul WebDAV d’apache i el mòdul DAV_SVN per accedir al SVN des d’HTTP no hi va haver manera de que el repositori funcionés no parava de donar errors extranyíssims que l’oracle de la sabiduria google no em sabia resoldre.

Finalment us explico com ho vaig fer ja que a mi em va salvar la vida i quasi 1000 revisions de versions de software de la feina… bufff! quin descans. El truc és tan senzill com oblidar-se del Berkeley DB que és per on ho intentava arreglar jo. El Berkeley DB (bdb) és el format que usa SVN per guardar la informació al repositori del disc. Cal simplement usar un svnadmin dump i dirigir-lo a un fitxer. Després restaurem aquest fitxer de ‘dump’ al nou repositori amb el svnadmin load. Fàcil,eh!? doncs em vaig tirar més de 3h per descobrir això tan tonto per culpa d’intentar solucionar el tema amb el bdb i no directament amb el propi SVN.