v0.8.10-beta - een repo verwijderen mag niet struikelen
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 17m40s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 17m40s
DELETE /api/repos/<id> las r["id"] zonder controle, dus een regel zonder id gaf een 500 - dezelfde fout die GET /api/repos had. Verwijderen haalt alle regels met die id weg, zodat een dubbele vermelding in een klik weg is. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
c608647582
commit
030d644753
4 changed files with 34 additions and 2 deletions
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -1,3 +1,13 @@
|
||||||
|
# v0.8.10-beta — Een repo verwijderen mag niet struikelen
|
||||||
|
|
||||||
|
`DELETE /api/repos/<id>` las `r["id"]` zonder controle. Staat er één regel
|
||||||
|
zonder id in je configuratie, dan gaf verwijderen een 500 — dezelfde fout die
|
||||||
|
`GET /api/repos` had en die de hele app store leeg liet. Nu wordt zo'n regel
|
||||||
|
overgeslagen.
|
||||||
|
|
||||||
|
Verwijderen haalt alle regels met die id weg, dus een dubbele vermelding is in
|
||||||
|
één klik opgeruimd.
|
||||||
|
|
||||||
# v0.8.09-beta — Twee repo's met dezelfde naam braken de app store
|
# 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
|
In een configuratie met twee repo's die dezelfde `id` dragen, tekende de app
|
||||||
|
|
|
||||||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.8.09-beta
|
0.8.10-beta
|
||||||
|
|
|
||||||
|
|
@ -1281,7 +1281,11 @@ def api_repos_add():
|
||||||
|
|
||||||
@app.route("/api/repos/<rid>", methods=["DELETE"])
|
@app.route("/api/repos/<rid>", methods=["DELETE"])
|
||||||
def api_repos_del(rid):
|
def api_repos_del(rid):
|
||||||
repos = [r for r in cfg.load().get("APP_REPOS", []) if r["id"] != rid]
|
# `r["id"]` op een regel zonder id gaf hier een KeyError, dus een 500 —
|
||||||
|
# dezelfde fout die /api/repos had. Verwijdert alle regels met deze id,
|
||||||
|
# zodat een dubbele vermelding in één keer weg is.
|
||||||
|
repos = [r for r in cfg.load().get("APP_REPOS", [])
|
||||||
|
if not isinstance(r, dict) or r.get("id") != rid]
|
||||||
cfg.patch({"APP_REPOS": repos})
|
cfg.patch({"APP_REPOS": repos})
|
||||||
c = git.cache_dir(rid)
|
c = git.cache_dir(rid)
|
||||||
if c.exists():
|
if c.exists():
|
||||||
|
|
|
||||||
|
|
@ -262,3 +262,21 @@ def test_dubbele_repo_ids_komen_maar_een_keer_terug(client, env):
|
||||||
ids = [r["id"] for r in d]
|
ids = [r["id"] for r in d]
|
||||||
assert ids == ["server-up", "boilerplates"], ids
|
assert ids == ["server-up", "boilerplates"], ids
|
||||||
assert len(ids) == len(set(ids)), "er zitten nog dubbele ids in"
|
assert len(ids) == len(set(ids)), "er zitten nog dubbele ids in"
|
||||||
|
|
||||||
|
|
||||||
|
def test_verwijderen_haalt_alle_regels_met_die_id_weg(client, env):
|
||||||
|
"""Een dubbele vermelding hoort in één keer weg. En een regel zonder id
|
||||||
|
mag hier geen 500 geven — dezelfde fout die /api/repos had."""
|
||||||
|
import core
|
||||||
|
from conftest import login
|
||||||
|
csrf = login(client)
|
||||||
|
core.patch({"APP_REPOS": [
|
||||||
|
{"id": "server-up", "url": "https://voorbeeld/a.git"},
|
||||||
|
{"id": "blijft", "url": "https://voorbeeld/b.git"},
|
||||||
|
{"id": "server-up", "url": "https://voorbeeld/c.git"},
|
||||||
|
{"url": "https://voorbeeld/d.git"},
|
||||||
|
]})
|
||||||
|
r = client.delete("/api/repos/server-up", headers={"X-CSRF-Token": csrf})
|
||||||
|
assert r.status_code == 200, r.get_json()
|
||||||
|
over = core.load()["APP_REPOS"]
|
||||||
|
assert [x.get("id") for x in over] == ["blijft", None], over
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue