initial commit
This commit is contained in:
commit
33cb51928e
|
@ -0,0 +1,82 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# update a git repository and copy its contents to a directory
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
if [[ "${TRACE-0}" == "1" ]]; then
|
||||||
|
set -o xtrace
|
||||||
|
fi
|
||||||
|
|
||||||
|
help() {
|
||||||
|
echo "Update a git repository and copy the files to OUTDIR"
|
||||||
|
echo "Intended for use with static websites"
|
||||||
|
echo
|
||||||
|
echo "Usage: ./site-update.sh [-b BRANCH|d SRCDIR|f FILE|h|p] OUTDIR"
|
||||||
|
echo "Options"
|
||||||
|
echo "b BRANCH git branch to update, defaults to the current branch in SRCDIR"
|
||||||
|
echo "d SRCDIR directory containing git repository to update, defaults to current working directory"
|
||||||
|
echo "f FILE update a batch of repositories, as defined in FILE"
|
||||||
|
echo "h print this help message"
|
||||||
|
echo "p publish files only, do not update"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_changes() {
|
||||||
|
git fetch origin
|
||||||
|
if [[ $(git status | grep behind) ]]; then
|
||||||
|
git merge origin/"${BRANCH}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
publish () {
|
||||||
|
cp -r "${SRCDIR/*}" "${OUTDIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
echo "$@"
|
||||||
|
OUTDIR="$1"
|
||||||
|
if [[ ! -d "$OUTDIR" ]]; then
|
||||||
|
echo "Invalid directory $OUTDIR"
|
||||||
|
fi
|
||||||
|
if [[ -n "$SRCDIR" ]]; then
|
||||||
|
cd "${SRCDIR}"
|
||||||
|
fi
|
||||||
|
if [[ -n "$BRANCH" ]]; then
|
||||||
|
git checkout "${BRANCH}"
|
||||||
|
else
|
||||||
|
BRANCH=$(git branch --show-current)
|
||||||
|
fi
|
||||||
|
if [[ "$PUBONLY" == false ]]; then
|
||||||
|
get_changes
|
||||||
|
fi
|
||||||
|
diff "${SRCDIR} ${OUTDIR}"
|
||||||
|
local rc=$?
|
||||||
|
if [[ $rc -eq 1 ]]; then
|
||||||
|
publish
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
SRCDIR=
|
||||||
|
BRANCH=
|
||||||
|
FILE=
|
||||||
|
PUBONLY=false
|
||||||
|
|
||||||
|
while getopts ":hd:f:b:p" option; do
|
||||||
|
case $option in
|
||||||
|
b) # select branch
|
||||||
|
BRANCH=$OPTARG;;
|
||||||
|
f) # file listing directories
|
||||||
|
FILE=$OPTARG;;
|
||||||
|
d) # directory to act on
|
||||||
|
SRCDIR=$OPTARG;;
|
||||||
|
h) #display help
|
||||||
|
help
|
||||||
|
exit;;
|
||||||
|
p) #publish only, do not update
|
||||||
|
PUBONLY=true;;
|
||||||
|
\?) #invalid option
|
||||||
|
echo "Error: Invalid option"
|
||||||
|
exit;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
main "${@:$OPTIND}"
|
Loading…
Reference in New Issue