Skip to content

Commit 1471dd1

Browse files
committed
Print warning when unexpected cred file exists
1 parent ca6ba8f commit 1471dd1

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

src/Stack/Upload.hs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
{-# LANGUAGE DeriveDataTypeable #-}
21
{-# LANGUAGE FlexibleContexts #-}
32
{-# LANGUAGE FlexibleInstances #-}
43
{-# LANGUAGE OverloadedStrings #-}
@@ -15,12 +14,12 @@ module Stack.Upload
1514
) where
1615

1716
import Control.Applicative
18-
import Control.Exception.Safe (bracket, handleIO)
17+
import Control.Exception.Safe (bracket, handleIO, tryIO)
1918
import qualified Control.Exception as E
20-
import Control.Monad (void, when)
19+
import Control.Monad (void, when, unless)
2120
import Data.Aeson (FromJSON (..),
2221
ToJSON (..),
23-
eitherDecode', encode,
22+
decode', encode,
2423
object, withObject,
2524
(.:), (.=))
2625
import qualified Data.ByteString.Char8 as S
@@ -31,7 +30,6 @@ import Data.Text (Text)
3130
import qualified Data.Text as T
3231
import Data.Text.Encoding (encodeUtf8)
3332
import qualified Data.Text.IO as TIO
34-
import Data.Typeable (Typeable)
3533
import Network.HTTP.Client (Response,
3634
RequestBody(RequestBodyLBS),
3735
Request)
@@ -86,18 +84,16 @@ instance FromJSON (FilePath -> HackageCreds) where
8684
loadCreds :: Config -> IO HackageCreds
8785
loadCreds config = do
8886
fp <- credsFile config
89-
fromFile fp `E.catches`
90-
[ E.Handler $ \(_ :: E.IOException) -> fromPrompt fp
91-
, E.Handler $ \(_ :: HackageCredsExceptions) -> fromPrompt fp
92-
]
87+
elbs <- tryIO $ L.readFile fp
88+
case either (const Nothing) Just elbs >>= decode' of
89+
Nothing -> fromPrompt fp
90+
Just mkCreds -> do
91+
unless (configSaveHackageCreds config) $ do
92+
putStrLn "WARNING: You've set save-hackage-creds to false"
93+
putStrLn "However, credentials were found at:"
94+
putStrLn $ " " ++ fp
95+
return $ mkCreds fp
9396
where
94-
fromFile fp = do
95-
lbs <- L.readFile fp
96-
either
97-
(E.throwIO . Couldn'tParseJSON fp)
98-
(return . ($ fp))
99-
(eitherDecode' lbs)
100-
10197
fromPrompt fp = do
10298
when (configSaveHackageCreds config) $ do
10399
putStrLn "NOTE: Username and password will be saved in a local file"
@@ -120,10 +116,6 @@ credsFile config = do
120116
createDirectoryIfMissing True dir
121117
return $ dir </> "credentials.json"
122118

123-
data HackageCredsExceptions = Couldn'tParseJSON FilePath String
124-
deriving (Show, Typeable)
125-
instance E.Exception HackageCredsExceptions
126-
127119
-- | Lifted from cabal-install, Distribution.Client.Upload
128120
promptPassword :: IO Text
129121
promptPassword = do

0 commit comments

Comments
 (0)