#!/bin/bash # ========================================================= # Script: git-subir.sh # Autor: Nahuel (adaptado con QA) # Descripción: Automatiza commits y pushes a Gitea con # soporte de credenciales cifradas. # ========================================================= CONFIG="$HOME/.config/git-subir.conf" # Cargar configuración si existe if [[ -f "$CONFIG" ]]; then source "$CONFIG" fi guardar_config() { mkdir -p "$(dirname "$CONFIG")" cat > "$CONFIG" </dev/null) if [[ -z "$cred_descifrada" ]]; then echo "❌ Contraseña incorrecta. Abortando." exit 1 fi read -s -p "🔑 Nueva contraseña: " newpass echo "" CRED=$(echo -n "$cred_descifrada" | openssl enc -aes-256-cbc -a -pbkdf2 -pass pass:"$newpass") guardar_config echo "✅ Contraseña de cifrado actualizada." exit 0 fi # --------------------------------------------------------- # Descifrar credenciales si están cifradas # --------------------------------------------------------- if [[ "$CRED" =~ ^[A-Za-z0-9+/=]+$ ]]; then read -s -p "🔑 Contraseña para descifrado: " pass echo "" descifrado=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -pass pass:"$pass" 2>/dev/null) if [[ -n "$descifrado" ]]; then CRED="$descifrado" fi fi usuario=$(echo "$CRED" | cut -d: -f1) token=$(echo "$CRED" | cut -d: -f2) # Validar URL if [[ -z "$URL" ]]; then echo "❌ No se encontró la URL de Gitea en la configuración." exit 1 fi echo "📤 Subiendo cambios como $usuario a $URL..." # --------------------------------------------------------- # Verificar si es repo git # --------------------------------------------------------- if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "📁 No estás en un repositorio git. Inicializando..." git init read -p "🌐 URL del remoto origin: " remote_url git remote add origin "$remote_url" fi # --------------------------------------------------------- # Detectar cambios sin commitear # --------------------------------------------------------- if [[ -n "$(git status --porcelain)" ]]; then echo "📦 Hay cambios sin commitear." read -p "❓ ¿Querés escribir un mensaje de commit? (s/n): " respuesta if [[ "$respuesta" == "s" ]]; then mensaje="" while [[ -z "$mensaje" ]]; do read -p "📝 Ingresá el mensaje de commit: " mensaje done git add -A git commit -m "$mensaje" else git add -A git commit -m "Auto-commit" echo "✅ Commit automático generado." fi else echo "✅ No hay cambios pendientes. Continuando con el push..." fi # --------------------------------------------------------- # Push con verificación de upstream # --------------------------------------------------------- branch=$(git rev-parse --abbrev-ref HEAD) remote=$(git config --get branch.$branch.remote) if [[ -z "$remote" ]]; then echo "⚠️ La rama '$branch' no tiene remoto configurado." echo "👉 Ejecutando: git push --set-upstream origin $branch" git push --set-upstream origin "$branch" || { echo "❌ Falló el push."; exit 1; } else git push || { echo "❌ Falló el push."; exit 1; } fi