Commit Diff


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<GotUpdateEntry> {
         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()
     }
 }