#!/bin/bash
#
# Summarize task by number
#
# Copyright (c) 2020,2025 Vitaly Chikunov <vt@altlinux.org>
#
# SPDX-License-Identifier: GPL-2.0-only

set -efu
export LC_ALL=C
PATH=$(dirname "$0"):$PATH

print_curl_events() {
  local url=$1 html=$2

  events=$(
    grep -io 'HREF="[^"]\+' "$html" \
      | grep -o 'events\..*\.log' \
      | sort -V \
      | sed "s!^!$url!" )
  if [ -n "$events" ]; then
    # shellcheck disable=SC2086
    curl -s $events | girar-summary
  fi
}

indexhtml=
atexit() {
  [ -z "$indexhtml" ] || rm -f -- "$indexhtml"
}
trap atexit EXIT

print_curl() {
  local url task=$1

  indexhtml=$(mktemp)
  for url in \
    "http://git.altlinux.org/tasks/$task/logs/" \
    "http://git.altlinux.org/tasks/archive/done/_$((task/1024))/$task/logs/"
  do
    curl -s "$url" -o "$indexhtml"
    if grep -qi '<TITLE>Index of' "$indexhtml"; then
      print_curl_events "$url" "$indexhtml"
      return
    fi
  done
  return 1
}

print_task() {
  local task=$1 logs

  # Try local
  for logs in \
    "/tasks/$task/logs" \
    "/tasks/archive/done/_$((task/1024))/$task/logs"
  do
    if [ -d "$logs" ]; then
      ( set +f
        cat "$logs"/events.*.log ) | girar-summary
      return
    fi
  done

  # Try remote
  print_curl "$task"
}

declare -i i
for i
do
  print_task "$i"
done
