From 4102b0d2a9fc681becb3826da2760fdc87af2600 Mon Sep 17 00:00:00 2001
From: Mikhail Glushenkov <mikhail.glushenkov@gmail.com>
Date: Wed, 29 May 2013 15:47:58 +0200
Subject: [PATCH] Fix a corner case in etag code.

---
 cabal-install/Distribution/Client/HttpUtils.hs | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/cabal-install/Distribution/Client/HttpUtils.hs b/cabal-install/Distribution/Client/HttpUtils.hs
index b3ed932339..8396079546 100644
--- a/cabal-install/Distribution/Client/HttpUtils.hs
+++ b/cabal-install/Distribution/Client/HttpUtils.hs
@@ -103,8 +103,10 @@ downloadURI verbosity uri path | uriScheme uri == "file:" = do
   -- hash matches to avoid unnecessary computation?
 downloadURI verbosity uri path = do
   let etagPath = path <.> "etag"
+  targetExists   <- doesFileExist path
   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
             else return Nothing
 
@@ -116,8 +118,8 @@ downloadURI verbosity uri path = do
           (3,0,4) -> Right rsp
           (a,b,c) -> Left err
             where
-              err = ErrorMisc $ "Unsucessful HTTP code: "
-                            ++ concatMap show [a,b,c]
+              err = ErrorMisc $ "Error HTTP code: "
+                                ++ concatMap show [a,b,c]
 
   -- Only write the etag if we get a 200 response code.
   -- A 304 still sends us an etag header.
-- 
GitLab