packages feed

alms-0.6.8: util

#!/bin/sh
# vim: sw=2

name=alms
host=login.eecs.northwestern.edu
remote=public_html/pubs/$name
extensions=src/extensions.txt

version="`awk '$0 ~ /^VERSION *= / { print $3 }' Makefile`"

assert_has_argument () {
  local argument expected
  argument="$1"; shift
  expected="$1"; shift
  if [ -z "$argument" ]; then
    echo "$0 $cmd: $expected expected\nUsage: $0 $cmd $@" >&2
    exit 1
  fi
}

if [ -z "$1" ]; then
  set showVersion
fi

while [ -n "$1" ]; do
  cmd="$1"; shift
  case "$cmd" in
    release)
      assert_has_argument "$1" 'version number' VERSION
      ver="$1"; shift
      set version "$ver" clean dist send link "$@"
      ;;
    hackage-check)
      cabal upload -c $name-$version.tar.gz
      ;;
    hackage-upload)
      cabal upload $name-$version.tar.gz
      ;;
    hackage)
      set dist hackage-upload "$@"
      ;;
    clean)
      rm $name*.tar.gz
      ;;
    dist)
      make dist
      ;;
    send)
      scp -p $name-$version.tar.gz $host:$remote/
      ;;
    link)
      ssh $host "cd $remote;
                 DISPLAY='' ex -c '/$name-[0-9.]*[.]tar[.]gz/s/-[0-9.]*[.]tar/-$version.tar/|:wq' index.html;
                 rm $name.tar.gz;
                 ln -s '$name-$version.tar.gz' $name.tar.gz"
      ;;
    edit)
      ssh $host -t vim $remote/index.html
      ;;
    extensions)
      perl -pe 's/\n/ /; s/\b\w+\b/-X$&/' $extensions
      ;;
    ghci)
      ghci -isrc `$0 extensions` "$@"
      set --
      ;;
    mv)
      assert_has_argument "$1" 'source path' SRC DST
      assert_has_argument "$2" 'destination path' SRC DST
      src="$1"; shift
      dst="$1"; shift
      git mv "$src" "$dst" &&
      mv "$dst" "$src" &&
      svn mv "$src" "$dst"
      ;;
    ci)
      git log svn-head..HEAD | svn ci -F -
      git tag -f svn-head
      ;;
    ci-m)
      assert_has_argument "$1" 'commit message' MESSAGE
      msg="$1"; shift
      git ca -m "$msg"
      set ci "$@"
      ;;
    add)
      assert_has_argument "$1" 'something to add' PATH...
      git add "$@"
      svn add "$@"
      set --
      ;;
    version)
      assert_has_argument "$1" 'version number' VERSION
      version="$1"; shift
      git stash
      ex -c "/^VERSION *=/s/=.*/= $version/|:wq" Makefile
      make $name.cabal
      git add Makefile $name.cabal
      git commit -m "version bump: $version"
      git tag "$version"
      git stash apply
      set showVersion "$@"
      ;;
    showVersion)
      echo $version
      ;;
    *)
      echo "What does '$cmd' mean?" >&2
      exit 1
      ;;
  esac
done