#!/usr/bin/bash set -euo pipefail IFS=$'\n\t' SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -d "${SCRIPT_DIR}/../../.git" ]] || [[ -f "${SCRIPT_DIR}/../../nodo/config/etc/mirrors.env" ]]; then REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" else REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" fi SESSION_NAME="mxos-sync" usage() { cat << USAGE Uso: $0 Administra la sincronización de repositorios de software libre en una sesión persistente de tmux. Comandos: start Inicia la sincronización completa en la sesión tmux '${SESSION_NAME}' status Muestra si la sesión está activa y las últimas líneas de ejecución attach Instruye o conecta a la sesión interactiva ('tmux attach -t ${SESSION_NAME}') stop Detiene la sesión de sincronización USAGE exit 1 } cmd_start() { if tmux has-session -t "${SESSION_NAME}" 2>/dev/null; then echo "Aviso: La sesión tmux '${SESSION_NAME}' ya se encuentra activa." echo "Para ver el progreso en tiempo real: tmux attach -t ${SESSION_NAME}" return 0 fi echo "==> Iniciando sesión persistente de tmux: '${SESSION_NAME}'..." tmux new-session -d -s "${SESSION_NAME}" "${REPO_ROOT}/bin/mxos-repo-sync.bash" echo " Sesión iniciada exitosamente en segundo plano." echo " Comando para conectarte: tmux attach -t ${SESSION_NAME}" } cmd_status() { if tmux has-session -t "${SESSION_NAME}" 2>/dev/null; then echo "==> Sesión tmux '${SESSION_NAME}': ACTIVA (ejecutando sincronización)" echo "----------------------------------------------------------" tmux capture-pane -pt "${SESSION_NAME}" | tail -n 15 echo "----------------------------------------------------------" echo "Conéctate con: tmux attach -t ${SESSION_NAME}" else echo "==> Sesión tmux '${SESSION_NAME}': INACTIVA (no hay sincronización en curso)" fi } cmd_stop() { if tmux has-session -t "${SESSION_NAME}" 2>/dev/null; then echo "==> Terminando sesión tmux '${SESSION_NAME}'..." tmux kill-session -t "${SESSION_NAME}" echo " Sesión terminada." else echo "Aviso: No existe ninguna sesión '${SESSION_NAME}' activa." fi } main() { local action="${1:-status}" case "${action}" in start) cmd_start ;; status) cmd_status ;; attach) if tmux has-session -t "${SESSION_NAME}" 2>/dev/null; then echo "Ejecute: tmux attach -t ${SESSION_NAME}" else echo "No hay sesión '${SESSION_NAME}' activa para conectar." fi ;; stop) cmd_stop ;; -h|--help|help) usage ;; *) echo "Comando no reconocido: ${action}" >&2 usage ;; esac } main "$@"