diff options
Diffstat (limited to 'acid/cyche-source')
-rwxr-xr-x | acid/cyche-source | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/acid/cyche-source b/acid/cyche-source deleted file mode 100755 index 7dca756..0000000 --- a/acid/cyche-source +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# cyche-source <name> <url> <ref-pattern> -# -# Check a git source for new updates. A local cache repository is cloned if -# <name> doesn't exist. If updates are found, we attempt to checkout the newest -# version according to <ref-pattern> (see <pattern> from git-for-each-ref(1)). -# -# On a successful run, the new object hash is printed to stdout (or the previous -# hash, if no update occurred). This may be a commit hash. However, if -# <ref-pattern> matches an annotated tag, then the hash refers to the tag object. -# The caller should cache this hash value upon successful deployment. -# -# If a new version of the file tree is checked out, this file exits with code 1, -# otherwise a stale success exits with 0. On any error, no hash is printed, and -# we exit with 2. - -gethash() { - git for-each-ref \ - --count=1 \ - --format='%(objectname)' \ - --sort='-creatordate' \ - "$1" # pattern -} - -cd '/services' - -# For <name>, limit to a-z, 0-9, -, _ -if ! echo "$1" | grep -Eq '^[-_a-z0-9]*$'; then - echo "Bad service name: $1" >&2 - exit 2 -fi - -if ! [ -d "$1" ]; then - git clone "$2" "$1" >&2 || exit 2 - touch "$1/.git/previous_hash" - touch "$1/.git/previous_slug" -fi - -cd "$1" - -git remote set-url origin "$2" >&2 # pick up url changes -git fetch --all --prune >&2 || exit 2 - -prev=$(cat '.git/previous_hash') -next=$(gethash "$3") - -if [ -z "$next" ]; then - echo "No refs match $3" >&2 - exit 2 -fi - -echo "$next" - -if [ "$prev" != "$next" ]; then - # update file tree - git submodule deinit --all --force >/dev/null 2>&1 - git reset . >/dev/null 2>&1 - git checkout . >/dev/null 2>&1 - git clean -xffd >/dev/null 2>&1 - - git checkout "$next" >/dev/null 2>&1 - git submodule update --init --recursive >&2 - - echo -n "Checked out " >&2 - git log -1 --oneline --no-abbrev-commit --no-decorate >&2 - - exit 1 -fi - -exit 0 |