v0.8.09-beta - twee repo's met dezelfde id braken de app store
Some checks failed
Deploy server-up (dev) / deploy (push) Has been cancelled
Some checks failed
Deploy server-up (dev) / deploy (push) Has been cancelled
Met twee repo's die dezelfde id dragen tekende de store geen kaarten terwijl de knop "Nog N tonen" een dalend getal liet zien: klikken verlaagde het getal met zestig en er verscheen niets. De repolijst wordt getekend met :key="repo.id". Dubbele keys zijn voor Alpine ongedefinieerd gedrag, dus ontbrekende of verkeerde blokken, terwijl de tellers gewoon doorrekenen over de gegevens. GET /api/repos geeft een id nu nog maar een keer terug. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
8bb3771d2b
commit
c608647582
4 changed files with 43 additions and 1 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -1,3 +1,17 @@
|
|||
# v0.8.09-beta — Twee repo's met dezelfde naam braken de app store
|
||||
|
||||
In een configuratie met twee repo's die dezelfde `id` dragen, tekende de app
|
||||
store geen kaarten terwijl de knop "Nog N tonen" een dalend getal liet zien.
|
||||
Klikken verlaagde het getal met zestig en er verscheen niets.
|
||||
|
||||
De interface tekent de repolijst met `:key="repo.id"`. Dubbele keys zijn voor
|
||||
Alpine ongedefinieerd gedrag — je krijgt ontbrekende of verkeerde blokken. De
|
||||
tellers rekenen ondertussen gewoon door over de gegevens, dus je ziet een getal
|
||||
onder een leeg scherm en nergens een fout.
|
||||
|
||||
`GET /api/repos` geeft een id nu nog maar één keer terug. Dat is geen
|
||||
schoonheidsreparatie: zolang er twee in zaten, was de hele storepagina stuk.
|
||||
|
||||
# v0.8.08-beta — Paden rechtzetten en er verandert niets
|
||||
|
||||
Zet je in Instellingen → Paden je mappen goed, dan bleef de appslijst leeg. Niet
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
0.8.08-beta
|
||||
0.8.09-beta
|
||||
|
|
|
|||
|
|
@ -1238,10 +1238,19 @@ def api_repos():
|
|||
# Een repo zonder id gaf hier een KeyError, dus een 500, dus een lege
|
||||
# repolijst in de interface — en daarmee een app store zonder enkele kaart.
|
||||
# Eén rare regel in de configuratie hoort de rest niet mee te nemen.
|
||||
# Twee repo's met dezelfde id zijn niet alleen verwarrend: de interface
|
||||
# tekent de lijst met `:key="repo.id"`, en dubbele keys zijn voor Alpine
|
||||
# ongedefinieerd gedrag — je krijgt ontbrekende of verkeerde blokken,
|
||||
# terwijl de tellers gewoon doorrekenen. Een dalend getal onder een leeg
|
||||
# scherm, zonder dat er ergens een fout te zien is.
|
||||
result = []
|
||||
gezien = set()
|
||||
for r in repos:
|
||||
if not isinstance(r, dict) or not r.get("id"):
|
||||
continue
|
||||
if r["id"] in gezien:
|
||||
continue
|
||||
gezien.add(r["id"])
|
||||
result.append({**r, "cloned": git.cache_dir(r["id"]).exists()})
|
||||
return jsonify(result)
|
||||
|
||||
|
|
|
|||
|
|
@ -243,3 +243,22 @@ def test_twee_synchronisaties_tegelijk_botsen_niet(env, tmp_path, monkeypatch):
|
|||
|
||||
assert not tegelijk, f"{len(tegelijk)} fetches liepen door elkaar heen"
|
||||
assert (cache_na := (git.cache_dir("proef") / "app.txt")).read_text() == "van main", cache_na
|
||||
|
||||
|
||||
def test_dubbele_repo_ids_komen_maar_een_keer_terug(client, env):
|
||||
"""De interface tekent de repolijst met `:key="repo.id"`. Dubbele keys zijn
|
||||
voor Alpine ongedefinieerd gedrag: je krijgt ontbrekende blokken terwijl de
|
||||
tellers doorrekenen — een dalend getal onder een leeg scherm."""
|
||||
import core
|
||||
from conftest import login
|
||||
login(client)
|
||||
core.patch({"APP_REPOS": [
|
||||
{"id": "server-up", "url": "https://voorbeeld/a.git", "name": "A"},
|
||||
{"id": "boilerplates", "url": "https://voorbeeld/b.git", "name": "B"},
|
||||
{"id": "server-up", "url": "https://voorbeeld/c.git", "name": "C"},
|
||||
{"url": "https://voorbeeld/d.git", "name": "zonder id"},
|
||||
]})
|
||||
d = client.get("/api/repos").get_json()
|
||||
ids = [r["id"] for r in d]
|
||||
assert ids == ["server-up", "boilerplates"], ids
|
||||
assert len(ids) == len(set(ids)), "er zitten nog dubbele ids in"
|
||||
|
|
|
|||
Loading…
Reference in a new issue