# [SVN] Lancer un script lors d'une modification

## elfangor

Bonjour à tous,

J'ai un serveur svn d'installer pour un projet de groupe en php.

Les fichiers svn étant stockés sous forme de base de donnée , j'ai aussi un client qui me permet de récupérer les fichiers et de les mettres directement dans un un vhost apache.

Cependant ce n'est pas automatique, lorsque quelqu'un lance un commit, il faut lancer mon petit script de 3 ligne:

cd /home/user/projet

svn checkout --username user https://localhost/svn/proj

cp -R /home/user/projet/proj/sources/* /srv/http/proj/

Bref le but ce serais de lancer le script lors d'une modif:)

J'ai pensé surveiller le dossier mais apparement il faut coder en C, j'ai un peu l'impression de devoir utiliser une peleteuse pour faire un chateau de sable.

Il doit donc y'avoir un autre moyen, notamment directement avec svn.

Malheuresement je ne trouve pas comment :s

Si quelqu'un a une piste ou une idée...

Cordialement

----------

## Poussin

```
cd /home/user/projet

svn checkout --username user https://localhost/svn/proj

cp -R /home/user/projet/proj/sources/* /srv/http/proj/
```

Alors déjà on va un poil modifi

er ton script

```

cd /srv/http/proj/

svn import --username user https://localhost/svn/proj/sources/

```

 Ca devrait suffire, import plutot que co, si tu ne fais ca que pour recupérer les fichiers sources (evite les rep .svn dans l'arborescence.

Ensuite, pour ton problème, tu peux regarder vers le hook post-commit. C'est souvent utilisé pour envoyer un mail en cas de commit (par exemple) mais tu peux très bien l'utiliser pour exécuter ton script

----------

## elfangor

Merci bien pour la modification du script mais je pense faire une sauvegarde des fichier en tar après  :Wink: 

Effectivement  c'est exactement ça qu'il me faillais!

Cependant j'ai passé ma journée a essayer de le faire marcher sans succès... :s

Lorsque je lance le script a la main tout va bien, mais lorsque je fais un commit a partir de netbeans rien ne se passe et je ne sais pas pourquoi.

Je pense que ça venais des droits sur les fichiers mais rien à faire.

Je ne sais pas trop quelles informations vous donnez? Je n'ai pas trouvé de log pour svn, et dans les logs d'apache pas de trâce du lancement du hooks.

Cordialement

----------

## Poussin

quand tu parles de lancer le script à la main, tu parles du commit?

Je t'avoue que j'utilise svn uniquement via ssh :s

----------

## elfangor

Oui je lance le commit à la main pardon.

Vu qu'il marche bien a la main je pense a un problème de droit utilisateur.

Mais normalement mon dossier apache et mon dossier svn appartienne a http.

Et je n'arrive pas à trouver de log :s

----------

## Poussin

je ne vois pas trop la diff entre faire 'svn commit' et laisser netbeans le faire... l'utilisateur est le même coté client. Coté serveur, ça ne devrait rien changer (et de toute façon, la config est dans le .svn et commune aux 2 méthodes)

----------

## elfangor

Pardon je ne lance pas le "svn commit" mais le fichier commit à la main.

Comment savoir si svn essaye de lancer mon fichier hook?

----------

## Poussin

bah s'il ne l'exécute pas, il y a peu de chance qu'il essaie :p

mais pour être certain, tu peux remplacer ton script par un bete "touch /tmp/toto" (/tmp ou tout autre repertoire chmod 777)

edit: accessoirement, ton script doit se nommer post-commit (et pas commit) (sauf erreur)

edit2: google m'a trouvé ça: http://envrac.blogdns.net/shellscripts/export-automatique-d-un-projet-subversio

edit3: et dans ce dernier le lien précédent, il suppose que le serveur de dev et le serveur svn sont deux machines distinctes -> tu peux simplifier le bazar

----------

## elfangor

Merci bien!

J'ai testé avec le touch /tmp/toto

```

ls -al /tmp

-rw-r--r--  1 http http     0 19 mai   16:38 toto

```

Je crois en fait que le probleme viens du fait que l'utilisateur avec lequel est lancé le script post-commit n'a pas le droit de se connecter sur le svn.

En effet en plaçant la copie du svn sur tmp je n'obtiens pas les sources alors qu'en lançant le script sous root j'ai bien les sources dans tmp.

Pour moi le script est lancé avec http (cf le fichier toto appartenant a http) mais je n'arrive pas a me connecter avec(en etant root su - http ne marche pas) pour tester.

----------

## Poussin

 *elfangor wrote:*   

> 
> 
> Pour moi le script est lancé avec http (cf le fichier toto appartenant a http) mais je n'arrive pas a me connecter avec(en etant root su - http ne marche pas) pour tester.

 

L'utilisateur http n'a probablement pas de shell défini, et c'est normal! 

Inspire toi du script de l'adresse que je t'ai collée, ça devrait aider

----------

