#! /usr/bin/env nix-shell
#! nix-shell -i bash -p git mercurial common-updater-scripts

cd "$(dirname "${BASH_SOURCE[0]}")"
root=../../../..

default() {
  (cd "$root" && nix-instantiate --eval --strict -A "sourcehut.python.pkgs.$1.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
}

version() {
  (cd "$root" && nix-instantiate --eval --strict -A "sourcehut.python.pkgs.$1.version" | tr -d '"')
}

src_url() {
  (cd "$root" && nix-instantiate --eval --strict -A "sourcehut.python.pkgs.$1.src.drvAttrs.url" | tr -d '"')
}

get_latest_version() {
  src="$(src_url "$1")"
  tmp=$(mktemp -d)

  if [ "$1" = "hgsrht" ]; then
    hg clone "$src" "$tmp" &> /dev/null
    printf "%s" "$(cd "$tmp" && hg log --limit 1 --template '{latesttag}')"
  else
    git clone "$src" "$tmp"
    printf "%s" "$(cd "$tmp" && git describe $(git rev-list --tags --max-count=1))"
  fi
}

update_version() {
  default_nix="$(default "$1")"
  version_old="$(version "$1")"
  version="$(get_latest_version "$1")"

  (cd "$root" && update-source-version "sourcehut.python.pkgs.$1" "$version")

  git add "$default_nix"
  git commit -m "$1: $version_old -> $version"
}

services=( "srht" "buildsrht" "dispatchsrht" "gitsrht" "hgsrht" "listssrht" "mansrht" "metasrht"
           "pastesrht" "todosrht" "scmsrht" )

# Whether or not a specific service is requested
if [ -n "$1" ]; then
  version="$(get_latest_version "$1")"
  (cd "$root" && update-source-version "sourcehut.python.pkgs.$1" "$version")
else
  for service in "${services[@]}"; do
    update_version "$service"
  done
fi
