fix(android): a conflict answers 422, not 409
The retry path finally ran, and did not recognise what it was handed. A desktop publishing between our read and our write earns a 422, not a 409, so the save failed instead of retrying - which is exactly what a never-exercised path hides: it was written, it compiled, it was even commented, and it did not fire. Gitea answers 409 when the sha no longer matches and 422 when it is missing or the request is judged unprocessable, "file already exists" among them. Both say the same thing to us: the sha is stale. Re-reading and retrying is right for both and cannot clobber anything - the retry publishes against the fresh sha. A genuinely malformed body would fail again and give up after three tries, carrying Gitea's own words. The log now prints which code it was, rather than assuming.
This commit is contained in:
+18
-5
@@ -843,11 +843,24 @@ Les trois verbes d'un coup, et depuis l'autre bout : **créer** (4), **modifier*
|
||||
(1), **supprimer** (1). Le `1 deleted` est celui qui comptait — la disparition
|
||||
locale ne prouvait rien, c'est la pierre tombale qui devait voyager.
|
||||
|
||||
Les étapes 1 à 3 de cette section sont donc closes. **Reste le 409** : depuis
|
||||
que l'enregistrement ne tire plus avant de publier, c'est lui seul qui garantit
|
||||
qu'une écriture du téléphone n'écrase pas le poste, et il n'a toujours jamais
|
||||
tourné. Le provoquer : synchroniser depuis le poste, puis enregistrer depuis le
|
||||
téléphone sans synchroniser d'abord.
|
||||
Les étapes 1 à 3 de cette section sont donc closes.
|
||||
|
||||
### Le conflit rend 422, pas 409 — corrigé 2026-08-21
|
||||
|
||||
Le chemin de reprise a enfin tourné, et il ne reconnaissait pas ce qu'il
|
||||
recevait. Un poste qui publie entre notre lecture et notre écriture nous vaut un
|
||||
**422**, pas un 409 : l'enregistrement échouait au lieu de reprendre.
|
||||
|
||||
Gitea rend 409 quand le sha envoyé ne correspond plus, et 422 quand il manque ou
|
||||
que la demande est jugée irrecevable — dont le cas « ce fichier existe déjà »
|
||||
d'une création. Les deux disent la même chose pour nous : **le sha n'est plus le
|
||||
bon**. Relire et recommencer est la bonne réponse aux deux, et elle est sans
|
||||
danger — la reprise republie avec le sha frais, donc elle n'écrase jamais rien ;
|
||||
un corps réellement mal formé échouerait de nouveau et sortirait au bout de
|
||||
trois essais, avec le texte de Gitea.
|
||||
|
||||
C'est exactement ce qu'un chemin jamais exercé cache : il était écrit, il
|
||||
compilait, il était même commenté — et il ne se déclenchait pas.
|
||||
|
||||
### Ce qui devient facultatif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user