Added the "Emacs comment line" on top of every shell file.
[matthijs/upstream/backupninja.git] / handlers / svn
index d0e3648075dda23455177e42d3a54fe5e3368550..26afafde504e4da30cf97b92d2a2c5cc7e405fcb 100644 (file)
@@ -1,3 +1,4 @@
+# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
 #
 # this handler will backup subversion repostitories.
 #
@@ -5,43 +6,75 @@
 getconf src /var/lib/svn
 getconf dest /var/backups/svn
 getconf tmp /var/backups/svn.tmp
-getconf HOTBACKUP /usr/lib/subversion/hot-backup.py
+getconf HOTBACKUP "/usr/bin/svnadmin hotcopy"
+getconf vsname 
 
 error=0
-cd $src
+
+# If vservers are configured, decide if the handler should
+# use them or if it should just operate on the host
+if [ "$vservers" = "yes" ]
+then
+       if [ ! -z $vsname ]
+       then            
+               info "Using vserver '$vsname'"
+               usevserver=1
+       else
+               info "No vserver name specified, actions will be performed on the host"
+       fi
+fi
+
+# If needed, make sure that the specified vserver exists and is running.
+if [ $usevserver ]
+then
+       info "examining vserver '$vsname'"
+        # does it exist ?
+       vroot="$VROOTDIR/$vsname"
+       [ -d $vroot ] || fatal "vserver '$vsname' does not exist at '$vroot'"
+        # is it running ?
+       running=`$VSERVERINFO $vsname RUNNING`
+       [ "$running" = "1" ] || fatal "vserver $vsname is not running."
+fi
+
+cd $vroot$src
 for repo in `find . -name svnserve.conf`
 do
     repo=`dirname $repo`
     repo=`dirname $repo`
 
-    ret=`mkdir -p $tmp/$repo 2>&1`
+    ret=`mkdir -p $vroot$tmp/$repo 2>&1`
     code=$?
     if [ "$ret" ]; then
        debug "$ret"
     fi
     if [ $code != 0 ]; then   
-       error "command failed mkdir -p $tmp/$repo"
+       error "command failed mkdir -p $vroot$tmp/$repo"
     fi
 
-    ret=`$HOTBACKUP $src/$repo $tmp/$repo 2>&1`
+    if [ $usevserver ]
+    then
+       ret=`$VSERVER $vsname exec $HOTBACKUP $src/$repo $tmp/$repo 2>&1`
+    else
+       ret=`$HOTBACKUP $src/$repo $tmp/$repo 2>&1`
+    fi
     code=$?
     if [ "$ret" ]; then
        debug "$ret"
     fi
     if [ $code != 0 ]; then
-       error "command failed -- $HOTBACKUP $src/$repo $tmp/$repo"
+       error "command failed -- $HOTBACKUP $vroot$src/$repo $vroot$tmp/$repo"
        error=1
     fi
 done
 
 if [ $error -eq 1 ]; then
-    echo "Error: because of earlier errors, we are leaving svn backups in $tmp instead of $dest"
+    echo "Error: because of earlier errors, we are leaving svn backups in $vroot$tmp instead of $vroot$dest"
 else
-    if [ -d $dest -a -d $tmp ]; then
-        rm -rf $dest
+    if [ -d $vroot$dest -a -d $vroot$tmp ]; then
+        rm -rf $vroot$dest
     fi
-    if [ -d $tmp ]; then
-        mv $tmp $dest
+    if [ -d $vroot$tmp ]; then
+        mv $vroot$tmp $vroot$dest
     fi
 fi