2011-03-20 12 views
9

Disculpe si esto es un duplicado, no encontré la respuesta correcta todavía ..SVN bloquear un directorio

¿Cómo se bloquea un directorio svn desde la línea de comandos? Necesito para bloquear una rama de confirmaciones

Editar:
Todas estas respuestas que he encontrado la persona requiere para acceder al servidor SVN. Esa no es una opción para mí. Trabajo en una empresa donde la máquina de control de origen está literalmente bloqueada en una bóveda. Obtener acceso para cambiar las reglas de autenticación es un proceso en el que no puedo resolver el cajero automático.

+1

http://stackoverflow.com/questions/4064229/svn-lock-branch – easel

Respuesta

7

No se puede bloquear un directorio. Puede crear reglas de autorización que prohibirán el acceso de escritura a los directorios. Esto es típicamente cómo se hace este tipo de cosas. También podría usar un enlace precompromiso, pero creo que el authz de Subversion es el mejor. Aquí hay un enlace:

http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html

+0

¿Hay alguna manera de configurar esto mediante script y sin tener que editar el archivo authz? Necesito BLOQUEAR temporalmente un directorio para evitar su eliminación accidental (por ejemplo, al hacer una operación svn rm). – runlevel0

1

Recientemente he resuelto este por una solución inspirada en http://www.noah.org/engineering/olden/svn_directory_lock.html

El script en Python, en particular en ese puesto es una exageración, pero puse lo siguiente en el gancho pre-commit para mi repsoitory:

#!/bin/sh 

err() { echo ${1+"[email protected]"} 1>&2; } # stderr is sent to user 

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

SVNLOOK=/usr/bin/svnlook 

# Make sure there is a log message. 
# 
$SVNLOOK log -t "$TXN" "$REPOS" | grep -q "[a-zA-Z0-9]" 
if [ $? -eq 1 ] 
then 
    err "ERROR: Must enter a log message for this commit!" 
    exit 1 
fi 

# Usage: locked_dir dir [transaction_id] 
locked_dir() 
{ 
    if [ -z "$2" ]; then _tid=""; else _tid="-t $2"; fi 
    $SVNLOOK propget $_tid "$REPOS" lock "$1" >/dev/null 2>&1 
    if [ $? -eq 0 ]; then echo true; else echo false; fi 
} 

for d in $($SVNLOOK dirs-changed -t "$TXN" "$REPOS") 
do 
    locked_before=$(locked_dir $d) 
    locked_tx=$(locked_dir $d "$TXN") 

    if [ $locked_before = $locked_tx -a $locked_tx = true ] 
    then 
    err "ERROR: Directory $d is locked. Delete lock before you commit." 
    exit 1 
    fi 
done 

# All checks passed, so allow the commit. 
exit 0 

Así que ahora, sólo tiene que utilizar el "svn propset" y comprometerse a crear una propiedad de "bloqueo" de un directorio que desea bloquear.

Cuestiones relacionadas