svn svn-propset

Añadir svn: needs-lock automáticamente



svn-propset (5)

Apache Subversion 1.8 introdujo la característica de configuración dictada del repositorio que requiere el cliente SVN 1.8 , pero el servidor 1.8 no es necesario porque esta es una característica del lado del cliente.

Con Subversion 1.8, puede configurar patrones de autopropulsados ​​dentro de un repositorio utilizando la nueva propiedad heredada Subversion svn:auto-props .

Por ejemplo, configure svn:auto-props value en la propiedad *.exe = svn:needs-lock=* en la raíz de su repositorio (o ruta de repositorio que represente una raíz de un proyecto). Esto dará como resultado en cada archivo * .exe recién agregado que tenga la propiedad svn:needs-lock=* aplicada.

Puede almacenar valores de varias líneas en propiedades de Subversion, por lo que puede agregar el siguiente estándar svn: needs-lock y el patrón MIME a svn:auto-props :

*.bmp = svn:mime-type=image/bmp;svn:needs-lock=* *.gif = svn:mime-type=image/gif;svn:needs-lock=* *.ico = svn:mime-type=image/x-icon;svn:needs-lock=* *.jpeg = svn:mime-type=image/jpeg;svn:needs-lock=* *.jpg = svn:mime-type=image/jpeg;svn:needs-lock=* *.png = svn:mime-type=image/png;svn:needs-lock=* *.tif = svn:mime-type=image/tiff;svn:needs-lock=* *.tiff = svn:mime-type=image/tiff;svn:needs-lock=* *.doc = svn:mime-type=application/x-msword;svn:needs-lock=* *.docx = svn:mime-type=application/x-msword;svn:needs-lock=* *.jar = svn:mime-type=application/octet-stream;svn:needs-lock=* *.odc = svn:mime-type=application/vnd.oasis.opendocument.chart;svn:needs-lock=* *.odf = svn:mime-type=application/vnd.oasis.opendocument.formula;svn:needs-lock=* *.odg = svn:mime-type=application/vnd.oasis.opendocument.graphics;svn:needs-lock=* *.odi = svn:mime-type=application/vnd.oasis.opendocument.image;svn:needs-lock=* *.odp = svn:mime-type=application/vnd.oasis.opendocument.presentation;svn:needs-lock=* *.ods = svn:mime-type=application/vnd.oasis.opendocument.spreadsheet;svn:needs-lock=* *.odt = svn:mime-type=application/vnd.oasis.opendocument.text;svn:needs-lock=* *.pdf = svn:mime-type=application/pdf;svn:needs-lock=* *.ppt = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock=* *.ser = svn:mime-type=application/octet-stream;svn:needs-lock=* *.swf = svn:mime-type=application/x-shockwave-flash;svn:needs-lock=* *.vsd = svn:mime-type=application/x-visio;svn:needs-lock=* *.xls = svn:mime-type=application/vnd.ms-excel;svn:needs-lock=* *.zip = svn:mime-type=application/zip;svn:needs-lock=*

Hola, me preguntaba si hay una forma para que el servidor SVN asigne automáticamente la propiedad svn: needs-lock en cualquier archivo que sea binario y no textual.

Tenemos un equipo de desarrolladores bastante pequeño, pero no todos tienen que recordar establecer esta propiedad en los archivos binarios recién creados, ya que es muy fácil olvidarlo.


Cabe señalar que el método de autopropósitos debe configurarse en cada cliente SVN que se utilice. Por lo tanto, cuando configura un desarrollador nuevo o un desarrollador existente en una máquina nueva, debe recordar realizar esta configuración.

Si todos están usando TortoiseSVN , puede establecer la propiedad tsvn:autoprops en la carpeta base de cada pago y todos los clientes de TortoiseSVN la cumplirán.

Si realmente quieres clavarlo, necesitarás poner un gancho pre-commit en cada repositorio. La secuencia de comandos de enforcer podría ser procesada fácilmente para esto.

Si tienes python-fu, RepoGuard (el sucesor de SVNChecker ) parece que también podría ser útil.

No importa cuál elija, no hay forma de aplicar retroactivamente la propiedad a los archivos existentes en el repositorio, creo. Sin embargo, es probable que puedas aplicarlo en la siguiente confirmación del archivo.


Hay una página en esta wiki de Subversion que describe todas las diferentes opciones sobre cómo agregar automáticamente needs-lock y cómo garantizar que se haya configurado. La página también proporciona scripts de ejemplo y detalles de configuración:

http://www.orcaware.com/svn/wiki/Automatic_lock-modify-unlock


Use un gancho de precompromiso

#!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook ICONV=/usr/bin/iconv SVNLOOKOK=1 # Check files for svn:needs-lock property # Exit on all errors. set -e echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH do if [[ $REPOS_PATH =~ (A|M|U)[[:blank:]]{3}(.*)/.(.*) ]] then if [ ${#BASH_REMATCH[*]} -ge 2 ] then FILENAME=${BASH_REMATCH[2]}.${BASH_REMATCH[3]}; # Make sure every file has the svn:needs-lock property set if [ "" == "`$SVNLOOK propget -t /"$TXN/" /"$REPOS/" svn:needs-lock /"$FILENAME/" 2> /dev/null`" ] then ERROR=1; echo "" >&2 echo "svn:needs-lock property has to be set on /"$FILENAME/"" >&2 echo "" >&2 fi fi fi test -z $ERROR || (exit 1) done # All checks passed, so allow the commit. exit 0

y un gancho pre-bloqueo

#!/bin/bash REPOS="$1" PATH="$2" USER="$3" # If a lock exists and is owned by a different person, don''t allow it # to be stolen (e.g., with ''svn lock --force ...''). # (Maybe this script could send email to the lock owner?) SVNLOOK=/usr/bin/svnlook GREP=/bin/grep SED=/bin/sed LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | / $GREP ''^Owner: '' | $SED ''s/Owner: //''` # If we get no result from svnlook, there''s no lock, allow the lock to # happen: if [ "$LOCK_OWNER" = "" ]; then exit 0 fi # If the person locking matches the lock''s owner, allow the lock to # happen: if [ "$LOCK_OWNER" = "$USER" ]; then exit 0 fi


Edite el archivo svn config y agregue una entrada para accesorios automáticos o use la propiedad svn:auto-props versioned con SVN 1.8 y clientes más nuevos. ¡Lee SVNBook !

EDITAR:

Desde SVN 1.8, puede aplicar la propiedad svn:auto-props a la ruta raíz de su repositorio. Vea esta nota de la versión y el capítulo actualizado de SVNBook 1.8 .