- 0050: jupyter_exec reescrito sin Y.js (REST + KernelClient). Bug raíz adicional: HEAD /api/contents da 405 → cambiado a GET. 9 tests (5 unit + 4 e2e). - 0052: footprint_aurgi cerrado. Bug fix en setup_geo_stack_docker_pipeline (verify aborta si compose up falla; nombre de contenedor incorrecto). - Nueva primitiva docker_container_running_py_infra (7 tests). - /full-git-push y /full-git-pull pasan a modo automático: auto-commit + push sin preguntar, aborta solo si detecta secrets. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
/full-git-pull — Pull automático de fn_registry + sub-repos + submodules + fn sync
Trae los últimos cambios del remote para el repo principal fn_registry, todos los sub-repos git anidados que ya existan localmente, y los submodules de cpp/vendor/. Después regenera registry.db y corre fn sync para tirar de la metadata del registry_api.
Modo automático (preferencia del usuario): este comando NO pregunta. Auto-stashea dirty trees antes de pullear y hace pop después. Sigue con el resto de repos aunque uno falle. Solo se detiene si detecta riesgo serio (conflicto en stash pop que requiere intervención humana).
No clona repos que falten. Cada PC tiene solo el subset de apps/analyses que le interesa. Si en este PC necesitas un sub-repo que aún no tienes, clónalo a mano:
git clone https://<user>:<token>@<gitea-host>/dataforge/<name>.git <path>
Consulta pc_locations para ver dónde lo tiene otro PC y reproduce el path.
Argumento
$ARGUMENTS — sin uso, ignorar.
Pasos
1. Descubrir repos locales
cd /home/lucas/fn_registry
REPOS=$(find . -name ".git" -type d \
-not -path "./.git" -not -path "./.git/*" \
-not -path "*/node_modules/*" -not -path "*/.venv/*" \
-not -path "*/cpp/vendor/*" -not -path "*/cpp/build/*" \
-not -path "*/sources/*" -not -path "*/temp/*" -not -path "*/subrepos/*" 2>/dev/null \
| sed 's|/.git$||')
REPOS=". $REPOS"
Solo se actualizan los sub-repos que ya tengan .git/ localmente.
2. Para cada repo: stash si dirty, pull --ff-only, pop
for r in $REPOS; do
( cd "$r" \
&& DIRTY=$(git status --porcelain | wc -l) \
&& if [ "$DIRTY" -gt 0 ]; then
git stash push -m "auto-stash before /full-git-pull" --include-untracked >/dev/null
STASHED=1
else
STASHED=0
fi \
&& git fetch origin 2>&1 | tail -1 \
&& git pull --ff-only 2>&1 | tail -3 \
&& if [ "$STASHED" = "1" ]; then
git stash pop 2>&1 | tail -3
fi
)
done
- Si
--ff-onlyfalla por divergencia → reportar ese repo, seguir con el resto. No rebasear ni mergear. - Si
stash popproduce conflictos → avisar al usuario al final y dejar el conflicto sin tocar; seguir con los demás repos.
3. Submodules del repo principal
git submodule update --init --recursive 2>&1 | tail -10
4. Regenerar registry.db local
CGO_ENABLED=1 ./fn index 2>&1 | tail -3
5. fn sync
USER=$(pass registry/basicauth-user | head -1)
PASSWD=$(pass registry/basicauth-pass | head -1)
TOKEN=$(pass registry/api-token | head -1)
export FN_REGISTRY_API="https://${USER}:${PASSWD}@registry.organic-machine.com"
export REGISTRY_API_TOKEN="$TOKEN"
./fn sync
Si pass falla → gpg-agent bloqueado, pedir al usuario pass show registry/api-token en su terminal real.
6. Resumen
Tabla concisa: por repo, commits pulleados o "ya estaba al día"; submodules actualizados; resultado de fn index; resultado de fn sync. Si algún repo quedó con conflicto de stash o divergencia, listarlos al final con la acción sugerida.
Notas
- Modo no-interactivo por diseño. El usuario prefiere flujos rápidos sin confirmaciones.
- Pull solo es fast-forward — nunca rebase ni merge automático.
- Auto-stash incluye untracked (
--include-untracked) para no perder archivos nuevos. fn indexse corre antes defn syncpara que las locations locales reflejen el estado actual.