snaprep

git mirror of https://ccx.te2000.cz/bzr/snaprep
git clone https://ccx.te2000.cz/git/snaprep
Log | Files | Refs

commit f19fb2a9e112392ea14e3e51f5cdf38fd32d331c
parent ae1e3fd6237aef61a6d234b4f89ae50dceedaf7e
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date:   Tue, 18 Feb 2014 10:54:08 +0100

pre/post scripts archive new under timestamp taken from .snapshot.NNNN
Diffstat:
Mpost | 28++++++++++++++++++++++------
Mpre | 23+++++++++++++----------
Mrsyncd.conf | 6+++---
Asnap.push.single | 5+++++
4 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/post b/post @@ -12,10 +12,26 @@ set -x [[ $RSYNC_MODULE_NAME != 'snaprep_new' ]] && exit 0 -marks=( $RSYNC_MODULE_PATH/.snapshot.[1-9]*(N) ) -if (($#marks)); then - mark=$marks[1] - dst=${RSYNC_MODULE_PATH:h}/${mark##*.snapshot.} - [[ -e $dst ]] && exit 1 - mv -v $RSYNC_MODULE_PATH $dst +f=( $RSYNC_MODULE_PATH/.snapshot.[0-9]*(N) ) +if (($#f == 0)); then + exit 0 +elif (($#f > 1)); then + rm -rf $f || exit $? +else + ts=${f##*.} + d=$RSYNC_MODULE_PATH:h + if [[ -a $d/.snapshot.$ts ]]; then + rm -rf $f || exit $? + else + rsync -a --exclude=/.snapshot.\* --link-dest=$RSYNC_MODULE_PATH/ $RSYNC_MODULE_PATH/ $d/$ts/ || exit $? + mv $f $d/ || exit $? + fi fi + +#marks=( $RSYNC_MODULE_PATH/.snapshot.[1-9]*(N) ) +#if (($#marks)); then +# mark=$marks[1] +# dst=${RSYNC_MODULE_PATH:h}/${mark##*.snapshot.} +# [[ -e $dst ]] && exit 1 +# mv -v $RSYNC_MODULE_PATH $dst +#fi diff --git a/pre b/pre @@ -1,16 +1,19 @@ #!/bin/zsh env | grep RSYNC 1>&2 set -x -mkdir -p /tmp/snaprep || exit $? +# mkdir -p /tmp/snaprep/new || exit $? [[ $RSYNC_MODULE_NAME != 'snaprep_new' ]] && exit 0 -if ! [[ -d $RSYNC_MODULE_PATH ]]; then - snapshots=( ${RSYNC_MODULE_PATH:h}/[1-9]*(N) ) - if (($#snapshots)); then - src=$snapshots[-1] - rsync -a --exclude=/.snapshot.\* --link-dest=$src $src/ $RSYNC_MODULE_PATH/ || exit $? - else - mkdir -p $RSYNC_MODULE_PATH/ || exit $? - fi -fi +f=( $RSYNC_MODULE_PATH/.snapshot.[0-9]*(N) ) +if (($#f)); then $0:h/post; fi + +#if ! [[ -d $RSYNC_MODULE_PATH ]]; then +# snapshots=( ${RSYNC_MODULE_PATH:h}/[1-9]*(N) ) +# if (($#snapshots)); then +# src=$snapshots[-1] +# rsync -a --exclude=/.snapshot.\* --link-dest=$src $src/ $RSYNC_MODULE_PATH/ || exit $? +# else +# mkdir -p $RSYNC_MODULE_PATH/ || exit $? +# fi +#fi diff --git a/rsyncd.conf b/rsyncd.conf @@ -10,9 +10,6 @@ read only = yes transfer logging = yes max verbosity = 2 -pre-xfer exec = /home/ccx/bzr/snaprep/pre -post-xfer exec = /home/ccx/bzr/snaprep/post - # Simple example for enabling your own local rsync server [gentoo-portage] path = /usr/portage @@ -26,4 +23,7 @@ post-xfer exec = /home/ccx/bzr/snaprep/post [snaprep_new] path = /tmp/snaprep/new read only = no + write only = yes refuse options = inplace + pre-xfer exec = /home/ccx/bzr/snaprep/pre + post-xfer exec = /home/ccx/bzr/snaprep/post diff --git a/snap.push.single b/snap.push.single @@ -0,0 +1,5 @@ +#!/bin/zsh +src=$1;shift +dst=$1;shift +rsync -a --delete "$@" --exclude=/.snapshot.\* $src/ $dst/ && \ +rsync -a --delete "$@" $src/ $dst/