#!/bin/bash

export PATH=/sbin:/usr/sbin:/bin:/usr/bin

dest="/mnt/github/devuan-git-repos/"

function rcurl {
  i=10
  while ! curl --fail --silent --show-error "$@" && [ "$i" != 0 ]
  do
    sleep 6
    i="$(expr "$i" - 1)"
  done
  return $?
}

function inlist {
  v="$(printf '%s\n' "$2" | while IFS= read -r entry
  do
    if [ "$(basename "$entry")" = "$1" ]
    then
      echo 1
      break
    fi
  done)"
  [ ! -z "$v" ]
  return $?
}

cd "$dest" || exit 1

export GIT_TERMINAL_PROMPT=0

for group in devuan devuan-packages devuan-doc devuan-editors devuan-infrastructure
do (

  mkdir -p "$group"
  cd "$group"
  api_url="https://git.devuan.org/api/v4/groups/$group/projects?visibility=public&simple=true&min_access_level=10"
  repos="$(rcurl "$api_url" | jq -r '.[].http_url_to_repo')"

  printf "%s\n" "$repos" | while IFS= read -r repo_url
  do (
    repo="$(basename "$repo_url")"
    echo "Updating $group/$repo from $repo_url"
    if [ ! -e "$repo" ]
      then git clone --mirror "$repo_url" "$repo"
    else
      cd "$repo"
      git remote update
    fi
  ) done

  for dir in *.git/
  do
    if ! inlist "$(basename "$dir")" "$repos"
    then
      echo "Removing $(basename "$dir")"
      rm -r "$dir"
    fi
  done

) done
