Added rysnc importer/exporter script with backup

This commit is contained in:
Jono Targett 2024-07-03 20:25:29 +09:30
parent e0f63d9e61
commit 76e2e75a9c
3 changed files with 73 additions and 0 deletions

22
export Executable file
View File

@ -0,0 +1,22 @@
#! /bin/bash
set -eu
repo_root=$(git rev-parse --show-toplevel)
# Test for newer changes in the dotfiles. Protection against clobbering changes you might want to preserve.
dry_run=$(rsync -avu --itemize-changes --dry-run --files-from=./tracked-files --exclude-from=./.gitignore . ~)
if echo "${dry_run}" | grep -q '^<'; then
echo "Some installed files have newer mtimes than the repository versions. Please import the changes first."
exit 1
elif echo "${dry_run}" | grep -q '^>'; then
echo "Some installed files differ from the repository versions. Creating a backup..."
backup_dir=$(mktemp -d -t backupXXXXXXXX)
${repo_root}/import ${backup_dir} y > /dev/null
mkdir -p ${repo_root}/.backup/
tar -czf ${repo_root}/.backup/$(basename $backup_dir).tgz $backup_dir
fi
# Actually perform the copy
rsync -avu --itemize-changes --files-from=./tracked-files --exclude-from=./.gitignore . ~

49
import Executable file
View File

@ -0,0 +1,49 @@
#! /bin/bash
set -eu
function check_clean() {
if ! git diff-index --quiet HEAD -- ; then
echo "Git repository is dirty, aborting."
git status --short --untracked-files=no
exit 1
fi
}
function dry_run() {
rsync -HPrlm \
--itemize-changes \
--dry-run \
--files-from=./tracked-files \
--exclude-from=./.gitignore \
"${source}" "${destination}"
}
source=${HOME}
repo_root=$(git rev-parse --show-toplevel)
destination="${1:-$repo_root}"
echo "Importing working dotfiles to $destination"
dry_run
if [ -z "${1+x}" ]; then
echo "Performing git repository check..."
check_clean
fi
if [ -z "${2+x}" ]; then
read -r -p "Are you sure? [y/N] " response
response=${response,,}
else
response=$2
fi
if [[ "$response" =~ ^(yes|y)$ ]]; then
rsync -HPrlm \
--itemize-changes \
--files-from=./tracked-files \
--exclude-from=./.gitignore \
"${source}" "${destination}"
fi

2
tracked-files Normal file
View File

@ -0,0 +1,2 @@
.vim/
.vimrc