Piège à écrire SVN, qui met à jour une copie du code fixe

J'ai un référentiel SVN Avec un grand nombre de sous-projets stockés. En ce moment dans mon

post-commit

Je viens de regarder à travers tous les dossiers possibles sur la voiture et courez

svn update

Sur chaque:

REPOS="$1"
REV="$2"
DIRS=("/path/to/local/copy/firstproject" "/path/to/local/copy/anotherproject" ... "/path/to/local/copy/spam")
LOGNAME=`/usr/bin/whoami`

for DIR in ${DIRS[@]}
do
cd $DIR
sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done

Le problème est que cela est lent et inutile lorsque je fixe simplement le sous-dossier de l'un des projets. Je me demande s'il y a le meilleur moyen de déterminer lequel de DIRS Je devrais utiliser et

seul

Mettez-le à jour.

Comment faire? Pour autant que je sache, il est impossible de déterminer quelle partie du représentant a été corrigée et, par conséquent, quel répertoire doit être mis à jour.

Simple alternative - Créer un référentiel séparé pour chaque projet? (Probablement, cela devrait être fait dès le début, si oui ...)
Invité:

Emilie

Confirmation de:

Je me demande s'il y a le meilleur moyen de déterminer lequel de DIRS Je devrais utiliser et le mettre à jour seulement.

http://svnbook.red-bean.com/en ... .html
Qu'est-ce que tu cherches:

# svnlook dirs-changed -r 40270 /path/to/the/repo
project1/foo/bar

Essayez quelque chose comme ça:

#!/usr/local/bash4/bin/bash

typeset -A IP
typeset -A DOCROOT

PROJECTS="project1 project2"

IP=([project1]="ip1" [project2]="ip2")
DOCROOT=([project1]="/var/www/html/project1/" [project2]="/var/www/html/project2/")

REPO="$1"
REV="$2"

USER='deployer'

PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`

ssh -t "$USER@${IP[$PROJECT]}" "cd ${DOCROOT[$PROJECT]} && svn up"

Babette

Confirmation de:

Voici un script que j'ai finalement utilisé en fonction de l'aide Quanta:

REPO="$1"
REV="$2"
declare -A PROJECTS
PROJECTS=(\
[project1]="/path/to/projects/project1 /path/to/projects/project1-devel" \
[project2]="/path/to/projects/project2 /path/to/projects/project2-devel" \
[project3]="/path/to/projects/project3 /path/to/projects/project3-devel" \
)

PROJECT=`svnlook dirs-changed -r "$REV" "$REPO" | awk -F "/" '{ print $1 }'`
DIRS=${PROJECTS[$PROJECT]}

for DIR in $DIRS
do
cd $DIR
sudo /usr/bin/svn update --accept=postpone 2>&1 | logger
logger "$LOGNAME Updated $DIR to revision $REV (from $REPOS) "
done

Veuillez noter que j'ai dû ajouter une chose importante:

declare -A PROJECTS

ligne. Pour une raison quelconque, un tableau associatif / Le hash n'a pas fonctionné avant que je fasse cela.

Pour répondre aux questions, connectez-vous ou registre