Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/b8e9e9396d147971e708d4282688ddb8e1b5f8a1

>---------------------------------------------------------------

commit b8e9e9396d147971e708d4282688ddb8e1b5f8a1
Author: Duncan Coutts <[email protected]>
Date:   Mon Dec 17 23:46:49 2007 +0000

    Get the saved hackage username and password from the config file
    rather than from the old ~/.cabal-upload/auth file.
    Now uses ~/.cabal/config with:
    hackage-username:
    hackage-password:

>---------------------------------------------------------------

 cabal-install/Hackage/Config.hs |   13 +++++++++++++
 cabal-install/Hackage/Setup.hs  |    6 ++----
 cabal-install/Hackage/Types.hs  |    8 +++++++-
 cabal-install/Hackage/Upload.hs |   35 +++++++++++------------------------
 cabal-install/Main.hs           |    7 +++----
 5 files changed, 36 insertions(+), 33 deletions(-)

diff --git a/cabal-install/Hackage/Config.hs b/cabal-install/Hackage/Config.hs
index c5f6220..efeeeaf 100644
--- a/cabal-install/Hackage/Config.hs
+++ b/cabal-install/Hackage/Config.hs
@@ -44,6 +44,7 @@ import Distribution.Simple.Configure (getInstalledPackages)
 import qualified Distribution.Simple.Configure as Configure (configCompiler)
 import Distribution.Simple.InstallDirs (InstallDirs(..), PathTemplate, 
toPathTemplate)
 import Distribution.Simple.Program (ProgramConfiguration, 
defaultProgramConfiguration)
+import Distribution.Simple.Setup (toFlag, fromFlagOrDefault)
 import Distribution.Version (showVersion)
 import Distribution.Verbosity (Verbosity, normal)
 
@@ -143,6 +144,8 @@ defaultConfigFlags =
                , configRepos       = [Repo "hackage.haskell.org" 
"http://hackage.haskell.org/packages/archive";]
                , configVerbose     = normal
                , configUserInstall = True
+               , configUploadUsername = mempty
+               , configUploadPassword = mempty
                }
 
 --
@@ -197,7 +200,17 @@ configWriteFieldDescrs =
                 (text . show)                  (readS_to_P reads)
                 configCacheDir    (\d cfg -> cfg { configCacheDir = d })
     , boolField "user-install" configUserInstall (\u cfg -> cfg { 
configUserInstall = u })
+    , simpleField "hackage-username"
+                (text . show . fromFlagOrDefault "")
+                (fmap emptyToNothing $ readS_to_P reads)
+                configUploadUsername    (\d cfg -> cfg { configUploadUsername 
= d })
+    , simpleField "hackage-password"
+                (text . show . fromFlagOrDefault "")
+                (fmap emptyToNothing $ readS_to_P reads)
+                configUploadPassword    (\d cfg -> cfg { configUploadPassword 
= d })
     ] 
+    where emptyToNothing "" = mempty
+          emptyToNothing f  = toFlag f
 
 installDirDescrs :: [FieldDescr (InstallDirs (Maybe PathTemplate))]
 installDirDescrs =
diff --git a/cabal-install/Hackage/Setup.hs b/cabal-install/Hackage/Setup.hs
index 8a4a47b..ba123c9 100644
--- a/cabal-install/Hackage/Setup.hs
+++ b/cabal-install/Hackage/Setup.hs
@@ -45,7 +45,8 @@ import Distribution.Simple.Setup (Flag, toFlag, 
fromFlagOrDefault,
                                   flagToMaybe, flagToList)
 import Distribution.Verbosity (Verbosity, normal, flagToVerbosity, 
showForCabal)
 
-import Hackage.Types (ConfigFlags(..), UnresolvedDependency(..))
+import Hackage.Types (ConfigFlags(..), UnresolvedDependency(..),
+                      Username, Password)
 import Hackage.Utils (readPToMaybe, parseDependencyOrPackageId)
 
 import Control.Monad (MonadPlus(mplus))
