Pregunta

Usamos svn: externals para revisiones específicas de una biblioteca, por ejemplo, como

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

Cuando realiza una modificación en su copia de trabajo a un tal externo retirado, es posible confirmar aunque los enlaces externos a una revisión específica y no la HEAD.

Cuando ejecute svn update después de la confirmación, los cambios desaparecerán en la copia de trabajo porque Subversion revierte todo a la revisión 12345. Por lo tanto, nunca verá los cambios usted mismo, pero aún lo son. en la CABEZA, que es mala.

¿Es posible prohibir las confirmaciones solo cuando el externo no apunta a la revisión HEAD?

¿Fue útil?

Solución

Para este tipo de validaciones, también recomendaría un enlace de confirmación previa, pero en lugar de escribir un script que puede resultar imposible de entender, recomiendo usar una biblioteca como SVNKit - http://svnkit.com/ (si conoce Java).

He escrito algunos enganches de precompromiso usando esta biblioteca y es muy fácil trabajar con ellos. Usted escribe un pequeño programa Java ejecutable que se llama desde el enlace de pre-confirmación por parte de Subversion. Entonces es fácil de extraer por ej. propiedades o partes de la URL para realizar la validación y rechazar el compromiso si no se aplica a sus " reglas " ;.

Eche un vistazo a las clases SVNLookClient y SVNChangeEntry: tienen métodos para los casos más comunes (por ejemplo, extracción de información sobre un compromiso en curso).

Otros consejos

Puedes intentar algo como esto: usa un script de pre-commit para verificar si el commit va a una etiqueta. Si es así, entonces falla y envía un mensaje. Lea más sobre los enlaces de subversion. Tendrá que volver a consultar escriba la expresión regular para que falle si no es HEAD en lugar de fallar si es una etiqueta.

$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

Ya que estás usando https, asumo que estás usando mod_dav_svn . Puede configurar una URL adicional para el repositorio de su biblioteca y solo otorgarle acceso de solo lectura. De esa forma, incluso los desarrolladores que normalmente pueden comprometerse con la biblioteca, no podrán hacerlo a través de la svn: external.

Si no está comprometido a mantener lo externo definido como una revisión de troncal, ¿por qué no crea una nueva etiqueta basada en esa revisión? Luego, puede tener su svn: punto externo a la etiqueta, y usar uno de los métodos de control de acceso documentados para limitar las confirmaciones a su directorio de etiquetas (o colocar la etiqueta en un repositorio diferente y hacer que la repo sea de solo lectura).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top