#!/bin/bash

export REPOSITORY_NAME="${REPOSITORY_NAME:-$(basename $(pwd))}"
export LC_ALL=en_US.UTF-8
export SKIP_PULL="${SKIP_PULL:-0}"
export SKIP_PUSH="${SKIP_PUSH:-0}"
export SKIP_COMMIT="${SKIP_COMMIT:-0}"
export SKIP_INJECT="${SKIP_INJECT:-0}"
export SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}"

# Add additional option for eit inject command.
export EIT_INJECT_OPTS="${EIT_INJECT_OPTS:---quick}"
export REPO_RESET="${REPO_RESET:-0}"
# Enable additional options for eit remove command. Additional option possible --nodeps
export EIT_REMOVE_OPTS="${EIT_REMOVE_OPTS:---quick}"

# Add skip env print if there are env vars with credentials.
export SKIP_PRINTENV="${SKIP_PRINTENV:-0}"
export REPO_CLEAN_EXPIRE="${REPO_CLEAN_EXPIRE:-0}"
export REPO_CLEAN_EXPIRE_DAYS="${REPO_CLEAN_EXPIRE_DAYS:-1}"
# Clean obsolete packages .tgz under binhost directory
export REPO_BINHOST_CLEAN="${REPO_BINHOST_CLEAN:-0}"
export SAB_BUILDFILE=${SAB_BUILDFILE:-build.yaml}

export REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-Autogenerated repository}"
export ENTROPY_DIR="${ENTROPY_DIR:-/${SAB_WORKSPACE}/artifacts/${REPOSITORY_NAME}}"
export PACKAGES_DIR="${PACKAGES_DIR:-/${SAB_WORKSPACE}/artifacts/${REPOSITORY_NAME}-binhost}"

export ENTROPY_RSS_BASEURL="${ENTROPY_RSS_BASEURL:-http://packages.sabayon.org/?quicksearch=}"
export ENTROPY_RSS_WEBURL="${ENTROPY_RSS_WEBURL:-http://www.sabayon.org/}"
# When PKGS_CACHE_DIR is defined then use directly packages
# directory without the use of a temporary directory.
export PKGS_CACHE_DIR="${PKGS_CACHE_DIR:-}"

set -e

. /sbin/sark-functions.sh

if [ ! -e ${SAB_BUILDFILE} ]; then
    echo "Must be run from a repository directory containing a ${SAB_BUILDFILE}"
    exit 1
fi

load_env_from_yaml ${SAB_BUILDFILE}

cat >/etc/entropy/server.conf <<EOF
# expiration-days = <internal value>
community-mode = enable
weak-package-files = disable
database-format = bz2
# sync-speed-limit =
# server-basic-languages = en_US C
# disabled-eapis = 1,2
# expiration-based-scope = disable
# nonfree-packages-directory-support = disable
rss-feed = enable
changelog = enable
rss-name = packages.rss
rss-base-url = ${ENTROPY_RSS_BASEURL}
rss-website-url = ${ENTROPY_RSS_WEBURL}
max-rss-entries = 10000
# max-rss-light-entries = 100
rss-light-name = updates.rss
managing-editor =
broken-reverse-deps = disable
default-repository = $REPOSITORY_NAME
repository=$REPOSITORY_NAME|$REPOSITORY_DESCRIPTION|file:///${ENTROPY_DIR}
EOF


mkdir -p ${ENTROPY_DIR} || true

if [[ ${SKIP_INJECT} = 0 ]] ; then
  if [ -z "${PKGS_CACHE_DIR}" ] ; then
    TEMPDIR=$(mktemp -d)
    cp -rf $(find $PACKAGES_DIR -name "*.tbz2" | xargs) $TEMPDIR
  else
    TEMPDIR="${PKGS_CACHE_DIR}"
  fi

  built_pkgs=$(find $TEMPDIR -name "*.tbz2" | xargs)
  [[ -z "${built_pkgs}" ]] && echo "ERROR: no tbz2s found" && exit 2
fi

if [ -d "${ENTROPY_DIR}/standard" ]; then

  if [[ $SKIP_PULL = 0 ]] ; then
    echo "=== Repository already exists, syncronizing ==="
    eit unlock $REPOSITORY_NAME || true
    eit pull --quick $REPOSITORY_NAME || true
  fi
#  #eit sync \$repo
else
  echo "=== Repository is empty, intializing ==="
  echo "Yes" | eit init --quick $REPOSITORY_NAME
  eit push --quick --force ${REPOSITORY_NAME}
fi

echo "=== Update config files ==="
echo -9 | equo conf update

if [[ ${REPO_RESET} = 1 ]] ; then
  # This is needed
  echo "=== Reset Repository Revision ==="
  eit reset --quick --local ${REPOSITORY_NAME}
  echo "=== Reset COMPLETED ==="
fi

[ -f "${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.pub" ] && [ -f "${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.key" ] && { ! eit key status ${REPOSITORY_NAME}; } && \
eit key import ${REPOSITORY_NAME} ${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.key ${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.pub && { eit key sign ${REPOSITORY_NAME} || true; } && { echo "=== Repository key imported successfully ==="; }

if  [ -n "${TOREMOVE_BEFORE}" ] ; then
  echo "=== Removing packages before inject ==="
  # NOTE: Require pull of the repository for retrieve list of packages.
  eit rm ${EIT_REMOVE_OPTS} --from $REPOSITORY_NAME $TOREMOVE_BEFORE || {
    echo "ouch unable to remove" && exit 3;
  }
  echo "=== Removing packages before inject COMPLETED ==="
fi

if [[ ${SKIP_INJECT} = 0 ]] ; then
  echo "=== Injecting packages ==="
  echo "INJECT = ${built_pkgs}"
  eit inject ${EIT_INJECT_OPTS} --to ${REPOSITORY_NAME} --quick ${built_pkgs} || { echo "ouch unable to inject" && exit 3; }
  echo "=== Inject COMPLETED ====="
fi

echo "=== Removing packages ==="

if [ -n "${TOREMOVE}" ]; then
  eit rm ${EIT_REMOVE_OPTS} --from $REPOSITORY_NAME $TOREMOVE || { echo "ouch unable to remove" && exit 3; }
fi

echo "=== Removing packages completed ==="

if [[ ${SKIP_COMMIT} = 0 ]] ; then
  echo "=== Commit packages ====="
  eit commit --quick
  echo "=== Commit COMPLETED ====="
fi
echo "=== Pushing built packages locally ==="
eit push --quick --force ${REPOSITORY_NAME}
[ -f "${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.pub" ] && [ -f "${SAB_WORKSPACE}/confs/${REPOSITORY_NAME}.key" ] && rm -rf /etc/entropy/gpg-keys

if [[ ${REPO_CLEAN_EXPIRE} = 1 ]] ; then
  echo "=== Clean expire packages ==="
  eit vacuum --quick --days ${REPO_CLEAN_EXPIRE_DAYS} ${REPOSITORY_NAME}
fi

if [[ ${REPO_BINHOST_CLEAN} = 1 ]] ; then
  purge_binhost_packages ${PACKAGES_DIR}
fi

VAGRANT_DIR=$SAB_WORKSPACE generate_repository_metadata

echo "=== ALL DONE. bye ==="


