Files

96 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# okf-gen-logs.sh — Fase 4: Gera log.md por directório top-level
# OKF §7: log.md com histórico de alterações por data ISO, newest first
# Criado: 28-06-2026
HUB="/media/ealmeida/Dados/Hub"
DAYS=90 # Últimos N dias de histórico
DRY_RUN=false
if [[ "$1" == "--dry-run" ]]; then
DRY_RUN=true
echo "[DRY-RUN] Nenhum ficheiro será criado."
fi
# Directórios top-level a processar (excluir .stversions, node_modules, tmp)
TOP_DIRS=(
"00-Inbox"
"03-Propostas"
"04-Stack"
"05-Projectos"
"06-Operacoes"
"07-Clientes"
"90-Templates"
"99-Arquivo"
)
SINCE=$(date -d "-${DAYS} days" +%Y-%m-%d)
generate_log() {
local dir="$1"
local dir_path="$HUB/$dir"
local log_path="$dir_path/log.md"
if [[ ! -d "$dir_path" ]]; then
echo "[SKIP] $dir não existe"
return
fi
echo "A gerar log.md para $dir (últimos ${DAYS} dias desde ${SINCE})…"
# Obter commits que tocaram nesta pasta
local git_log
git_log=$(git -C "$HUB" log \
--since="$SINCE" \
--format="%cd|%s" \
--date=format:"%Y-%m-%d" \
-- "$dir/" 2>/dev/null)
if [[ -z "$git_log" ]]; then
echo " [INFO] Sem commits no período para $dir"
git_log=""
fi
# Agrupar por data e gerar markdown
local log_content
log_content="# Log de Actualizações — $dir
$(echo "$git_log" | awk -F'|' '
{
date=$1; msg=$2
if (date != prev_date) {
if (prev_date != "") print ""
print "## " date
prev_date=date
}
# Classificar entrada
if (msg ~ /^(feat|add|create|novo|cria)/) prefix="**Creation**"
else if (msg ~ /^(fix|corr|resolv)/) prefix="**Fix**"
else if (msg ~ /^(archive|arquiv)/) prefix="**Archive**"
else if (msg ~ /^(delete|remov|apag)/) prefix="**Deletion**"
else prefix="**Update**"
print "* " prefix ": " msg
}' 2>/dev/null || echo "_(sem histórico git no período)_")
"
if [[ "$DRY_RUN" == "true" ]]; then
echo " [DRY] $log_path"
echo " Primeiras linhas: $(echo "$log_content" | head -5)"
else
echo "$log_content" > "$log_path"
echo " [OK] $log_path"
fi
}
echo "=== okf-gen-logs.sh — $(date -I) ==="
echo "Hub: $HUB"
echo ""
for dir in "${TOP_DIRS[@]}"; do
generate_log "$dir"
done
echo ""
echo "=== Concluído ==="
echo "log.md gerado em ${#TOP_DIRS[@]} directórios."