0 votes

Svn Post Commit Crochet pour copier les fichiers commit vers une copie de travail pour un autre dépôt ?

L'objectif est de maintenir deux dépôts distincts qui ne sont pas strictement en miroir. Les deux dépôts sont sujets à des mises à jour par des développeurs différents, donc svnsynch n'est pas envisageable.

Accrocher le script pourrait ne pas être la bonne solution non plus car je préférerais de loin exécuter le script à volonté plutôt qu'à chaque commit. Peut-être un script pour comparer les timestamps et copier le plus jeune ? S'il vous plaît, ne nous recommandez pas de passer à git.

1voto

David Z Points 49476

Je suis en train de faire un lien vers un crochet script J'ai l'habitude d'extraire une partie d'un dépôt à chaque fois qu'il est committé. Vous pourriez probablement le modifier pour l'adapter à vos besoins ; j'imagine que vous voudriez changer le paramètre svn checkout a svn export .

Pour la postérité, je vais copier ici le texte du script :

#!/bin/bash

# POST-COMMIT HOOK
#
# This is an SVN post-commit hook to automatically update a directory with the contents
# of some part of the SVN repository every time that part of the repository is changed.

fail() {
    echo "$@" 1>&2
    exit 1
}

# USER and PASS are the username and password of an SVN user with read access to the 
# relevant part of the repository
USER=""
PASS=""
# The root of the SVN repository
SVNROOT=""
# The path within the SVN repository to export whenever it's committed
SVNPATH=""
# The directory to hold the checked-out copy
WORKING=""

# Since environment variables are unset
export PATH="/bin:/usr/bin:/usr/local/bin"

getopt=$(which getopt)

TEMP=`$getopt -o u:p:U:P:d: --long user:,pass:,password:,svn-root:,svn-path:,working-dir: -n $0 -- "$@"`

if [ $? != 0 ]; then
    fail "Terminating...getopt failed"
fi

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

while true; do
    case "$1" in
        -u|--user)
            USER=$2
            shift 2;;
        -p|--pass|--password)
            PASS=$2
            shift 2;;
        -U|--svn-root)
            SVNROOT=$2
            shift 2;;
        -P|--svn-path)
            SVNPATH=$2
            shift 2;;
        -d|--working-dir)
            WORKING=$2
            shift 2;;
        --)
            shift
            break ;;
        *)
            fail "Option error!";;
    esac
done

test -n $SVNROOT || fail "Missing option --svn-root"
test -n $SVNPATH || fail "Missing option --svn-path"
test -n $WORKING || fail "Missing option --working-dir"

REPOS="$1"
REV="$2"

# The path to SVN executables
svnbin=$(which svn)
svnlook=$(which svnlook)
# The path to grep
grep=$(which egrep)

if test -n "$USER"; then
    AUTHSTR="--username $USER --password $PASS"
else
    AUTHSTR=""
fi
svnexport="$svnbin export --revision $REV $AUTHSTR"
svnupdate="$svnbin update --revision $REV $AUTHSTR"
svncheckout="$svnbin checkout --revision $REV $AUTHSTR"
svnchanged="$svnlook changed $REPOS --revision $REV"
grepq="$grep -q"

# If anything in the desired path has been changed
if $svnchanged | $grepq "^[A-Z]+[[:space:]]+$SVNPATH"; then
    # Check it out to the web root
    if test -d $WORKING/.svn; then
        $svnupdate $WORKING || fail "svnupdate failed"
    else
        $svncheckout file://$SVNROOT/$SVNPATH $WORKING || fail "svncheckout failed"
    fi
fi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X