From 65dd018850d58506186d4a6e9c1697f5408321d2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 5 Sep 2024 16:22:08 -0400 Subject: [PATCH] prevent overwriting a repo in the simulation --- Annex/Sim.hs | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Annex/Sim.hs b/Annex/Sim.hs index 597e34e017..ceae8fdfc7 100644 --- a/Annex/Sim.hs +++ b/Annex/Sim.hs @@ -123,20 +123,23 @@ applySimCommand -> SimState -> Either String (Either (Annex SimState) SimState) applySimCommand (CommandInit reponame) st = - let (u, st') = genSimUUID st reponame - in Right $ Right $ st' - { simRepos = M.insert reponame u (simRepos st') - } -applySimCommand (CommandInitRemote reponame) st = - let (u, st') = genSimUUID st reponame - in Right $ Right $ st' - { simSpecialRemotes = M.insert reponame u (simSpecialRemotes st') - } + checkNonexistantRepo reponame st $ + let (u, st') = genSimUUID st reponame + in Right $ Right $ st' + { simRepos = M.insert reponame u (simRepos st') + } +applySimCommand (CommandInitRemote reponame) st = + checkNonexistantRepo reponame st $ + let (u, st') = genSimUUID st reponame + in Right $ Right $ st' + { simSpecialRemotes = M.insert reponame u (simSpecialRemotes st') + } applySimCommand (CommandUse reponame s) st = case existingRepoByName (simExistingRepoByName st) s of - (u:[], _) -> Right $ Right $ st - { simSpecialRemotes = M.insert reponame u (simSpecialRemotes st) - } + (u:[], _) -> checkNonexistantRepo reponame st $ + Right $ Right $ st + { simSpecialRemotes = M.insert reponame u (simSpecialRemotes st) + } (_, msg) -> Left $ "Unable to use a repository \"" ++ fromRepoName reponame ++ "\" in the simulation because " ++ msg @@ -235,6 +238,12 @@ applySimCommand (CommandRebalance b) st = Right $ Right $ st { simRebalance = b } +checkNonexistantRepo :: RepoName -> SimState -> Either String a -> Either String a +checkNonexistantRepo reponame st a = case M.lookup reponame (simRepos st) of + Nothing -> a + Just _ -> Left $ "There is already a repository in the simulation named \"" + ++ fromRepoName reponame ++ "\"." + checkKnownRepo :: RepoName -> SimState -> Either String a -> Either String a checkKnownRepo reponame st a = case M.lookup reponame (simRepos st) of Just _ -> a