You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.6 KiB
104 lines
2.6 KiB
#!/usr/bin/env bash
|
|
|
|
# Tools for the scripts
|
|
|
|
# Make a backup of the existing file if it exists
|
|
# Then link to our supplied dotfile
|
|
link() {
|
|
# Only make a backup if an existing file is there and is not a link
|
|
if [ -f "$1/$2" ] && [ ! -L "$1/$2" ]; then
|
|
cp "$1/$2" "$1/$2.old"
|
|
echo "Backed up original $2 to $1/$2.old"
|
|
fi
|
|
ln -sf "$3" "$1/$2"
|
|
}
|
|
|
|
copy() {
|
|
# Only make a backup if an existing directory is there and is not a link
|
|
# Allow passing true as third param to do backups
|
|
backup=true
|
|
if [ ! -z "$4" ]; then
|
|
backup=$4
|
|
fi
|
|
overwrite=false
|
|
if [ ! -z "$5" ]; then
|
|
overwrite=$5
|
|
fi
|
|
if [ -f "$1/$2" ] || [ -L "$1/$2" ]; then
|
|
if $backup; then
|
|
mv "$1/$2" "$1/$2.old"
|
|
echo "Backed up original $2 to $1/$2.old"
|
|
else
|
|
if $overwrite; then
|
|
rm -r "$1/$2"
|
|
echo "removed original $2"
|
|
fi
|
|
fi
|
|
fi
|
|
# Should probably only do this is the source is newer
|
|
# Remove the old and copy the new
|
|
if $overwrite; then
|
|
cp -r "$3" "$1/$2"
|
|
fi
|
|
}
|
|
|
|
link_dir() {
|
|
# Only make a backup if an existing directory is there and is not a link
|
|
if [ -d "$1/$2" ] && [ ! -L "$1/$2" ]; then
|
|
mv "$1/$2" "$1/$2.old"
|
|
echo "Backed up original $2 to $1/$2.old"
|
|
fi
|
|
|
|
# Don't overwrite links
|
|
if [ ! -L "$1/$2" ]; then
|
|
echo "ln -sf $3 $1/$2"
|
|
ln -sf "$3" "$1/$2"
|
|
fi
|
|
}
|
|
|
|
copy_dir() {
|
|
# Only make a backup if an existing directory is there and is not a link
|
|
if [ -d "$1/$2" ] || [ -L "$1/$2" ]; then
|
|
# Allow passing true as third param to do backups
|
|
backup=true
|
|
if [ ! -z "$3" ]; then
|
|
backup=$4
|
|
fi
|
|
if $backup; then
|
|
mv "$1/$2" "$1/$2.old"
|
|
echo "Backed up original $2 to $1/$2.old"
|
|
else
|
|
rm -r "$1/$2"
|
|
echo "removed original $2"
|
|
fi
|
|
fi
|
|
# Should probably only do this is the source is newer
|
|
# Remove the old and copy the new
|
|
cp -r "$3" "$1/$2"
|
|
}
|
|
|
|
# Escape the path so we can use it in sed
|
|
escape_path() {
|
|
local safe="$(echo $1 | sed 's/\//\\\//g')"
|
|
echo $safe
|
|
}
|
|
|
|
# Clone a git repository into a location
|
|
# Or update an existing repository
|
|
clone_or_update_git_repo() {
|
|
local target=$1
|
|
local repo=$2
|
|
if [ ! -d "$target" ]; then
|
|
mkdir -p "$target"
|
|
echo "Cloning [$repo] into [$target]"
|
|
git clone "$repo" "$target"
|
|
else
|
|
# Update the repo otherwise
|
|
echo "Updating [$repo]"
|
|
cur_dir=$PWD
|
|
cd "$target"
|
|
git checkout .
|
|
git pull
|
|
cd $cur_dir
|
|
fi
|
|
}
|