Domanda

Usiamo svn: externals per revisioni specifiche di una libreria, ad es. come

xyzlib -r12345 https://asdf.asdf.local/xyzlib/trunk/

Quando apporti una modifica nella tua copia di lavoro a un tale estratto verificato, è possibile eseguire il commit anche se i collegamenti esterni a una revisione specifica e non HEAD.

Quando esegui svn update dopo il commit, le modifiche andranno nella copia di lavoro perché Subversion ripristina tutto alla revisione 12345. Quindi non vedi mai le modifiche da solo ma sono ancora nella TESTA, che è male.

È possibile vietare i commit solo quando l'esterno non punta alla revisione HEAD?

È stato utile?

Soluzione

Per questo tipo di convalide consiglierei anche un hook pre-commit, ma invece di scrivere uno script che può facilmente risultare impossibile da capire, consiglio di usare una libreria come SVNKit - http://svnkit.com/ (se conosci Java).

Ho scritto alcuni hook pre-commit usando questa libreria ed è abbastanza facile lavorare con. Scrivi un piccolo programma Java eseguibile che viene chiamato dall'hook pre-commit da Subversion. Quindi è facile da estrarre ad es. proprietà o parti dell'URL per eseguire la convalida e rifiutare il commit se non si applica alle tue " regole " ;.

Dai un'occhiata alle classi SVNLookClient e SVNChangeEntry: hanno metodi per i casi più comuni (ad es. estrazione di informazioni su un commit in corso.)

Altri suggerimenti

Potresti provare qualcosa del genere: usa un script pre-commit per verificare se il commit sta andando a un tag. In tal caso, fallire e fornire un messaggio. Altre informazioni sugli hook di sovversione. Dovrai ri scrivere la regex in modo che fallisca se non è HEAD piuttosto che fallire se è un tag.

$SVNLOOK changed -t “$TXN” “$REPOS” | egrep -v “^[AD][[:space:]]+(.*/)?tags/[^/]+/<*>#8221; | egrep “^[^[:space:]]+[[:space:]]+tags/[^/]+/.+”
if [ $? -eq 0 ] ; then
echo >&2 “***************************************”
echo >&2 “* Modification of tags is not allowed *”
echo >&2 “***************************************”
exit 1
fi

Dato che stai usando https, suppongo che tu stia usando mod_dav_svn . È possibile impostare un URL aggiuntivo per il repository della libreria e concedere solo l'accesso in sola lettura. In questo modo anche gli sviluppatori che normalmente possono eseguire il commit nella libreria, non saranno in grado di eseguire il commit tramite svn: external.

Se non ti impegni a mantenere l'esterno definito come una revisione del trunk, perché non creare un nuovo tag basato su quella revisione. È quindi possibile avere il punto svn: external sul tag e utilizzare uno dei metodi di controllo dell'accesso documentati per limitare i commit nella directory dei tag (oppure inserire il tag in un repository diverso e rendere quel repository di sola lettura).

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