96 lines
2.2 KiB
Bash
Executable File
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."
|