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
|
# v0.8.08-beta — Paden rechtzetten en er verandert niets
|
||||||
|
|
||||||
Zet je in Instellingen → Paden je mappen goed, dan bleef de appslijst leeg. Niet
|
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
|
# 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.
|
# 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.
|
# 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 = []
|
result = []
|
||||||
|
gezien = set()
|
||||||
for r in repos:
|
for r in repos:
|
||||||
if not isinstance(r, dict) or not r.get("id"):
|
if not isinstance(r, dict) or not r.get("id"):
|
||||||
continue
|
continue
|
||||||
|
if r["id"] in gezien:
|
||||||
|
continue
|
||||||
|
gezien.add(r["id"])
|
||||||
result.append({**r, "cloned": git.cache_dir(r["id"]).exists()})
|
result.append({**r, "cloned": git.cache_dir(r["id"]).exists()})
|
||||||
return jsonify(result)
|
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 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
|
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