summaryrefslogtreecommitdiffstats
path: root/acid/cyche-source
diff options
context:
space:
mode:
Diffstat (limited to 'acid/cyche-source')
-rwxr-xr-xacid/cyche-source71
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