Fix checking when content is present in a non-bare repository accessed via http.
I thought at first this was a Windows specific problem, but it's not; this affects checking any non-bare repository exported via http. Which is a potentially important use case! The actual bug was the case where Right False was returned by the first url short-curcuited later checks. But the whole method used felt like code I'd no longer write, and the use of undefined was particularly disgusting. So I rewrote it. Also added an action display. This commit was sponsored by Eric Hanchrow. Thanks!
This commit is contained in:
parent
3e422cb5fa
commit
d2f40d3d76
3 changed files with 12 additions and 10 deletions
|
@ -228,17 +228,14 @@ inAnnex r key
|
|||
| Git.repoIsUrl r = checkremote
|
||||
| otherwise = checklocal
|
||||
where
|
||||
checkhttp headers = liftIO $ go undefined $ keyUrls r key
|
||||
where
|
||||
go e [] = return $ Left e
|
||||
go _ (u:us) = do
|
||||
res <- catchMsgIO $
|
||||
Url.check u headers (keySize key)
|
||||
case res of
|
||||
Left e -> go e us
|
||||
v -> return v
|
||||
checkhttp headers = do
|
||||
showchecking
|
||||
liftIO $ ifM (anyM (\u -> Url.check u headers (keySize key)) (keyUrls r key))
|
||||
( return $ Right True
|
||||
, return $ Left "not found"
|
||||
)
|
||||
checkremote = do
|
||||
showAction $ "checking " ++ Git.repoDescribe r
|
||||
showchecking
|
||||
onRemote r (check, unknown) "inannex" [Param (key2file key)] []
|
||||
where
|
||||
check c p = dispatch <$> safeSystem c p
|
||||
|
@ -253,6 +250,7 @@ inAnnex r key
|
|||
dispatch (Right (Just b)) = Right b
|
||||
dispatch (Right Nothing) = unknown
|
||||
unknown = Left $ "unable to check " ++ Git.repoDescribe r
|
||||
showchecking = showAction $ "checking " ++ Git.repoDescribe r
|
||||
|
||||
{- Runs an action on a local repository inexpensively, by making an annex
|
||||
- monad using that repository. -}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue