Question

Salut, je me demandais s'il y a un moyen pour le serveur SVN pour attribuer automatiquement le svn: needs-lock propriété sur tout fichier binaire et non textuel.

Nous avons une équipe de développeurs plutôt petite mais reposant sur tout le monde de se rappeler de définir cette propriété sur les fichiers binaires nouvellement créés n'a pas de sens car il est très facile d'oublier une telle chose.

Était-ce utile?

La solution

Modifier le fichier de configuration svn et ajoutez une entrée pour les accessoires automobiles ou de l'utilisation svn:auto-props propriété versionnée avec SVN 1.8 et les nouveaux clients. Lire SVNBook

EDIT:

A partir de SVN 1.8 la vous pouvez appliquer la propriété svn:auto-props sur le chemin racine de votre référentiel. Voir cette et mis à jour SVNBook 1.8 chapitre .

Autres conseils

Apache Subversion 1.8 introduit le référentiel de configuration Dicté caractéristique qui nécessite SVN 1.8 client , mais 1,8 serveur n'est pas nécessaire parce que c'est une fonctionnalité côté client.

Avec Subversion 1.8, vous pouvez configurer les modèles d'auto-accessoires dans un dépôt en utilisant la nouvelle Subversion svn:auto-props propriété héritée.

Par exemple, définissez la valeur svn:auto-props à *.exe = svn:needs-lock=* propriété sur la racine de votre dépôt (ou chemin du référentiel qui représente une racine d'un projet). Cela se traduira dans chaque nouvellement ajouté fichier * .exe ayant la propriété de svn:needs-lock=* appliqué.

Vous pouvez stocker des valeurs à plusieurs lignes dans les propriétés de Subversion, de sorte que vous pouvez ajouter le svn standard suivant: needs-lock et le modèle MIME à 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=*

Il convient de noter que la méthode des accessoires automobiles doit être configuré sur chaque client SVN utilisé. Ainsi, lorsque vous configurez un nouveau développeur, ou un développeur existant sur une nouvelle machine, vous devez vous rappeler d'effectuer cette configuration.

Si vous utilisez tous TortoiseSVN , vous pouvez définir le tsvn: autoprops sur le dossier de base de chaque caisse et sera honoré par tous les clients TortoiseSVN.

Si vous voulez vraiment clouer, vous aurez besoin de mettre un pre-commit crochet dans chaque dépôt. Le script de enforcer pourrait être facilement lissée pour cela.

Si vous avez un python-fu, RepoGuard (le successeur SVNChecker ) semble que cela pourrait être utile aussi.

Peu importe que vous choisissez, il n'y a aucun moyen d'appliquer rétroactivement la propriété aux fichiers existants dans le référentiel, je pense. Vous pouvez probablement l'appliquer sur le prochain commit du fichier, cependant.

Il y a une page sur ce wiki Subversion qui décrit toutes les différentes options sur la façon d'ajouter des besoins de verrouillage et comment garantir automatiquement a été défini. La page donne également des exemples de scripts et les détails de configuration:

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

A l'aide d'un crochet de pré-commit

#!/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

et un crochet de pré-verrouillage

#!/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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top