commit 04a83492a79c046ffccb7e66432c2826f77894f3 from: ale date: Thu Jul 23 21:15:29 2026 UTC Corrige el parseo de got update: 'Already up-to-date' no es un archivo Reportado en vivo tras arreglar el SSH: Update Project mostraba un archivo creado falso '/nixdots/eady up-to-date'. got update imprime texto libre ('Already up-to-date') cuando no hay nada que traer, sin el patrón 'código + 2 espacios + path' de las líneas de estado reales. El filtro anterior solo descartaba líneas que empezaran con espacio, y 'Already...' empieza con 'A' -- que además coincide con un código de estado válido -- así que se parseaba como code='A', path='eady up-to-date' (substring(3) de 'Already up-to-date'). Fix: exigir que las posiciones 1 y 2 sean espacios antes de tratar la línea como una entrada de estado. También se quita el -v de got fetch (era solo diagnóstico temporal, ya no aportaba nada una vez identificado el problema real de SSH_AUTH_SOCK). commit - d34058df636afd1f3e5d6930c7cb3a324cb1ae0e commit + 04a83492a79c046ffccb7e66432c2826f77894f3 blob - 4d1f516c6ed3564d9e955b825316fb6a7414aa52 blob + 51c15a60b3fe0cd0d8c4f69086f6ebdada80525d --- src/main/kotlin/dev/nezzontli/gotvcs/GotCommandLineWrapper.kt +++ src/main/kotlin/dev/nezzontli/gotvcs/GotCommandLineWrapper.kt @@ -157,21 +157,24 @@ class GotCommandLineWrapper { @Throws(VcsException::class) fun fetch(workDir: File) { - // -v también se reenvía a ssh(1): diagnóstico temporal para el fallo - // de "Permission denied (publickey)" reportado en vivo (Fase 6). - run(workDir, "fetch", "-v") + run(workDir, "fetch") } - /** `got update`, formato de estado similar a `got status` (código + 2 espacios + path). */ + /** + * `got update`, formato de estado similar a `got status` (código + 2 + * espacios + path). Cuando no hay nada que traer, got update imprime en + * cambio texto libre como "Already up-to-date" -- sin el patrón de 2 + * espacios en las posiciones 1-2, así que se descarta explícitamente en + * vez de asumir que toda línea no vacía es una entrada de estado + * (confirmado en vivo: "Already up-to-date" se parseaba como code='A', + * path="eady up-to-date"). + */ @Throws(VcsException::class) fun update(workDir: File): List { val output = run(workDir, "update") return output.lineSequence() - .filter { it.isNotBlank() && it[0] != ' ' } - .mapNotNull { line -> - if (line.length < 3) return@mapNotNull null - GotUpdateEntry(line[0], line.substring(3)) - } + .filter { it.length >= 3 && it[1] == ' ' && it[2] == ' ' } + .map { line -> GotUpdateEntry(line[0], line.substring(3)) } .toList() } }