馃挘 Machine learning which might blow up in your face 馃挘
at master 62 lines 2.0 kB view raw
1#!/bin/sh -eu 2 3: ${MAFIA_HOME:=$HOME/.mafia} 4: ${MAFIA_VERSIONS:=$MAFIA_HOME/versions} 5 6latest_version () { 7 git ls-remote https://github.com/haskell-mafia/mafia | grep refs/heads/master | cut -f 1 8} 9 10build_version() { 11 MAFIA_VERSION="$1" 12 MAFIA_TEMP=$(mktemp -d 2>/dev/null || mktemp -d -t 'exec_mafia') 13 MAFIA_FILE=mafia-$MAFIA_VERSION 14 MAFIA_PATH=$MAFIA_VERSIONS/$MAFIA_FILE 15 mkdir -p $MAFIA_VERSIONS 16 echo "Building $MAFIA_FILE in $MAFIA_TEMP" 17 git clone https://github.com/haskell-mafia/mafia $MAFIA_TEMP 18 git --git-dir="$MAFIA_TEMP/.git" --work-tree="$MAFIA_TEMP" reset --hard $MAFIA_VERSION || { 19 echo "mafia version ($MAFIA_VERSION) could not be found." >&2 20 exit 1 21 } 22 (cd "$MAFIA_TEMP" && ./bin/bootstrap) || { 23 got=$? 24 echo "mafia version ($MAFIA_VERSION) could not be built." >&2 25 exit "$got" 26 } 27 chmod +x "$MAFIA_TEMP/.cabal-sandbox/bin/mafia" 28 # Ensure executable is on same file-system so final mv is atomic. 29 mv -f "$MAFIA_TEMP/.cabal-sandbox/bin/mafia" "$MAFIA_PATH.$$" 30 mv "$MAFIA_PATH.$$" "$MAFIA_PATH" || { 31 rm -f "$MAFIA_PATH.$$" 32 echo "INFO: mafia version ($MAFIA_VERSION) already exists not overiding," >&2 33 echo "INFO: this is expected if parallel builds of the same version of" >&2 34 echo "INFO: mafia occur, we are playing by first in, wins." >&2 35 exit 0 36 } 37} 38 39enable_version() { 40 if [ $# -eq 0 ]; then 41 MAFIA_VERSION="$(latest_version)" 42 echo "INFO: No explicit mafia version requested installing latest ($MAFIA_VERSION)." >&2 43 else 44 MAFIA_VERSION="$1" 45 fi 46 [ -x "$MAFIA_HOME/versions/mafia-$MAFIA_VERSION" ] || build_version "$MAFIA_VERSION" 47 ln -sf "$MAFIA_HOME/versions/mafia-$MAFIA_VERSION" "$MAFIA_HOME/versions/mafia" 48} 49 50exec_mafia () { 51 [ -x "$MAFIA_HOME/versions/mafia" ] || enable_version 52 "$MAFIA_HOME/versions/mafia" "$@" 53} 54 55# 56# The actual start of the script..... 57# 58 59case "${1:-}" in 60upgrade) shift; enable_version "$@" ;; 61*) exec_mafia "$@" 62esac