3.5 KiB
repoman
Utilitat per clonar masivament repositoris de gitea
Lista los repositorios de un usuario u organización en un servidor Gitea, los cruza con los que ya tengas clonados en una carpeta local y te deja clonar los que falten desde una lista navegable.
Uso
repoman /ruta/local [<usuario-o-org>]
El segundo argumento es opcional si tienes default_owner en la config.
Interacción
Una vez dentro de la lista:
| Tecla | Acción |
|---|---|
↑ / ↓ / j / k |
mover cursor una fila |
← / → / h / l / PgUp / PgDn |
pasar de página |
g / Home · G / End |
inicio / final de la lista |
Space |
marcar / desmarcar el repo bajo el cursor |
a |
marcar todos los que aún no estén en local |
n |
desmarcar todo |
Enter |
clonar los marcados (en paralelo) |
r |
refrescar (vuelve a consultar al servidor) |
q / Ctrl-C |
salir |
La lista se pagina automáticamente según la altura del terminal, así que con miles de repos sigue respondiendo al instante.
Iconos de estado:
○ remoto— está en el servidor, no clonado localmente☑ marcado— pendiente de clonar⟳ clonando…— clone en curso✓ clonado— éxito✗ <err>— clone fallido (motivo abreviado)● en local— ya existía en local◇ sólo local— está en local pero no en el servidor🔒— repo privado
Configuración
Se carga siempre desde ~/.config/repoman/config.toml (respeta XDG_CONFIG_HOME):
[server]
url = "https://gitea.example.com"
# token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # opcional, para repos privados
# default_owner = "tu-usuario" # opcional, omite el argumento
# clone_protocol = "https" # "https" (por defecto) o "ssh"
El token se genera en Gitea en Settings → Applications → Generate New Token con el scope read:repository como mínimo. Sin token sólo verás repos públicos.
Requisitos en el sistema
Necesarios siempre:
python3(≥ 3.11, portomlliben stdlib)git
Para desarrollar (con venv):
python3-venv
Para compilar a binario con Nuitka (./build.sh):
python3-dev— cabecerasPython.hgcc— compilador Cpatchelf— necesario para el modo--onefileen Linux
En Debian/Ubuntu:
sudo apt install python3 python3-venv python3-dev git gcc patchelf
Desarrollo (con venv)
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python repoman.py /ruta/local mi-usuario
Compilar a binario standalone
./build.sh
Genera dist/repoman, un único ejecutable autocontenido (lleva Python, rich y readchar dentro), más un dist/repoman-vX.Y.Z-linux-arch.tar.gz listo para distribuir. Para instalarlo en tu PATH:
cp dist/repoman ~/.local/bin/
Ficheros
repoman.py— script principalrequirements.txt— dependencias Python (rich,readchar)build.sh— compila el binario con NuitkaREADME.md— este fichero.venv/— virtualenv local (no en git)dist/— binarios compilados (no en git)
Notas
- La detección de "ya clonado" compara primero la URL del
origincon laclone_url/ssh_urldel servidor; si no hay match, cae a comparar por nombre. Eso evita falsos positivos cuando tienes carpetas que se llaman igual pero apuntan a otro servidor. - Los clones se ejecutan en paralelo (máx. 4 a la vez).
- Se usa el endpoint
GET /api/v1/repos/search?owner=<x>con paginación de 50 en 50, así sirve tanto para usuarios como para organizaciones.