Come posso avere un post-commit hook che viene chiamato solo quando commit sono fatti per baule?

StackOverflow https://stackoverflow.com/questions/2146374

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top