Add a vim modeline with indentation settings.
[matthijs/upstream/backupninja.git] / handlers / svn.in
1 # -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
2 # vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
3 #
4 # this handler will backup subversion repostitories.
5 #
6
7 getconf src /var/lib/svn
8 getconf dest /var/backups/svn
9 getconf tmp /var/backups/svn.tmp
10 getconf HOTBACKUP "/usr/bin/svnadmin hotcopy"
11 getconf vsname
12
13 error=0
14
15 # Decide if the handler should operate on a vserver or on the host.
16 # In the former case, check that $vsname exists and is running.
17 local usevserver=no
18 local vroot
19 if [ $vservers_are_available = yes ]; then
20    if [ -n "$vsname" ]; then
21       # does it exist ?
22       if ! vservers_exist "$vsname" ; then
23          fatal "The vserver given in vsname ($vsname) does not exist."
24       fi
25       # is it running ?
26       vservers_running $vsname || fatal "The vserver $vsname is not running."
27       # everything ok
28       info "Using vserver '$vsname'."
29       usevserver=yes
30       vroot="$VROOTDIR/$vsname"
31    else
32       info "No vserver name specified, actions will be performed on the host."
33    fi
34 fi
35
36 cd $vroot$src
37 for repo in `find . -name svnserve.conf`
38 do
39    repo=`dirname $repo`
40    repo=`dirname $repo`
41
42    ret=`mkdir -p $vroot$tmp/$repo 2>&1`
43    code=$?
44    if [ "$ret" ]; then
45       debug "$ret"
46    fi
47    if [ $code != 0 ]; then
48       error "command failed mkdir -p $vroot$tmp/$repo"
49    fi
50
51    if [ $usevserver = yes ]
52    then
53       ret=`$VSERVER $vsname exec $HOTBACKUP $src/$repo $tmp/$repo 2>&1`
54    else
55       ret=`$HOTBACKUP $src/$repo $tmp/$repo 2>&1`
56    fi
57    code=$?
58    if [ "$ret" ]; then
59       debug "$ret"
60    fi
61    if [ $code != 0 ]; then
62       error "command failed -- $HOTBACKUP $vroot$src/$repo $vroot$tmp/$repo"
63       error=1
64    fi
65 done
66
67 if [ $error -eq 1 ]; then
68    echo "Error: because of earlier errors, we are leaving svn backups in $vroot$tmp instead of $vroot$dest"
69 else
70    if [ -d $vroot$dest -a -d $vroot$tmp ]; then
71       rm -rf $vroot$dest
72    fi
73    if [ -d $vroot$tmp ]; then
74       mv $vroot$tmp $vroot$dest
75    fi
76 fi
77
78 exit 0