Aggiungi automaticamente svn: esigenze-lock
-
22-08-2019 - |
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.
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