Vorrei usare un hook pre-commit che impedisce agli sviluppatori di impostare svn: mergeinfo su directory non-root. Cioè, voglio applicare tale svn: mergeinfo può solo essere impostato su directory come "trunk" o "branches/branchName". A volte gli sviluppatori devono "ricordare" che non è una buona pratica utilizzare una sottodirectory della radice come target di fusione (secondo le best practice elencate allo here). Qualcuno ha un tale script di aggancio o sa dove trovarlo? Sono in un ambiente Windows, quindi batch o powershell sarebbe preferibile, ma tutto sarebbe certamente utile.Svn pre-commit hook per disabilitare svn: mergeinfo su directory non-root
risposta
Prima di tutto, mi consiglia di utilizzare perl o python per eseguire l'operazione, Windows batch lascia molto a desiderare.
È possibile utilizzare alcuni script di esempio da http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ per iniziare. Ad esempio, verify-po.py controlla le codifiche dei file e commit-access-control.pl.in controlla se l'autore dispone delle autorizzazioni per il commit. Probabilmente impiegherete svnlook diff nello script (come in quest'ultimo) per ottenere le proprietà modificate per le directory e passare attraverso i percorsi corrispondenti sia che si tratti di rami o tag che utilizzano espressioni regolari.
Aggiornamento
Trovato enforcer pre-commit hook script che sembra essere quello che stai cercando.
Che questo script non fa altro che usa svnlook di sbirciare nella transazione è il progresso. Come si passa al setaccio la transazione , si chiama a una serie di ganci che consentono l'amministratore del repository di esaminare che cosa sta succedendo avanti e decidere se è accettabile.
Esso contiene diversi metodi e verify_property_line_added() tra di loro, dal momento che è chiamato per ogni linea che viene aggiunto a una proprietà su un file.
Sembra che questa sia la soluzione più probabile e quindi il vincitore della taglia, a meno che qualcun altro non riesca a inventare qualcosa. – Charles
A proposito, dopo la tua domanda ho iniziato a interessarmi agli svn hooks, e ne implementerò alcuni (iniziando con commit proibiti senza messaggi di log), e probabilmente raggiungerò le proprietà di controllo su commit - quindi inserirò un altro aggiornamento . – pmod
Se è possibile CPAN sul server:
https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl
In caso contrario (sulla base di http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then
# Get list of paths which have changed
TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")
# Filter those which are allowed: /trunk, /branches/*,...
TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")
# Iterate over all paths, which are not allowed to have mergeinfo
while IFS= read -r TXN_PATH; do
ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)
MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
if [ ! "$MERGEINFO" = "" ]; then
echo " Cannot merge into directory that is not trunk or a branch:" >&2;
echo " $ELEM_PATH" >&2;
echo " Override by using [override]." >&2;
exit 1;
fi
done <<< "$TXN_PATHS"
# echo "Merge info check: OK"
fi
- 1. Svn mergeinfo revisioni speciali
- 2. SVN lato client hook
- 3. Usa gruntjs come hook precommit
- 4. SVN hook pre-revprop-change not working
- 5. Directory SVN non versione?
- 6. git svn clone di una singola directory di SVN repository
- 7. SVN post-commit - permesso negato per .svn/bloccare
- 8. SVN - hook pre-commit per verificare la formattazione del codice
- 9. svn checkout e aggiornamento senza la directory .svn
- 10. SVN Checkout una singola directory
- 11. Come evitare svn: mergeinfos su sottocartelle?
- 12. svn commit su più repository
- 13. non possono effettuare l'aggiornamento SVN - Impossibile aprire la directory ./svn/text-base Nessun file o directory
- 14. Come evitare un numero elevato di svn: mergeInfo durante l'unione di un trunk in un ramo di funzionalità in SVN
- 15. Git per utenti SVN
- 16. Git-Svn Store Svn password?
- 17. SVN Rinomina directory, conserva cronologia file
- 18. svn esportate tutte tranne alcune directory
- 19. SVN Crea directory come trunk ecc.
- 20. sovversione: eliminazione della directory ".svn" con versione
- 21. Escludere le directory .svn da grep
- 22. Accidentalmente ha impegnato la directory .svn
- 23. svn si fondono con --reintegrate lamenta gamme mancanti ma mergeinfo sembra corretto
- 24. Gestire l'espansione delle parole chiave SVN con git-svn
- 25. git-svn merge 2 rami svn
- 26. Consenti il commit SVN con gli avvisi del gancio preCommit esistenti
- 27. Git e SVN su Windows
- 28. Plugin SVN per Firefox
- 29. Come determinare se svn: mergeinfo è corrotto e come posso risolvere il problema?
- 30. Esporta repository git su svn
Rigorosamente curiosità - stai usando Subversion 1.5 o 1.6? (Anche io ho sofferto per mano di svn: mergeinfos su tutti i tipi di directory/file a causa di unioni da/per le directory non-root, ma il 1.5) –
Siamo su 1.6. I problemi che sto avendo non sono dovuti ai vecchi 1.5 bug in cui il client svn imposta mergeinfo su tutto ciò che è in vista. Piuttosto, i problemi sono a causa di "errori degli utenti", in cui un utente effettua una fusione con una directory non-root come "trunk/mySubProject" come destinazione di unione, impostando quindi unire le informazioni su quella directory. Questo rovina le successive fusioni, come sono sicuro che tu ne sia a conoscenza. –
Infatti - grazie per le informazioni. Siamo solo di recente al 1.6, quindi non ho avuto il tempo di osservare come sono cambiate le cose. Devo affrontare lo stesso problema, però. + Favorite –