Domanda

Ciao Mi chiedevo se esiste un modo per il server SVN per assegnare automaticamente l'svn: esigenze-lock di proprietà su qualsiasi file che è binario e non testuale.

Abbiamo una piuttosto piccolo team sviluppatori, ma che poggia su tutti a ricordare di impostare questa proprietà su file binari appena creati non ha senso dal momento che è molto facile dimenticare una cosa del genere.

È stato utile?

Soluzione

Modificare il file svn config e aggiungere una voce per auto o puntelli uso svn:auto-props proprietà di versione con SVN 1,8 e clienti nuovi. Leggi SVNBook !

Modifica

Da SVN 1.8 la si può applicare la proprietà svn:auto-props al percorso principale del repository. Vedere questo nota di rilascio e aggiornato SVNBook 1.8 capitolo .

Altri suggerimenti

Apache Subversion 1.8 ha introdotto il Repository Dettato Configuration caratteristica che richiede SVN 1.8 client , ma 1.8 server non è necessario perché questa è una caratteristica sul lato client.

Con Subversion 1.8, è possibile configurare i modelli auto-props all'interno di un repository Subversion utilizzando il nuovo svn:auto-props proprietà ereditata .

Ad esempio, impostare il valore a svn:auto-props *.exe = svn:needs-lock=* proprietà sulla radice del repository (o percorso del repository che rappresenta una radice di un progetto). Questo si tradurrà in ogni appena aggiunto * .exe avendo proprietà svn:needs-lock=* applicato.

È possibile memorizzare i valori multilinea nelle proprietà di Subversion, in modo da poter aggiungere il seguente svn di serie: le esigenze-lock ed il modello MIME per 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=*

Si dovrebbe notare che il metodo di puntelli auto deve essere configurato su ogni client SVN in uso. Così, quando si sta impostando un nuovo sviluppatore, o uno sviluppatore esistente su una nuova macchina, si deve ricordare di eseguire questa configurazione.

Se si utilizza tutto TortoiseSVN , è possibile impostare il TSVN: autoprops proprietà sulla cartella di base di ogni cassa e sarà onorato da tutti i client TortoiseSVN.

Se si vuole veramente per inchiodarlo, avrete bisogno di mettere un pre-commit gancio in ogni repository. script enforcer potrebbe essere facilmente lavorata per questo.

Se avete python-fu, RepoGuard (il successore di SVNChecker ) sembra che potrebbe essere utile anche.

Non importa quale si sceglie, non c'è modo di applicare retroattivamente la proprietà ai file esistenti nel repository, credo. Probabilmente si può imporlo sul prossimo commit del file, tuttavia.

C'è una pagina su questo Subversion wiki che descrive tutte le diverse opzioni su come aggiungere automaticamente le esigenze-lock e come garantire che è stata impostata. La pagina fornisce anche esempi di script e dettagli di configurazione:

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

Utilizzare un-commit hook pre

#!/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 un gancio 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top