blob: b8b936df9431748540b0e5dd96aa684ad7efe09e [file] [log] [blame]
#!/usr/bin/env bash
function usage ()
{
printf "\n\t%s\n" "This utlity is to push web files (but not drop artifacts) up host machine, after local testing and development."
printf "\t%s\n" "Care is needed since it can delete files on host, for the goal of making contents equal."
printf "\t%s\n" "Thus, at least one parameter is needed: -f or -s; for 'full' or 'synchronize'"
printf "\t%s\n" "-f (full) should be rarely needed; only when just getting started, or similar."
printf "\t\t%s\t%s\n" "-f" "Does a full copy from remote host to local client".
printf "\t\t%s\t%s\n" "-s" "Copies files from remote host to local client, but also deletes files on client, that are not on host."
printf "\t\t%s\t%s\n" "-r" "All operations are 'dry-runs' unless '-r' ('run') is specified."
printf "\t\t%s\t%s\n" "-v" "verbose output."
printf "\t\t%s\t%s\n" "-h" "Displays this 'usage' information."
}
doit="--dry-run"
verbose=""
delete=""
trailing=""
full=""
sync=""
while getopts 'fsrvh' OPTION
do
case $OPTION in
h) usage
exit 1
;;
f) delete=""
full="true"
;;
s) delete="--delete"
sync="true"
;;
v) verbose="--verbose"
;;
r) doit=""
;;
# ?) usage
# exit 2
# ;;
esac
done
# We do not currently use trailing arguments,
# but for safety/sanity checks, issue "error" if found.
shift $(($OPTIND - 1))
trailing="$@"
if [[ -n "${trailing}" ]]
then
printf "\n\tERROR: \t%s\n" "Unexpected trailing arguments were found, so exiting."
usage
exit 1
fi
# if BOTH f and s specified, it is an error.
# if NEITHER f nor s is specified, it is a "no op", but we can treat as a "--dry-run" of full copy?
if [[ "${full}" == "true" && "${sync}" == "true" ]]
then
printf "\n\tERROR: \t%s\n" "Both full and sync were specified."
usage
exit 1
fi
if [[ -z "${full}" && -z "${sync}" && -z "${doit}" ]]
then
printf "\n\tERROR: \t%s\n" "Neither full nor sync were specified, but 'run' was."
usage
exit 1
fi
# we exclude 'index.html' since that is a "derived" file, and is specific to what is in "drop directories".
# we excldue the drop directories since they can be massive, and do not need them to do web development.
# repeating --itemize-changes is intentional, and causes unchanged files to also be listed.
rsync ${doit} ${verbose} ${delete} --itemize-changes --itemize-changes -P -e ssh -a --exclude /index.html --exclude /drops4/ ./downloads/ build:~/downloads/eclipse/downloads/
if [[ -z $full && -z $sync ]]
then
printf "\n\tWARNING: \t%s\n" "Neither full nor sync were specified, so symply did full (dry-run) list of what would be copied."
usage
exit 0
fi