2011-04-15 5 views
12

En la actualidad, con el fin de asegurar la propiedad subversión eol-style se establece en native para cada fichero nuevo añadido a nuestro proyecto, tenemos que añadir esto al archivo ~/.subversion/config en cada una de nuestras máquinas desarrolladores:Force svn: eol-style = native en el servidor?

[miscellany] 
enable-auto-props = yes 

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

¿Hay una forma de hacer el equivalente en el servidor svn?

Respuesta

9

No, no hay.

Puede utilizar un scripts de gancho para buscar la propiedad o no, pero aparte de eso no es posible. Subversion, de manera diferente que CVS, no puede cambiar el contenido del código proveniente de una confirmación.

El libro SVN incluye una nota sobre this question:

Advertencia

No intente modificar la transacción utilizando scripts gancho. Un ejemplo común de esto sería establecer automáticamente propiedades como svn:eol-style o svn:mime-type durante la confirmación. Si bien esto puede parecer una buena idea, causa problemas. El principal problema es que el cliente no sabe sobre el cambio realizado por el script de enlace, y no hay forma de informar al cliente que está desactualizado. Esta incoherencia puede llevar a un comportamiento sorprendente e inesperado.

En lugar de intentar modificar la transacción, que es mucho mejor que cheque la transacción en el pre-commit gancho y rechazan el commit si no cumple con los requisitos deseados.

+0

Interesante. Gracias por el enlace. Parece que este es el camino a seguir: "En lugar de intentar modificar la transacción, es mucho mejor verificar la transacción en el enlace precompromiso y rechazar la confirmación si no cumple con los requisitos deseados". – Bart

+0

Respuesta obsoleta. – bahrep

+1

¿Por qué está desactualizado? –

0

No pude encontrar un ejemplo de cómo comprobar la propiedad svn: eol-style para el código fuente en el script de enlace precompilado directamente. El más cercano es el check-mime-type.pl que utiliza propiedades tipo mime para determinar si un archivo es un archivo de texto.

La siguiente secuencia de comandos insertada en el archivo de secuencia de comandos previa a la confirmación comprobará que todos los archivos .cpp/.h agregados en una confirmación tengan establecida la propiedad svn: eol-style. (Se puede extender fácilmente para verificar extensiones de archivo adicionales). También proporcionará mensajes para indicar qué archivos faltan a la propiedad 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

El hecho de que la respuesta de Fausto ahora está anticuado después de la liberación Subversion 1,8


En caso de Subversion 1.8 o posterior, puede utilizar a nivel de repositorio (no a nivel mundial para todos los repositorios en el servidor) repository dictated configuration (véase también topic in Collab's blog), a saber, - svn: auto-props en la raíz del tronco de cada repositorio

+0

¿Podría indicarme cómo configurar esa configuración dictada del repositorio? Esos enlaces solo muestran cómo leerlo, y parece que tampoco puedo obtener nada de Google. – lapis

+0

Bueno, encontré el camino a través del navegador de repositorios de TortoiseSVN, pero una consola también es interesante. – lapis

+0

Esta respuesta es útil, pero necesita aclaración. Th OP está buscando un equivalente de auto-props, pero aplicado en el servidor. Esta respuesta señala el nuevo y útil SVN 1.8 cliente-store-en-repositorio función 'svn: auto-props' inheritable-property, pero importante: 1) esta es una característica del lado del cliente - un cliente SVN anterior, p. 1.7 no lo utilizará en absoluto, y los accesorios no se aplicarán, y 2) incluso un cliente SVN 1.8 puede 'svn add --no-auto-props', y de nuevo, nada se aplica. En resumen, necesitas un gancho. – javabrett