summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlarsk <>2015-06-02 06:50:00 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2015-06-02 06:50:00 (GMT)
commit1a2ed8e45b0668bf0cd90588f1e817b1b155f03f (patch)
treed7e11ccaf4fa4924f74df28c4c768977328eee6a
parent95db279525a5ea6fdd36832562235e1046899169 (diff)
version 0.2.130.2.13
-rw-r--r--CHANGELOG.md17
-rw-r--r--configuration-tools.cabal59
-rw-r--r--constraints115
-rw-r--r--src/Configuration/Utils.hs2
-rw-r--r--src/Configuration/Utils/Internal.hs4
-rw-r--r--src/Configuration/Utils/Internal/ConfigFileReader.hs10
-rw-r--r--src/Configuration/Utils/Maybe.hs11
-rw-r--r--src/Configuration/Utils/Operators.hs7
-rw-r--r--src/Configuration/Utils/Setup.hs21
-rw-r--r--src/Configuration/Utils/Validation.hs10
10 files changed, 136 insertions, 120 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7ce0365..ee986dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,20 @@
+0.2.13
+======
+
+* Eliminate most compiler warnings when compiling with GHC-7.10.
+
+* Bump lower bound on the version of `optparse-applicative` to `0.11.0.2`.
+ This avoids issues when building with `transformers-compat`.
+
+* Reduce compilation time with `text<1.2.0.5` by avoiding usage of `toCaseFold`
+ from the `case-insensitive` package.
+
+* Dropped dependency on the error package.
+
+* [Issue 43](https://github.com/alephcloud/hs-configuration-tools/issues/43):
+ Support detection of the version control system when the package directory
+ and thus the cabal file is in sub-directory of the repository.
+
0.2.12
======
diff --git a/configuration-tools.cabal b/configuration-tools.cabal
index a449fac..5fa1792 100644
--- a/configuration-tools.cabal
+++ b/configuration-tools.cabal
@@ -1,9 +1,10 @@
-- ------------------------------------------------------ --
+-- Copyright © 2015 Lars Kuhtz <lakuhtz@gmail.com>
-- Copyright © 2014-2015 AlephCloud Systems, Inc.
-- ------------------------------------------------------ --
Name: configuration-tools
-Version: 0.2.12
+Version: 0.2.13
Synopsis: Tools for specifying and parsing configurations
description:
Tools for specifying and parsing configurations
@@ -31,9 +32,9 @@ Homepage: https://github.com/alephcloud/hs-configuration-tools
Bug-reports: https://github.com/alephcloud/hs-configuration-tools/issues
License: MIT
License-file: LICENSE
-Author: Lars Kuhtz <lars@alephcloud.com>
-Maintainer: Lars Kuhtz <lars@alephcloud.com>
-Copyright: Copyright (c) 2014-2015 AlephCloud, Inc.
+Author: Lars Kuhtz <lakuhtz@gmail.com>
+Maintainer: Lars Kuhtz <lakuhtz@gmail.com>
+Copyright: Copyright (c) 2015 Lars Kuhtz <lakuhtz@gmail.com>, 2014-2015 AlephCloud, Inc.
Category: Configuration, Console
Build-type: Custom
@@ -51,11 +52,12 @@ extra-source-files:
source-repository head
type: git
location: https://github.com/alephcloud/hs-configuration-tools.git
+ branch: master
source-repository this
type: git
location: https://github.com/alephcloud/hs-configuration-tools.git
- tag: 0.2.12
+ tag: 0.2.13
flag remote-configs
Description: enable loading of configuration files from HTTP URLs
@@ -67,14 +69,6 @@ flag old-transformers
Default: False
Manual: False
--- remove this as soon as optparse-applicative removes the upper bound
--- on transformers-compat. cabal should realy drop support for upper
--- bounds on dependencies of libraries...
-flag compat-three
- Description: use transformers-compat 0.3.*
- Default: False
- Manual: False
-
Library
hs-source-dirs: src
default-language: Haskell2010
@@ -107,9 +101,9 @@ Library
deepseq >= 1.3,
directory >= 1.2.1.0,
dlist >= 0.7.1,
- errors >= 1.4.3,
+ filepath >= 1.3.0.1,
network-uri >= 2.6.0.1,
- optparse-applicative >= 0.10,
+ optparse-applicative >= 0.11.0.2,
process >= 1.2.0.0,
text >= 1.0,
unordered-containers >= 0.2.4.0,
@@ -117,18 +111,11 @@ Library
profunctors >= 4.0.4
if flag(old-transformers)
- if flag(compat-three)
- build-depends:
- mtl >= 2.1,
- mtl-compat < 0.2,
- transformers >= 0.3 && < 0.4,
- transformers-compat >= 0.3 && < 0.4
- else
- build-depends:
- mtl >= 2.1,
- mtl-compat >= 0.2,
- transformers >= 0.3 && < 0.4,
- transformers-compat >= 0.4
+ build-depends:
+ mtl >= 2.1,
+ mtl-compat >= 0.2,
+ transformers >= 0.3 && < 0.4,
+ transformers-compat >= 0.4
else
build-depends:
mtl >= 2.2,
@@ -172,25 +159,19 @@ Test-Suite url-example-test
bytestring >= 0.10,
Cabal >= 1.18,
configuration-tools,
- errors >= 1.4.3,
text >= 1.0,
unordered-containers >= 0.2.4.0,
yaml >= 0.8.8.3
if flag(old-transformers)
- if flag(compat-three)
- build-depends:
- mtl >= 2.1 && < 2.2,
- mtl-compat < 0.2,
- transformers-compat >= 0.3 && < 0.4
- else
- build-depends:
- mtl >= 2.1,
- mtl-compat >= 0.2,
- transformers-compat >= 0.4
+ build-depends:
+ mtl >= 2.1,
+ mtl-compat >= 0.2,
+ transformers-compat >= 0.4
else
build-depends:
- mtl >= 2.2
+ mtl >= 2.2,
+ transformers >= 0.4
if flag(remote-configs)
build-depends:
diff --git a/constraints b/constraints
index ac7cb54..2b9699c 100644
--- a/constraints
+++ b/constraints
@@ -1,37 +1,37 @@
-constraints: Cabal ==1.18.1.3,
- MonadRandom ==0.3.0.1,
- aeson ==0.8.0.2,
+constraints: Cabal ==1.22.3.0,
+ StateVar ==1.1.0.0,
+ aeson ==0.9.0.1,
ansi-terminal ==0.6.2.1,
- ansi-wl-pprint ==0.6.7.1,
- array ==0.5.0.0,
+ ansi-wl-pprint ==0.6.7.2,
+ array ==0.5.1.0,
asn1-encoding ==0.9.0,
- asn1-parse ==0.9.0,
+ asn1-parse ==0.9.1,
asn1-types ==0.3.0,
async ==2.0.2,
- attoparsec ==0.12.1.2,
- base ==4.7.0.1,
+ attoparsec ==0.13.0.0,
+ base ==4.8.0.0,
base-unicode-symbols ==0.2.2.4,
base64-bytestring ==1.0.0.1,
- bifunctors ==4.2,
- blaze-builder ==0.3.3.4,
+ binary ==0.7.3.0,
+ blaze-builder ==0.4.0.1,
byteable ==0.1.1,
- bytestring ==0.10.4.0,
+ bytestring ==0.10.6.0,
case-insensitive ==1.2.0.4,
cereal ==0.4.1.1,
cipher-aes ==0.2.10,
cipher-des ==0.0.6,
cipher-rc4 ==0.1.4,
- comonad ==4.2.2,
- conduit ==1.2.3.1,
+ comonad ==4.2.6,
+ conduit ==1.2.4.2,
connection ==0.2.4,
- containers ==0.5.5.1,
- contravariant ==1.2.0.1,
- cookie ==0.4.1.4,
+ containers ==0.5.6.2,
+ contravariant ==1.3.1.1,
+ cookie ==0.4.1.5,
crypto-cipher-types ==0.0.9,
crypto-numbers ==0.2.7,
crypto-pubkey ==0.2.8,
crypto-pubkey-types ==0.4.3,
- crypto-random ==0.0.8,
+ crypto-random ==0.0.9,
cryptohash ==0.11.6,
data-default ==0.5.3,
data-default-class ==0.0.1,
@@ -39,69 +39,62 @@ constraints: Cabal ==1.18.1.3,
data-default-instances-containers ==0.0.1,
data-default-instances-dlist ==0.0.1,
data-default-instances-old-locale ==0.0.1,
- deepseq ==1.3.0.2,
- directory ==1.2.1.0,
+ deepseq ==1.4.1.1,
+ directory ==1.2.2.0,
distributive ==0.4.4,
- dlist ==0.7.1,
- either ==4.3.3.2,
- enclosed-exceptions ==1.0.1,
- errors ==1.4.7,
- exceptions ==0.8,
- filepath ==1.3.0.2,
- free ==4.10.0.1,
- ghc-prim ==0.3.1.0,
- hashable ==1.2.3.1,
- hourglass ==0.2.8,
- http-client ==0.4.7.1,
+ dlist ==0.7.1.1,
+ enclosed-exceptions ==1.0.1.1,
+ exceptions ==0.8.0.2,
+ filepath ==1.4.0.0,
+ ghc-prim ==0.4.0.0,
+ hashable ==1.2.3.2,
+ hourglass ==0.2.9,
+ http-client ==0.4.11.2,
http-client-tls ==0.2.2,
http-types ==0.8.6,
- integer-gmp ==0.5.1.0,
+ integer-gmp ==1.0.0.0,
lifted-base ==0.2.3.6,
- mime-types ==0.1.0.5,
+ memory ==0.6,
+ mime-types ==0.1.0.6,
mmorph ==1.0.4,
monad-control ==1.0.0.4,
mtl ==2.2.1,
nats ==1,
- network ==2.6.0.2,
- network-uri ==2.6.0.1,
- old-locale ==1.0.0.6,
+ network ==2.6.1.0,
+ network-uri ==2.6.0.3,
+ old-locale ==1.0.0.7,
optparse-applicative ==0.11.0.2,
- parsec ==3.1.8,
+ parsec ==3.1.9,
pem ==0.2.2,
- prelude-extras ==0.4,
- pretty ==1.1.1.1,
- primitive ==0.5.4.0,
- process ==1.2.0.0,
- profunctors ==4.3.2,
- publicsuffixlist ==0.1,
+ pretty ==1.1.2.0,
+ primitive ==0.6,
+ process ==1.2.3.0,
+ profunctors ==5.1.1,
random ==1.1,
- resourcet ==1.1.4.1,
+ resourcet ==1.1.5,
rts ==1.0,
- safe ==0.3.8,
- scientific ==0.3.3.7,
- securemem ==0.1.7,
- semigroupoids ==4.3,
- semigroups ==0.16.1,
+ scientific ==0.3.3.8,
+ securemem ==0.1.8,
+ semigroups ==0.16.2.2,
socks ==0.5.4,
stm ==2.4.4,
- streaming-commons ==0.1.9.1,
- syb ==0.4.4,
- tagged ==0.7.3,
- template-haskell ==2.9.0.0,
- text ==1.2.0.4,
- time ==1.4.2,
- tls ==1.2.16,
+ streaming-commons ==0.1.12.1,
+ syb ==0.5.1,
+ tagged ==0.8.0.1,
+ template-haskell ==2.10.0.0,
+ text ==1.2.1.0,
+ time ==1.5.0.1,
+ tls ==1.2.17,
transformers ==0.4.2.0,
transformers-base ==0.4.4,
transformers-compat ==0.4.0.4,
- unix ==2.7.0.1,
+ unix ==2.7.1.0,
unordered-containers ==0.2.5.1,
- utf8-string ==1,
- vector ==0.10.12.2,
+ vector ==0.10.12.3,
void ==0.7,
- x509 ==1.5.0.1,
+ x509 ==1.5.1,
x509-store ==1.5.0,
x509-system ==1.5.0,
- x509-validation ==1.5.1,
- yaml ==0.8.10.1,
+ x509-validation ==1.5.2,
+ yaml ==0.8.11,
zlib ==0.5.4.2
diff --git a/src/Configuration/Utils.hs b/src/Configuration/Utils.hs
index 5623d6b..f7cd9aa 100644
--- a/src/Configuration/Utils.hs
+++ b/src/Configuration/Utils.hs
@@ -548,7 +548,7 @@ mainOptions ProgramInfo{..} pkgInfoParser = O.info optionParser
-- this parser produces the results
<*> pAppConfiguration _piOptionParser
- -- the 'O.helper' option from optparse-applicative is hidden be default
+ -- the 'O.helper' option from optparse-applicative is hidden by default
-- which seems a bit weired. This option doesn't hide the access to help.
nonHiddenHelper = abortOption ShowHelpText
× long "help"
diff --git a/src/Configuration/Utils/Internal.hs b/src/Configuration/Utils/Internal.hs
index feffa3d..7ea9582 100644
--- a/src/Configuration/Utils/Internal.hs
+++ b/src/Configuration/Utils/Internal.hs
@@ -62,7 +62,7 @@ infixl 1 &, <&>
-- In case it is already import from the lens package this should be hidden
-- from the import.
--
-type Lens σ τ α β = Functor φ ⇒ (α → φ β) → σ → φ τ
+type Lens σ τ α β = ∀ φ . Functor φ ⇒ (α → φ β) → σ → φ τ
-- | This is the same type as the type from the lens library with the same name.
--
@@ -92,7 +92,7 @@ view l = asks (getConst #. l Const)
-- In case it is already import from the lens package this should be hidden
-- from the import.
--
-type Iso σ τ α β = (Profunctor π, Functor φ) ⇒ π α (φ β) → π σ (φ τ)
+type Iso σ τ α β = ∀ π φ . (Profunctor π, Functor φ) ⇒ π α (φ β) → π σ (φ τ)
type Iso' σ α = Iso σ σ α α
iso ∷ (σ → α) → (β → τ) → Iso σ τ α β
diff --git a/src/Configuration/Utils/Internal/ConfigFileReader.hs b/src/Configuration/Utils/Internal/ConfigFileReader.hs
index fd0fd3e..67d3f63 100644
--- a/src/Configuration/Utils/Internal/ConfigFileReader.hs
+++ b/src/Configuration/Utils/Internal/ConfigFileReader.hs
@@ -47,7 +47,6 @@ import Control.Monad.IO.Class
import Control.Monad.Error.Class
import qualified Data.ByteString.Char8 as B8
-import qualified Data.CaseInsensitive as CI
import Data.Monoid.Unicode
import qualified Data.Text as T
import Data.Typeable
@@ -65,6 +64,7 @@ import Control.Exception.Enclosed
import Control.Monad.Trans.Control
import qualified Data.ByteString.Lazy as LB
+import qualified Data.CaseInsensitive as CI
import qualified Data.List as L
import Data.String
import qualified Data.Text.IO as T
@@ -121,10 +121,10 @@ readConfigFile _conf file =
fileType ∷ T.Text → ConfigFileFormat
fileType f
- | CI.foldCase ".yaml" `T.isSuffixOf` CI.foldCase f = Yaml
- | CI.foldCase ".yml" `T.isSuffixOf` CI.foldCase f = Yaml
- | CI.foldCase ".json" `T.isSuffixOf` CI.foldCase f = Json
- | CI.foldCase ".js" `T.isSuffixOf` CI.foldCase f = Json
+ | ".yaml" `T.isSuffixOf` T.toLower f = Yaml
+ | ".yml" `T.isSuffixOf` T.toLower f = Yaml
+ | ".json" `T.isSuffixOf` T.toLower f = Json
+ | ".js" `T.isSuffixOf` T.toLower f = Json
| otherwise = Other
loadLocal
diff --git a/src/Configuration/Utils/Maybe.hs b/src/Configuration/Utils/Maybe.hs
index 56b5036..2a5e8ab 100644
--- a/src/Configuration/Utils/Maybe.hs
+++ b/src/Configuration/Utils/Maybe.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
@@ -7,6 +8,10 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(x,y,z) 1
+#endif
+
-- |
-- Module: Configuration.Utils.Maybe
-- Description: Configuration of Optional Values
@@ -28,7 +33,9 @@ module Configuration.Utils.Maybe
) where
+#if ! MIN_VERSION_base(4,8,0)
import Control.Applicative
+#endif
import Data.Aeson
-- -------------------------------------------------------------------------- --
@@ -73,11 +80,7 @@ import Data.Aeson
--
-- > pLogConfig ∷ MParser LogConfig
-- > pLogConfig = id
--- > #if MIN_VERSION_optparse-applicative(0,10,0)
-- > <$< logLevel .:: option auto
--- > #else
--- > <$< logLevel .:: option
--- > #endif
-- > % long "log-level"
-- > % metavar "INTEGER"
-- > % help "log level"
diff --git a/src/Configuration/Utils/Operators.hs b/src/Configuration/Utils/Operators.hs
index 4de234c..923a44e 100644
--- a/src/Configuration/Utils/Operators.hs
+++ b/src/Configuration/Utils/Operators.hs
@@ -1,8 +1,13 @@
+{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UnicodeSyntax #-}
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(x,y,z) 1
+#endif
+
-- |
-- Module: Configuration.Utils.Operators
-- Description: Useful operators for defining functions in an applicative context
@@ -24,7 +29,9 @@ module Configuration.Utils.Operators
, (⊙)
) where
+#if ! MIN_VERSION_base(4,8,0)
import Control.Applicative
+#endif
-- -------------------------------------------------------------------------- --
-- Useful Operators
diff --git a/src/Configuration/Utils/Setup.hs b/src/Configuration/Utils/Setup.hs
index 4ff38ac..c583579 100644
--- a/src/Configuration/Utils/Setup.hs
+++ b/src/Configuration/Utils/Setup.hs
@@ -129,7 +129,8 @@ import Data.Monoid
import Prelude hiding (readFile, writeFile)
-import System.Directory (doesFileExist, doesDirectoryExist, createDirectoryIfMissing)
+import System.Directory (doesFileExist, doesDirectoryExist, createDirectoryIfMissing, getCurrentDirectory, canonicalizePath)
+import System.FilePath (isDrive, (</>), takeDirectory)
import System.Exit (ExitCode(ExitSuccess))
#ifndef MIN_VERSION_Cabal
@@ -204,12 +205,18 @@ trim = f . f
where f = reverse . dropWhile isSpace
getVCS :: IO (Maybe RepoType)
-getVCS =
- doesDirectoryExist ".hg" >>= \x0 -> if x0
+getVCS = getCurrentDirectory >>= getVcsOfDir
+
+getVcsOfDir :: FilePath -> IO (Maybe RepoType)
+getVcsOfDir d = do
+ canonicDir <- canonicalizePath d
+ doesDirectoryExist (canonicDir </> ".hg") >>= \x0 -> if x0
then return (Just Mercurial)
- else doesDirectoryExist ".git" >>= \x1 -> return $ if x1
- then Just Git
- else Nothing
+ else doesDirectoryExist (canonicDir </> ".git") >>= \x1 -> if x1
+ then return $ Just Git
+ else if isDrive canonicDir
+ then return Nothing
+ else getVcsOfDir (takeDirectory canonicDir)
flagNameStr :: FlagName -> String
flagNameStr (FlagName s) = s
@@ -372,7 +379,7 @@ licenseFilesText pkgDesc =
--
getLicenseFiles :: PackageDescription -> [FilePath]
getLicenseFiles (PackageDescription _ _ l _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) =
- fromMaybe (error "unsupport Cabal library version") $ cast l <|> (return <$> cast l)
+ fromMaybe (error "unsupported Cabal library version") $ cast l <|> (return <$> cast l)
#endif
hgInfo :: IO (String, String, String)
diff --git a/src/Configuration/Utils/Validation.hs b/src/Configuration/Utils/Validation.hs
index 0ad9b02..7b096ff 100644
--- a/src/Configuration/Utils/Validation.hs
+++ b/src/Configuration/Utils/Validation.hs
@@ -6,6 +6,10 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UnicodeSyntax #-}
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(x,y,z) 1
+#endif
+
-- |
-- Module: Configuration.Utils.Validation
-- Copyright: Copyright © 2014 AlephCloud Systems, Inc.
@@ -67,14 +71,18 @@ module Configuration.Utils.Validation
import Configuration.Utils.Internal
+#if ! MIN_VERSION_base(4,8,0)
import Control.Applicative
+#endif
import Control.Monad.Error.Class
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Writer.Class
import qualified Data.Foldable as F
+#if ! MIN_VERSION_base(4,8,0)
import Data.Monoid
+#endif
import Data.Monoid.Unicode
import qualified Data.Text as T
@@ -87,7 +95,7 @@ import System.Directory
-- | A validation function. The type in the 'MonadWriter' is excpected to
-- be a 'Foldable' structure for collecting warnings.
--
-type ConfigValidation α λ = (MonadIO μ, Functor μ, Applicative μ, MonadError T.Text μ, MonadWriter (λ T.Text) μ) ⇒ α → μ ()
+type ConfigValidation α λ = ∀ μ . (MonadIO μ, Functor μ, Applicative μ, MonadError T.Text μ, MonadWriter (λ T.Text) μ) ⇒ α → μ ()
-- -------------------------------------------------------------------------- --
-- Networking