Come posso avere un post-commit hook che viene chiamato solo quando commit sono fatti per baule?
-
23-09-2019 - |
Domanda
Ho un repository che ha le seguenti directory:
- rami
- tronco
La directory tronco contiene la linea principale di sviluppo. Ho creato un-commit Post Script gancio per il repository che aggiorna una copia di lavoro (del tronco) quando un utente si impegna di nuovo al repository.
E 'simile a questa:
/usr/bin/svn update /path/to/a/working/copy
Ho appena creato un ramo del codice come sto per iniziare alcuni cambiamenti importanti, ma notato che quando ho commesso i miei cambiamenti in ramo si chiama il-commit dopo gancio e aggiorna la copia di lavoro (copia del tronco) .
C'è un modo posso modificare sia il mio post-commit hook script o di una regolazione che posso fare che solo aggiornare la copia di lavoro se il commit è stato fatto per la directory del tronco e non qualsiasi altra directory?
Soluzione
Come si può vedere nel questa documentazione , sono passati i parametri al post-commit script.
Il repository passa due argomenti a questo programma:. Il percorso del repository, e il nuovo numero di revisione che è stato creato
Il post-commit hook potrebbe essere qualsiasi programma di qualsiasi tipo:. Uno script bash, un programma C, uno script python ... Succede che il guscio lancia questo programma, con i due parametri
È possibile trovare un elenco di script interessanti qui . Un buon inizio sarebbe questo python script, che utilizza le librerie python svn.
Si prega di notare che il percorso fornito non è lo stesso che il percorso del file che si sta verificando in (vedi di Paul risposta ). Ma usando queste informazioni con il revnum dovrebbe aiutare a ottenere l'elenco delle modifiche, da cui è possibile determinare se le operazioni sono state fatte sul tronco o meno.
Altri suggerimenti
In aggiunta al risposta da Bishiboosh , vale la pena notare che i ganci possono essere qualsiasi . Cioè, se si voleva, si potrebbe scrivere il programma in C
. I parametri che vengono passati sono descritti in il doc .
Per una buona repository di script per ottenere ispirazione da, uno sguardo ai pagina strumenti sovversione . In generale, se si vuole fare un po 'l'elaborazione condizionale in base al contenuto della transazione, e si fa, dal momento che si desidera solo elaborare se i file sono nel bagagliaio, allora sarà più facile da usare Python, dal momento che è dotato di un mucchio di strumenti ad esaminare le operazioni. Questo script è un buon punto di partenza in cerca di ispirazione.
Si noti che il percorso al parametro, non è lo stesso che il percorso del file che si sta verificando in. Si potrebbe avere più file nella checkin dopo tutto ... Che cosa si sta passato è la posizione del repository, e la revisione del cambiamento. L'utilizzo di questi due pezzi di informazioni che è possibile ottenere le informazioni circa il cambiamento dal repository, e utilizzare tali informazioni per decidere se eseguire o no un'azione nel gancio post-commit.
Ecco un altro esempio (in Perl) che controlla in modo esplicito il percorso dei file del check-in. Questo è uno script molto più complicato, ma molto probabilmente le parti salienti può essere strappato e riutilizzato.