2011-03-20 3 views
9

Désolé s'il s'agit d'un doublon, je n'ai pas encore trouvé la bonne réponse ..SVN verrouiller un répertoire

Comment verrouiller un répertoire svn à partir de la ligne de commande? Je dois verrouiller une branche de checkins

Edit:
Toutes ces réponses que j'ai trouvé exiger que la personne pour accéder au serveur svn. Ce n'est pas une option pour moi. Je travaille dans une entreprise où la machine de contrôle de la source est littéralement enfermée dans un coffre-fort. L'accès au gain pour changer les règles d'autorisation est un processus que je ne peux pas résoudre.

+1

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

Répondre

7

Vous ne pouvez pas verrouiller un répertoire. Vous pouvez créer des règles d'autorisation interdisant l'accès en écriture aux répertoires. C'est typiquement comment ce genre de chose est fait. Vous pouvez aussi utiliser un hook pré-commit mais je pense que l'authz de Subversion est le meilleur. Voici un lien:

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

+0

Existe-t-il un moyen de configurer ceci par script et sans avoir à éditer le fichier authz? J'ai besoin de BLOQUER un répertoire temporairement pour éviter une suppression accidentelle (par exemple lors d'une opération svn rm). – runlevel0

1

J'ai récemment résolu ce problème par une solution inspirée par http://www.noah.org/engineering/olden/svn_directory_lock.html

Le script python particulier dans ce poste est surpuissant, mais je mets ce qui suit dans le crochet pré-engager pour mon 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 

Alors maintenant, vous pouvez simplement utiliser le « svn propset » et engager à créer un « verrouiller » pour un répertoire que vous souhaitez verrouiller.

Questions connexes