Domanda

Ho un repository di sovversione disposto in questo modo:

Repo
    ProjectA
        trunk
        branches
        tags
    ProjectB
        trunk
        branches
        tags

Sto cercando di scrivere uno script di hook post-commit che si applica solo a un progetto, ma ho appena imparato che sono alloggiati alla radice del repository.

Gli unici due parametri che ottengo sono il percorso del repository e il numero di revisione. C'è un modo per farmi eseguire questo script solo per un particolare progetto?

Grazie,

Soluzione:La soluzione definitiva è andata qualcosa del genere:

#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
    echo "do stuff"
fi
È stato utile?

Soluzione

Sì, usa Svnlook Per ottenere l'elenco dei file modificati nella revisione impegnata, quindi Grep sui nomi con un regex adatto per determinare se il percorso il post-commit contiene il nome del progetto nel luogo corretto, se esegue il codice, altrimenti salta su la fine dello script e restituire 0.

Altri suggerimenti

Sono venuto qui cercando la risposta a questa domanda per VisualSVN su un server di Windows 2012. Dopo aver raccolto ulteriori informazioni, ecco la soluzione che mi è venuta in mente per un file post-commit di Windows Batch su VisualSVN che carica uno script PHP su un server di sviluppo per far sì che il progetto specifico venga distribuito su quel server. Il comando Hook è una riga:

svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem

Il REM era necessario come "no-op" per impedire che il gancio fosse segnalato dalla tartaruga come fallimento per commit per altri progetti. I contenuti di Checkout_on_commit.php che causano la distribuzione del progetto sul server Linux sono:

<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>

In Subversion non esiste una definizione come un "progetto" ... la definizione deve essere fatta da te. Ciò significa che la sovversione lo esegue sulla modifica nel repository non sulla base "progetto" ...

È possibile utilizzare le informazioni che ottieni come il repository e il numero di revisione per estrarre le informazioni di cui hai bisogno ... puoi farlo semplicemente usando SVNLook per estrarre le informazioni di cui hai bisogno ... chiamando SVNLook con i parametri appropriati.

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