@@ -152,9 +153,6 @@ infoCommand = CommandUI {
 -- * Upload flags
 -- ------------------------------------------------------------
 
-type Username = String
-type Password = String
-
 data UploadFlags = UploadFlags {
     uploadCheck     :: Flag Bool,
     uploadUsername  :: Flag Username,
diff --git a/cabal-install/Hackage/Types.hs b/cabal-install/Hackage/Types.hs
index 6d42c7a..eb5e8ed 100644
--- a/cabal-install/Hackage/Types.hs
+++ b/cabal-install/Hackage/Types.hs
@@ -14,6 +14,7 @@ module Hackage.Types where
 
 import Distribution.Simple.Compiler (CompilerFlavor)
 import Distribution.Simple.InstallDirs (InstallDirs, PathTemplate)
+import Distribution.Simple.Setup (Flag)
 import Distribution.Package (PackageIdentifier)
 import Distribution.PackageDescription (GenericPackageDescription)
 import Distribution.Version (Dependency)
@@ -37,10 +38,15 @@ data ConfigFlags = ConfigFlags {
         configCacheDir    :: FilePath,
         configRepos       :: [Repo],       -- ^Available Hackage servers.
         configVerbose     :: Verbosity,
-        configUserInstall :: Bool            -- ^--user-install flag
+        configUserInstall :: Bool,           -- ^--user-install flag
+        configUploadUsername :: Flag Username,
+        configUploadPassword :: Flag Password
    }
   deriving (Show)
 
+type Username = String
+type Password = String
+
 data Repo = Repo {
                   repoName :: String,
                   repoURL :: String
diff --git a/cabal-install/Hackage/Upload.hs b/cabal-install/Hackage/Upload.hs
index 0b672cf..69b8113 100644
--- a/cabal-install/Hackage/Upload.hs
+++ b/cabal-install/Hackage/Upload.hs
@@ -4,6 +4,7 @@
 module Hackage.Upload (upload) where
 
 import Hackage.Setup (UploadFlags(..))
+import Hackage.Types (ConfigFlags(..))
 import Distribution.Simple.Utils (debug, notice)
 import Distribution.Simple.Setup (toFlag, fromFlag, flagToMaybe)
 
@@ -14,13 +15,11 @@ import Network.HTTP (Header(..), HeaderName(..), 
Request(..),
                      RequestMethod(..), Response(..))
 import Network.URI (URI, parseURI)
 
-import Control.Monad    (MonadPlus(mplus))
+import Data.Monoid      (Monoid(mappend))
 import Data.Char        (intToDigit)
 import Numeric          (showHex)
-import System.Directory (doesFileExist, getAppUserDataDirectory)
 import System.IO        (hFlush, stdout)
 import System.Random    (randomRIO)
-import System.FilePath  ((</>))
 
 type Username = String
 type Password = String
@@ -34,9 +33,9 @@ Just checkURI = parseURI 
"http://hackage.haskell.org/cgi-bin/hackage-scripts/che
 
 
 
-upload :: UploadFlags -> [FilePath] -> IO ()
-upload flags paths = do
-          flags' <- if needsAuth flags then getAuth flags else return flags
+upload :: ConfigFlags -> UploadFlags -> [FilePath] -> IO ()
+upload cfg flags paths = do
+          flags' <- if needsAuth flags then getAuth cfg flags else return flags
           mapM_ (handlePackage flags') paths
 
 handlePackage :: UploadFlags -> FilePath -> IO ()
@@ -74,13 +73,14 @@ setAuth uri user pwd =
                                auPassword = pwd,
                                auSite     = uri }
 
-getAuth :: UploadFlags -> IO UploadFlags
-getAuth flags = 
-    do (mu, mp) <- readAuthFile
-       u <- case flagToMaybe (uploadUsername flags) `mplus` mu of
+getAuth :: ConfigFlags -> UploadFlags -> IO UploadFlags
+getAuth cfg flags =
+    do u <- case flagToMaybe $ configUploadUsername cfg
+                     `mappend` uploadUsername flags of
               Just u  -> return u
               Nothing -> promptUsername
-       p <- case flagToMaybe (uploadPassword flags) `mplus` mp of
+       p <- case flagToMaybe $ configUploadPassword cfg
+                     `mappend` uploadPassword flags of
               Just p  -> return p
               Nothing -> promptPassword
        return $ flags { uploadUsername = toFlag u,
@@ -98,19 +98,6 @@ promptPassword =
        hFlush stdout
        getLine
 
-authFile :: IO FilePath
-authFile = do dir <- getAppUserDataDirectory "cabal-upload"
-              return $ dir </> "auth"
-
-readAuthFile :: IO (Maybe Username, Maybe Password)
-readAuthFile = 
-    do file <- authFile
-       e <- doesFileExist file
-       if e then do s <- readFile file
-                    let (u,p) = read s
-                    return (Just u, Just p)
-            else return (Nothing, Nothing)
-
 ignoreMsg :: String -> IO ()
 ignoreMsg _ = return ()
 
diff --git a/cabal-install/Main.hs b/cabal-install/Main.hs
index 0e04970..8eff900 100644
--- a/cabal-install/Main.hs
+++ b/cabal-install/Main.hs
@@ -172,9 +172,8 @@ fetchAction flags extraArgs = do
 
 uploadAction :: UploadFlags -> [String] -> IO ()
 uploadAction flags extraArgs = do
---  configFile <- defaultConfigFile --FIXME
---  config0 <- loadConfig configFile
---  let config = config0 { configVerbose = fromFlag $ uploadVerbosity flags }
+  configFile <- defaultConfigFile --FIXME
+  config <- loadConfig configFile
   -- FIXME: check that the .tar.gz files exist and report friendly error 
message if not
   let tarfiles = extraArgs
-  upload flags tarfiles
+  upload config flags tarfiles



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to