02eed13913
Sincronizan el repo principal y todos los sub-repos git anidados (apps
externalizadas, projects con repo propio) y luego ejecutan fn sync para
sincronizar metadata no regenerable contra registry_api.
Credenciales para fn sync vienen de pass (registry/{api-token,
basicauth-user,basicauth-pass}).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.6 KiB
2.6 KiB
/full-git-pull — Pull de fn_registry + todos los sub-repos + submodules + fn sync
Trae los últimos cambios del remote para el repo principal fn_registry, todos los sub-repos git anidados, y los submodules de cpp/vendor/. Después regenera registry.db y corre fn sync para tirar de la metadata del registry_api (apps, projects, analysis, vaults, pc_locations registrados desde otros PCs).
Argumento
$ARGUMENTS — sin uso, ignorar.
Pasos
1. Descubrir repos
cd /home/egutierrez/fn_registry
REPOS=$(find . -name ".git" -type d \
-not -path "./.git/*" \
-not -path "*/node_modules/*" \
-not -path "*/.venv/*" \
-not -path "*/cpp/vendor/*" \
-not -path "*/cpp/build/*" \
-not -path "*/sources/*" \
-not -path "*/temp/*" 2>/dev/null | sed 's|/.git$||')
REPOS=". $REPOS"
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, abortar el pull de ese repo y reportar (no rebasear sin permiso). - Si
stash popproduce conflictos, avisar y dejar el conflicto al usuario; no resolverlo automáticamente.
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 con credenciales de pass
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 locked, 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; result de fn index; result de fn sync.
Notas
- Pull solo es fast-forward — nunca rebase ni merge automático.
- Si el repo principal pulleó cambios y eliminó archivos referenciados por sub-repos (raro), el usuario debe resolverlo manualmente.
fn indexse corre antes defn syncpara que las locations locales reflejen el estado actual.