Repo Backup

This commit is contained in:
Out Of Ideas 2023-12-03 12:12:03 -06:00
parent f8e15baf1a
commit 2f0070fbe8

211
repo-backup Executable file
View file

@ -0,0 +1,211 @@
#!/bin/bash
############################################################
# Repo Backup #
# #
# Backups git repos by pulling the changes. The user #
# specifies the locations of the repos in the script. #
# #
# Change History #
# 03/11/2023 Out Of Ideas Original code. This is a #
# template for creating new #
# Bash shell script #
# Add new history entries as #
# needed. #
# #
# 03/12/2023 Out Of Ideas Use config-backup as #
# template. #
# #
# 03/11/2023 Out Of Odeas Initial version of the #
# program. Works as expected. #
# #
############################################################
############################################################
############################################################
# #
# This software is hereby released into the public domain. #
# #
# Anyone is free to copy, modify, publish, use, compile, #
# sell, or distribute this software, either in source code #
# form or as a compiled binary, for any purpose, with or #
# without modification. There are no restrictions or #
# requirements for the use of this software. #
# #
# This software is provided "as is," without any warranty, #
# express or implied, including but not limited to the #
# warranties of merchantability, fitness for a particular #
# purpose, or non-infringement. In no event shall the #
# authors be liable for any claim, damages, or other #
# liability, whether in an action of contract, tort, or #
# otherwise, arising from, out of, or in connection with #
# this software or the use or other dealings in this #
# software. #
# #
# To the fullest extent possible under law, the authors #
# have waived all copyright and patent rights to this #
# software. You are free to use this software without #
# any restrictions on copyright or patent rights. #
# #
# This Public Domain declaration, including the waiver of #
# copyright and patent rights, applies to the full extent #
# permitted by applicable laws and regulations. #
# #
############################################################
############################################################
############################################################
# Help #
############################################################
Help()
{
# Display Help
echo "Backups git repos by pulling the changes. The user specifies the locations of the repos in the script."
echo
echo "Syntax: repo-backup [-h|p|v|V]"
echo "options:"
echo "h Print this Help."
echo "p Print the Public Domain declaration."
echo "v Verbose mode."
echo "V Print version and exit."
echo
}
############################################################
# Public Domain Declaration #
############################################################
PUBLIC_DOMAIN_DECLARATION='
This software is hereby released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, with or without modification. There are no restrictions or requirements for the use of this software.
This software is provided "as is," without any warranty, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, or non-infringement. In no event shall the authors be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with this software or the use or other dealings in this software.
To the fullest extent possible under law, the authors have waived all copyright and patent rights to this software. You are free to use this software without any restrictions on copyright or patent rights.
This Public Domain declaration, including the waiver of
copyright and patent rights, applies to the full extent
permitted by applicable laws and regulations.
'
############################################################
# Version #
############################################################
VERSION="repo-backup v1"
############################################################
# Check for root #
############################################################
CheckRoot()
{
# If we are not running as root, we exit the program.
if [ `id -u` != 0 ]
then
echo "ERROR: You must be root user to run this program"
exit
fi
}
############################################################
# Check for user #
############################################################
CheckUser()
{
# If we are running as root, we exit the program.
if [ `id -u` == 0 ]
then
echo "ERROR: You must NOT be root user to run this program"
exit
fi
}
############################################################
# Check for dependencies #
############################################################
CheckGit()
{
# If 'git' command is not found, we exit the program
if ! command -v git &> /dev/null; then
echo "Error: 'git' command not found. Please install git."
exit 1
fi
}
############################################################
# Main Program #
############################################################
############################################################
# Sanity checks #
############################################################
# Are we running as root?
#CheckRoot
CheckUser
# Is 'git' comand found?
CheckGit
############################################################
# Initialize variables #
############################################################
REPO_BACKUP_DIR="$HOME/Git/Repo Backup"
# List directories seperated by a space
REPOS_TO_BACKUP=("$REPO_BACKUP_DIR"/*)
option=""
Msg=""
# Unset variables
unset VERBOSE
############################################################
# Process the input options. Add options as needed. #
############################################################
# Get the options
while getopts ":hpvV" option;
do
case $option in
h) # display Help
Help
exit;;
p) # display $PUBLIC_DOMAIN_DECLARATION
echo $PUBLIC_DOMAIN_DECLARATION
exit;;
v) # enable $VERBOSE
VERBOSE=true;;
V) # display $VERSION
echo $VERSION
exit;;
\?) # incorrect option
echo "Error: Invalid option"
exit;;
esac
done
# Display a message before the program starts
#echo "$Msg"
if [ $VERBOSE ]
then
echo "REPOS_TO_BACKUP = $REPOS_TO_BACKUP"
fi
# Get length of $REPOS_TO_BACKUP array
len=${#REPOS_TO_BACKUP[@]}
# Display output if $VERBOSE is enabled
# Enter the repo dirs, and sync them
for (( i=0; i<$len; i++ ))
do
if [ $VERBOSE ]
then
echo "cd \"${REPOS_TO_BACKUP[i]}\""
cd "${REPOS_TO_BACKUP[i]}"
echo "git pull"
git pull
else
cd "${REPOS_TO_BACKUP[i]}"
git pull
fi
done