--- name: git_auto_commit_dirty kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "git_auto_commit_dirty(repo_dir: string, message?: string) -> stdout: commit subject or empty" description: "Si el repo tiene cambios sin commitear, hace git add -A y git commit. Genera mensaje automatico si no se pasa: detecta patron de dominio (python/functions//, dev/issues/, functions//, bash/functions//) o usa chore: auto-commit con lista de paths. Anade Co-Authored-By Claude. Salta si el repo es ~/.password-store." tags: [git, commit, auto, infra, dirty] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: repo_dir desc: "path al repo git donde commitear; default '.'" - name: message desc: "mensaje de commit fijo (opcional); si se omite, se genera automaticamente segun los archivos cambiados" output: "subject del commit creado por stdout (primera linea del mensaje); vacio si no habia cambios o si el repo es password-store" tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/git_auto_commit_dirty.sh" --- ## Ejemplo ```bash source bash/functions/infra/git_auto_commit_dirty.sh # Commitear con mensaje automatico subject=$(git_auto_commit_dirty $HOME/fn_registry) echo "Commit: $subject" # Commitear con mensaje fijo git_auto_commit_dirty /home/lucas/myapp "feat: add new feature" # Revisar si se creo commit (subject no vacio = commit creado) if [[ -n "$subject" ]]; then echo "Commit creado: $subject" else echo "Sin cambios" fi ``` ## Logica de mensaje automatico | Patron | Mensaje generado | |---|---| | Todos los paths bajo `python/functions//` | `feat(): auto-commit con N cambios` | | Todos los paths bajo `dev/issues/` | `chore(issues): auto-commit` | | Todos los paths bajo `functions//` | `feat(): auto-commit con N cambios` | | Todos los paths bajo `bash/functions//` | `feat(): auto-commit con N cambios` | | Paths dispersos | `chore: auto-commit (N archivos)` + lista | ## Notas El Co-Authored-By se anade siempre como segundo `-m` del commit. El repo `~/.password-store` (o `$PASSWORD_STORE_DIR`) se salta silenciosamente — `pass` gestiona sus propios commits. Exit 1 solo si el repo no existe o si git commit falla.