#!/bin/bash
# crear-fuentes [DIRECTORIO]: genera el tar.gz de fuentes desde el .summa.
# No compila, instala ni modifica el arbol de trabajo. Si ya existe un
# archivo con el mismo nombre pero distinto contenido, exige subir version.
set -euo pipefail

origen=$(cd "${1:-.}" && pwd)
salida=${2:-$origen}
mkdir -p "$salida"
salida=$(cd "$salida" && pwd)
aqui=$(cd "$(dirname "$0")" && pwd)
for datos in "$aqui/../share/summapack/data" \
             /usr/share/summapack/data /usr/local/share/summapack/data; do
    [ -f "$datos/hacer-pkg.inc" ] && break
done
[ -f "$datos/hacer-pkg.inc" ] || { echo 'crear-fuentes: falta hacer-pkg.inc de SummaPack' >&2; exit 1; }
# Reutiliza la generacion de debian/ y el tar reproducible de hacer-pkg.
. "$datos/hacer-pkg.inc"
necesita_ordenes dpkg-parsechangelog python3 tar gzip

temporal=$(mktemp -d "${TMPDIR:-/tmp}/crear-fuentes.XXXXXX")
trap 'rm -rf "$temporal"' EXIT
destino="$temporal/$(basename "$origen")"
if svn info "$origen" >/dev/null 2>&1; then
    svn export -q "$origen" "$destino"
else
    cp -a "$origen" "$destino"
fi
summa_aplicar "$destino"
if [ ! -f "$destino/debian/changelog" ]; then
    summa=$(find "$destino" -maxdepth 1 -type f -name '*.summa' -print -quit)
    [ -n "$summa" ] || { echo 'crear-fuentes: falta el .summa' >&2; exit 1; }
    version=$(bash -c '. "$1"; printf "%s" "${VERSION:-${BASEVERSION:-}}"' _ "$summa")
    [ -n "$version" ] || { echo "crear-fuentes: falta VERSION o BASEVERSION en $summa" >&2; exit 1; }
    nombre=$(basename "$summa" .summa)
    mantenedor=$(bash -c '. "$1"; printf "%s" "${MAINTAINER:-SummaPack <dsa@unsa.edu.ar>}"' _ "$summa")
    fecha=$(date -R -d "@$(stat -c %Y "$summa")")
    printf '%s (%s) unstable; urgency=low\n\n  * Archivo fuente generado desde %s.\n\n -- %s  %s\n' \
        "$nombre" "$version" "$(basename "$summa")" "$mantenedor" "$fecha" > "$destino/debian/changelog"
fi
fuentes "$destino"
archivo=$(find "$temporal" -maxdepth 1 -type f -name '*.tar.gz' -print -quit)
[ -n "$archivo" ] || { echo 'crear-fuentes: no se genero el tar.gz' >&2; exit 1; }
final="$salida/$(basename "$archivo")"
if [ -e "$final" ]; then
    cmp -s "$archivo" "$final" || {
        echo "crear-fuentes: $final ya existe con otro contenido; subir la version antes de distribuir" >&2
        exit 1
    }
    echo "fuentes sin cambios: $final"
else
    cp "$archivo" "$final"
    (cd "$salida" && md5sum "$(basename "$archivo")" > "$(basename "$archivo").md5")
    echo "fuentes: $final"
fi
