diff options
Diffstat (limited to 'source')
-rw-r--r-- | source | 69 |
1 files changed, 69 insertions, 0 deletions
@@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# +# source - functions acting on the source host. +# +# Copyright 2015 - 2019 Einhard Leichtfuß +# +# This file is part of rsync-backup. +# +# rsync-backup is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# rsync-backup is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with rsync-backup. If not, see <https://www.gnu.org/licenses/>. +# + + +# Set up a new local mirror file tree on the source. +# +# requires: assert_is_dir, create_dir, replace_symlink, +# $src_path, $src_mirror_reldir, +# $RSYNC, ${rsync_args[@]}, ${filter_args[@]}, +# $DATEFMT, +# +function src_prepare +{ + local mirrors_dir="${src_path}/${src_mirror_reldir}" + local old_mirror="${mirrors_dir}/old" + local new_mirror="${mirrors_dir}/new" + local tmp_mirror="${mirrors_dir}/tmp" + local bakdate + + assert_is_dir "$src_path" || return $? + + message 'Create mirror of the source tree...' + + if [[ ! -d "$mirrors_dir" ]] + then + create_dir "$mirrors_dir" || return $? + create_dir "$tmp_mirror" || return $? + ln -s 'none' "$old_mirror" || return $RET_ERROR + else + replace_symlink "$new_mirror" "$old_mirror" || return $? + create_dir "$tmp_mirror" || return $? + fi + + "$RSYNC" \ + --exclude="/${src_mirror_reldir}/***" \ + "${rsync_args[@]}" \ + "${filter_args[@]}" \ + --link-dest="$src_path" \ + "${src_path}/" "$tmp_mirror" || return $RET_ERROR + + bakdate=`date +"$DATEFMT"` + mv "$tmp_mirror" "${mirrors_dir}/${bakdate}" || return $RET_ERROR + ln -s "$bakdate" "$new_mirror" || return $RET_ERROR + + message 'Finished creating mirror of the source tree.' + + return $RET_SUCCESS +} + +# vi: ft=bash ts=2 sw=2 noet |