• Meetings e Workshop
    l'associazione organizza workshop e meeting periodici

  • HowTo e manuali
    come costruire da te gadget elettronici e come programmarli

  • Hacking della PS3
    howto su come installare linux ed effettuare altri hack

  • Una comunità organizzata
    entra a far parte di una associazione organizzata e attiva

  • Strumenti di supporto
    per mantenersi in contatto e favorire la cooperazione

intermediate - prendere confidenza con gli hook di subversion (SVN) [!]in 3 passi[!] *updated* PDF Stampa E-mail
Scritto da allanon   
allanon

Si chiama hook quel particolare programma che viene invocato non appena di verifica un determinato evento quale, ad esempio, il commit una nuova revisione.

In questo mini how-to, vedremo come implementare una semplice notifica email.

 

 

 

1) DOVE TROVARLI

supponendo che il vostro repository si trovi in

/var/local/subversion/repository1

gli hook andranno posizionati in

/var/local/subversion/repository1/hooks

 

2) COME SONO FATTI

generalmente, almeno nei sistemi debian-like, ,creando un repository svn, vengono scrittianche degli esempi di hook

Vediamoli

ls -1 /var/local/subversion/repository1/hooks

post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl

 

apriamone uno

cat /var/local/subversion/repository1/hooks/post-commit.tmpl

questo e' cio' che vedrete

#!/bin/sh
# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the 
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)
...
REPOS="$1"
REV="$2"
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" email-a-cui-inviare

Bene, quindi un hook e' un script bash, almeno quello dell'esempio.

Difatti puo' esser scritto in qualsiasi altro linguaggio, quando verrà il repository svn subirà, subito dopo verrà eseguito il file post-commit

Faccio notare alcune cose:

  1. Il file deve chiamarsi post-commit
  2. Il file si trova all'interno del repository
  3. Deve essere eseguibile dall'utente di sistema che gestisce il repository (www-data//apache nel caso abbiate seguito la mia prima guida :D)
  4. E' prassi d'uso comune che l'hook non svolga direttamente azioni, e che al contrario rimandi ad un'altro eseguibile. Ad esempio vorremmo poter utilizzare uno script di notifica anche per altri repository, quindi lo piazzeremo fuori dal repository e lasceremo che sia  post-commit a chiamarlo.
  5. Ogni esempio racchiude utili commenti, per cui risultano di facile utilizzo

 

 

3) IMPLEMENTIAMO LA NOSTRA DESIDERATA NOTIFICA!

 

creaiamo un file  /var/local/subversion/repository1/hooks/post-commit

simile a questo

 #!/bin/sh

REPOS="$1"
REV="$2"

/usr/local/subversion/hook-scripts/commit-email.py "$REPOS" "$REV" "quellochevipare"

In questo modo l'hook di questo repository1, chiamera' uno script esterno che si occupera' di notificare via email il commit avvenut.

Una eventuale modifica allo script di notifica portera' benefici a tutti i repository svn che lo utilizzano.

Piu' comodo di dover copiare N script di notifica in N repository e poi doverli manutenere tutti, no?

 

 

Un piccolo esempio di script per la notifica mail (usato da me personalmente)

Non fa parte del nostro mini-howto,

perche' e' una soluzione personale che si adatta al mio sistema, e difficilmente al vostro

#!/usr/bin/python

import sys
import smtplib

# parametri invio email di notifica
fromaddr = '[email protected]'
toaddr = ['[email protected]'] # deve essere una lista
 
def send_mail(fromaddr, toaddr, body):
 server = smtplib.SMTP('localhost')
 server.sendmail(fromaddr, toaddr, body)
 server.quit()
 
if __name__ == "__main__": # se chiamato direttamente
 repos = sys.argv[1] ## nf
 rev = sys.argv[2] ## f
 terzo = sys.argv[3]
 body = '%s modificato alla revisione %s, %s' %(repos, rev, terzo)
 send_mail(fromaddr, toaddr, body)
 sys.exit(0)


 

Commenti  

 
#1 Blac]{out 2009-12-06 05:51 sistemato ed è stato aggiunto l'abbellimento del codice (reso più leggibile fra l'altro) Citazione
 

Aggiungi commento


Codice di sicurezza
Aggiorna


grayhats.org, Powered by Joomla!; Joomla templates by SG web hosting
valid xhtml valid css