[commit: Cabal] master: Make the 'upload' command more self explanatory (264e38d)
Paolo Capriotti
p.capriotti at gmail.com
Tue May 8 00:12:19 CEST 2012
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/264e38d82d2d4b065b688f447e2560ce3b7dd36a
>---------------------------------------------------------------
commit 264e38d82d2d4b065b688f447e2560ce3b7dd36a
Author: Duncan Coutts <duncan at haskell.org>
Date: Mon Mar 10 23:33:46 2008 +0000
Make the 'upload' command more self explanatory
It tells you what to do if you don't supply any args, rather than doing
nothing and it check for simple mistakes and gives helpful error messages.
>---------------------------------------------------------------
cabal-install/Main.hs | 21 ++++++++++++++++++++-
1 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/cabal-install/Main.hs b/cabal-install/Main.hs
index 6435d41..b308ede 100644
--- a/cabal-install/Main.hs
+++ b/cabal-install/Main.hs
@@ -21,7 +21,7 @@ import Distribution.Simple.Program (defaultProgramConfiguration)
import Distribution.Simple.Command
import Distribution.Simple.SetupWrapper (setupWrapper)
import Distribution.Simple.Configure (configCompilerAux)
-import Distribution.Simple.Utils (cabalVersion, die)
+import Distribution.Simple.Utils (cabalVersion, die, intercalate)
import Hackage.Config (SavedConfig(..), savedConfigToConfigFlags,
defaultConfigFile, loadConfig, configRepos,
configPackageDB)
@@ -40,6 +40,8 @@ import qualified Paths_cabal_install (version)
import System.Environment (getArgs, getProgName)
import System.Exit (exitFailure)
+import System.FilePath (splitExtension, takeExtension)
+import System.Directory (doesFileExist)
import Data.List (intersperse)
import Data.Monoid (Monoid(..))
import Control.Monad (unless)
@@ -183,6 +185,7 @@ uploadAction flags extraArgs = do
config <- loadConfig verbosity configFile
-- FIXME: check that the .tar.gz files exist and report friendly error message if not
let tarfiles = extraArgs
+ checkTarFiles tarfiles
if fromFlag (uploadCheck flags)
then Upload.check verbosity tarfiles
else upload verbosity
@@ -191,6 +194,22 @@ uploadAction flags extraArgs = do
(flagToMaybe $ configUploadPassword config
`mappend` uploadPassword flags)
tarfiles
+ where
+ checkTarFiles tarfiles
+ | null tarfiles
+ = die "the 'upload' command expects one or more .tar.gz packages."
+ | not (null otherFiles)
+ = die $ "the 'upload' command expects only .tar.gz packages: "
+ ++ intercalate ", " otherFiles
+ | otherwise = sequence_
+ [ do exists <- doesFileExist tarfile
+ unless exists $ die $ "file not found: " ++ tarfile
+ | tarfile <- tarfiles ]
+
+ where otherFiles = filter (not . isTarGzFile) tarfiles
+ isTarGzFile file = case splitExtension file of
+ (file', ".gz") -> takeExtension file' == ".tar"
+ _ -> False
checkAction :: Flag Verbosity -> [String] -> IO ()
checkAction verbosityFlag extraArgs = do
More information about the Cvs-libraries
mailing list