#!/bin/bash

set -xe

GIT_USER=""
GIT_HOSTNAME=""
GIT_SSH_PORT="22"

PREFIX="$(echo $(basename "${0}") | cut -d"-" -f1)"
. ~/.buildscripts/"${PREFIX}.conf"

for pkg in "${@}"; do
  subdir="$(dirname ${pkg})/"
  pkg="$(basename ${pkg})"

  ssh -l"${GIT_USER}" "${GIT_HOSTNAME}" "cd ~/git && _misc_/setup-repository ${subdir}${pkg} '${pkg} upstream project'"
  ssh -l"${GIT_USER}" "${GIT_HOSTNAME}" "cd ~/git && _misc_/update-repository-posixacls ${subdir}${pkg}"

  POP="0"
  if [ -d "${pkg}" ]; then
    pushd "${pkg}"
    POP="1"
  else
    # Use some heuristics to find out if we're already in the directory.
    # The current working dir must begin with the string given as parameter.
    # Suffixes like .git, -git or the like can be used without making this check fail.
    CUR_DIR="$(basename "$(pwd)")"
    CUR_DIR="${CUR_DIR:0:${#pkg}}"
    if [ "${CUR_DIR}" != "${pkg}" ]; then
      echo "Package '${pkg}' does not exist!" >&2
      exit 1
    fi
  fi

  echo "${pkg}: MASTER BRANCH" && git push "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}" master
  git branch | grep upstream &>/dev/null && echo "${pkg}: RELEASE BRANCH" && git push "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}" upstream
  git branch | grep pristine-tar &>/dev/null && echo "${pkg}: PRISTINE-TAR" && git push "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}" pristine-tar
  echo "${pkg}: PUSHING TAGS" && git push --tags "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}"
  git remote | grep origin >/dev/null || git remote add origin "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}"
  git remote add "${PREFIX}-public" "ssh://${GIT_USER}@${GIT_HOSTNAME}:${GIT_SSH_PORT}/~/git/${subdir}${pkg}"

  [ "${POP}" = "1" ] && popd
done
