Pergunta

Oi eu queria saber se existe uma maneira para o servidor SVN para atribuir automaticamente a propriedade svn: needs-lock em qualquer arquivo que é binário e não textual.

Temos um bastante pequena equipa desenvolvedores, mas descansando em todos se lembrem para definir essa propriedade em arquivos binários recém-criados não faz sentido, já que é muito fácil esquecer uma coisa dessas.

Foi útil?

Solução

Edite o arquivo de configuração svn e adicione uma entrada para suportes de automóveis ou uso svn:auto-props propriedades versionadas com SVN 1,8 e clientes mais recentes. Leia SVNBook !

EDIT:

De SVN 1,8 o que você pode aplicar a propriedade svn:auto-props para o caminho da raiz de seu repositório. Veja este href="http://subversion.apache.org/docs/release-notes/1.8.html#repos-dictated-config" rel="nofollow noreferrer"> nota e atualizado SVNBook 1,8 capítulo .

Outras dicas

Subversion 1.8 introduziu o Repository ditou Configuração recurso que requer SVN cliente 1.8 , mas 1,8 servidor não é necessário porque esta é uma característica do lado do cliente.

Com o Subversion 1.8, você pode configurar auto-props padrões dentro de um repositório usando o novo Subversion svn:auto-props herdou propriedade .

Por exemplo, set valor svn:auto-props à propriedade *.exe = svn:needs-lock=* na raiz do seu repositório (ou caminho do repositório que representa uma raiz de um projeto). Isto irá resultar em cada recém-adicionado * .exe ter propriedade svn:needs-lock=* aplicada.

Você pode armazenar valores de multi-linha em propriedades do Subversion, então você pode adicionar o seguinte svn padrão: needs-lock e padrão MIME para 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=*

Note-se que o método de auto adereços tem de ser configurado em cada cliente SVN sendo usado. Então, quando você estiver configurando um novo desenvolvedor, ou um desenvolvedor existente em uma máquina nova, você tem que lembrar de executar esta configuração.

Se você estão todos usando TortoiseSVN , você pode definir o tsvn: autoprops propriedade sobre a pasta base de cada check-out e será homenageado por todos os clientes TortoiseSVN.

Se você quiser realmente pregá-lo, você precisa colocar um pré-compromisso gancho em cada repositório. A executor roteiro pode ser facilmente trabalhada para isso.

Se você tiver qualquer python-fu, RepoGuard (o sucessor de SVNChecker ) parece que poderia ser útil também.

Não importa o que você escolhe, não há nenhuma maneira de aplicar retroativamente a propriedade de arquivos existentes no repositório, eu acho. Provavelmente, você pode aplicá-la no próximo commit do arquivo, no entanto.

Há uma página nesta wiki Subversion que descreve todas as diferentes opções sobre como adicionar automaticamente needs-lock e como garantir que foi definido. A página também dá exemplos de scripts e detalhes de configuração:

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

Use um gancho pre-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

e um gancho pre-lock

#!/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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top