2011-04-15 11 views
12

Attualmente, al fine di garantire la proprietà sovvertimento eol-style è impostato su native per ogni nuovo file aggiunto al nostro progetto, dobbiamo aggiungere questo al file ~/.subversion/config su ognuna delle nostre macchine sviluppatori:Forza svn: eol-style = nativo sul server?

[miscellany] 
enable-auto-props = yes 

[auto-props] 
*.java = svn:eol-style=native 

C'è un modo per fare l'equivalente sul server svn?

risposta

9

No, non c'è.

È possibile utilizzare un hook script per cercare la proprietà da impostare o meno, ma a parte questo non è possibile. Subversion, diversamente da CVS, non può modificare il contenuto del codice proveniente da un commit.

Il libro SVN include una nota su this question:

Attenzione

Non tentare di modificare la transazione utilizzando script di aggancio. Un esempio comune di questo sarebbe impostare automaticamente proprietà come svn:eol-style o svn:mime-type durante il commit. Anche se questa potrebbe sembrare una buona idea, causa problemi. Il problema principale è che il client non conosce la modifica apportata dallo script di hook e non c'è modo di informare il client che non è aggiornato. Questa incoerenza può portare a comportamenti sorprendenti e inaspettati.

Invece di tentare di modificare la transazione, è molto meglio controllo transazione nel pre-commit gancio e respingono il commit se non soddisfa i requisiti desiderati.

+0

Interessante. Grazie per il link. Sembra che questa sia la strada da percorrere: "Invece di tentare di modificare la transazione, è molto meglio controllare la transazione nel gancio di pre-commit e rifiutare il commit se non soddisfa i requisiti desiderati." – Bart

+0

Risposta obsoleta. – bahrep

+1

Perché è obsoleto? –

0

Non sono riuscito a trovare un esempio di come verificare la presenza di svn: proprietà in stile eol per il codice sorgente nello script di hook pre-commit direttamente. Il più vicino è check-mime-type.pl che usa le proprietà di tipo mime per determinare se un file è un file di testo.

Il seguente script inserito nel file di script pre-commit verificherà che tutti i file .cpp/.h aggiunti in un commit abbiano il set di proprietà svn: eol-style. (Può essere facilmente esteso per controllare ulteriori estensioni di file). Fornirà inoltre messaggi per indicare quali file mancano della proprietà svn: eol-style.

REPOS="$1" 
TXN="$2" 

# Get new cpp/h files 
ADDFILES=$(${SVNLOOK} changed "$REPOS" -t "$TXN" | sed -n -e '/^A.*\(\.cpp\|\.h\)$/s/^A *//p') 
#echo "ADDFILES=$ADDFILES" >&2 

# Check files for svn:eol-style property 
ESMISSING='' 
for f in ${ADDFILES} 
do 
    if [[ "$(${SVNLOOK} pl ${REPOS} -t ${TXN} ${f})" != *svn:eol-style* ]] 
    then 
    # output to stderr to include message in svn commit ouput 
    echo "No svn:eol-style property set on file $f" >&2 
    ESMISSING=1 
    fi 
done 

if [[ -n "$ESMISSING" ]] 
then 
    exit 1 
fi 
7

Solo perché la risposta di Fausto ora è obsoleto dopo il rilascio Subversion 1,8


In caso di Subversion 1.8 o versione successiva è possibile utilizzare a livello di repository (non a livello globale per tutti i repository sul server) repository dictated configuration (vedi anche topic in Collab's blog), vale a dire - svn: auto-props nella radice del tronco di ogni repository

+0

Potrebbe indicarmi come configurare la configurazione dettata dal repository? Questi link mostrano solo come leggerlo, e non riesco nemmeno a ottenere nulla da Google. – lapis

+0

Bene, ho trovato un modo attraverso il Browser Repository di TortoiseSVN ma anche un modo di console è interessante. – lapis

+0

Questa risposta è utile, ma necessita di chiarimenti. L'OP sta cercando un equivalente di auto-puntello, ma applicato sul server. Questa risposta mette in evidenza la nuova e utile funzione SVN 1.8 client store-in-repository 'svn: auto-props 'ereditabile, ma soprattutto 1) questa è una funzionalità lato client - un client SVN precedente ad es. 1.7 non lo userà affatto, e gli oggetti di scena non saranno applicati, e 2) anche un client SVN 1.8 può "svn aggiungere --no-auto-puntelli", e di nuovo, nulla viene applicato. In breve, hai bisogno di un gancio. – javabrett