diff options
author | Joey Hess <joey@kitenet.net> | 2014-08-06 13:45:19 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-08-06 13:45:19 -0400 |
commit | cc2606ce542e04c22cf229d536ad621f9e25c12d (patch) | |
tree | 27601f447942bcefbfcb89c6588f330d7580098c /Remote/Ddar.hs | |
parent | 5cd02fd1a52b3f1c19b01f4a021a7c63b96796dd (diff) |
pushed checkPresent exception handling out of Remote implementations
I tend to prefer moving toward explicit exception handling, not away from
it, but in this case, I think there are good reasons to let checkPresent
throw exceptions:
1. They can all be caught in one place (Remote.hasKey), and we know
every possible exception is caught there now, which we didn't before.
2. It simplified the code of the Remotes. I think it makes sense for
Remotes to be able to be implemented without needing to worry about
catching exceptions inside them. (Mostly.)
3. Types.StoreRetrieve.Preparer can only work on things that return a
Bool, which all the other relevant remote methods already did.
I do not see a good way to generalize that type; my previous attempts
failed miserably.
Diffstat (limited to 'Remote/Ddar.hs')
-rw-r--r-- | Remote/Ddar.hs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs index b4c7ac1e6..1227b5275 100644 --- a/Remote/Ddar.hs +++ b/Remote/Ddar.hs @@ -54,8 +54,8 @@ gen r u c gc = do , retrieveKeyFile = retreiveKeyFileDummy , retrieveKeyFileCheap = retrieveCheap , removeKey = remove ddarrepo - , hasKey = checkPresent ddarrepo - , hasKeyCheap = ddarLocal ddarrepo + , checkPresent = checkKey ddarrepo + , checkPresentCheap = ddarLocal ddarrepo , whereisKey = Nothing , remoteFsck = Nothing , repairRepo = Nothing @@ -181,13 +181,14 @@ inDdarManifest ddarrepo k = do where k' = key2file k -checkPresent :: DdarRepo -> Key -> Annex (Either String Bool) -checkPresent ddarrepo key = do +checkKey :: DdarRepo -> Key -> Annex Bool +checkKey ddarrepo key = do directoryExists <- ddarDirectoryExists ddarrepo case directoryExists of - Left e -> return $ Left e - Right True -> inDdarManifest ddarrepo key - Right False -> return $ Right False + Left e -> error e + Right True -> either error return + =<< inDdarManifest ddarrepo key + Right False -> return False ddarLocal :: DdarRepo -> Bool ddarLocal = notElem ':' |