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
|
||||
|
||||
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"])
|
||||
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})
|
||||
c = git.cache_dir(rid)
|
||||
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]
|
||||
assert ids == ["server-up", "boilerplates"], ids
|
||||
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