Commit 4102b0d2 authored by Mikhail Glushenkov's avatar Mikhail Glushenkov
Browse files

Fix a corner case in etag code.

parent f89f6628
...@@ -103,8 +103,10 @@ downloadURI verbosity uri path | uriScheme uri == "file:" = do ...@@ -103,8 +103,10 @@ downloadURI verbosity uri path | uriScheme uri == "file:" = do
-- hash matches to avoid unnecessary computation? -- hash matches to avoid unnecessary computation?
downloadURI verbosity uri path = do downloadURI verbosity uri path = do
let etagPath = path <.> "etag" let etagPath = path <.> "etag"
targetExists <- doesFileExist path
etagPathExists <- doesFileExist etagPath etagPathExists <- doesFileExist etagPath
etag <- if etagPathExists -- In rare cases the target file doesn't exist, but the etag does.
etag <- if targetExists && etagPathExists
then liftM Just $ readFile etagPath then liftM Just $ readFile etagPath
else return Nothing else return Nothing
...@@ -116,8 +118,8 @@ downloadURI verbosity uri path = do ...@@ -116,8 +118,8 @@ downloadURI verbosity uri path = do
(3,0,4) -> Right rsp (3,0,4) -> Right rsp
(a,b,c) -> Left err (a,b,c) -> Left err
where where
err = ErrorMisc $ "Unsucessful HTTP code: " err = ErrorMisc $ "Error HTTP code: "
++ concatMap show [a,b,c] ++ concatMap show [a,b,c]
-- Only write the etag if we get a 200 response code. -- Only write the etag if we get a 200 response code.
-- A 304 still sends us an etag header. -- A 304 still sends us an etag header.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment