diff --git a/.travis.yml b/.travis.yml index 34d3a5d..67f85d4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,11 @@ +# Travis file upgraded to stack at 2015-31-12 using template from +# . +# # Travis file initially created at 2015-05-31 using template from # # and taking the idea of using cabal-meta from yesodweb/yesod. -# NB: don't set `language: haskell` here +sudo: false services: - redis-server @@ -10,55 +13,69 @@ services: addons: postgresql: "9.3" -# The following enables several GHC versions to be tested; often it's enough to test only against the last release in a major GHC version. Feel free to omit lines listings versions you don't need/want testing for. -env: - #- CABALVER=1.16 GHCVER=6.12.3 - #- CABALVER=1.16 GHCVER=7.0.1 - #- CABALVER=1.16 GHCVER=7.0.2 - #- CABALVER=1.16 GHCVER=7.0.3 - #- CABALVER=1.16 GHCVER=7.0.4 - #- CABALVER=1.16 GHCVER=7.2.1 - #- CABALVER=1.16 GHCVER=7.2.2 - #- CABALVER=1.16 GHCVER=7.4.1 - #- CABALVER=1.16 GHCVER=7.4.2 - #- CABALVER=1.16 GHCVER=7.6.1 - #- CABALVER=1.16 GHCVER=7.6.2 - #- CABALVER=1.18 GHCVER=7.6.3 - #- CABALVER=1.18 GHCVER=7.8.1 # see note about Alex/Happy for GHC >= 7.8 - #- CABALVER=1.18 GHCVER=7.8.2 - #- CABALVER=1.18 GHCVER=7.8.3 - #- CABALVER=1.18 GHCVER=7.8.4 - - CABALVER=1.20 GHCVER=7.8.4 - - CABALVER=1.22 GHCVER=7.10.1 - #- CABALVER=1.22 GHCVER=7.10.2 - #- CABALVER=head GHCVER=head # see section about GHC HEAD snapshots +cache: + directories: + - $HOME/.stack + +matrix: + include: + - env: GHCVER=7.8.4 RESOLVER=lts-2.22 EXTRADEPS="hedis-0.6.6" STACKARGS="--flag serversession-backend-redis:old-locale" + addons: + apt: + sources: + - hvr-ghc + packages: + - ghc-7.8.4 + - env: GHCVER=7.10.2 RESOLVER=lts-3.4 EXTRADEPS="" STACKARGS="" + addons: + apt: + sources: + - hvr-ghc + packages: + - ghc-7.10.2 + - env: GHCVER=7.10.2 RESOLVER=lts-3.20 EXTRADEPS="" STACKARGS="" + addons: + apt: + sources: + - hvr-ghc + packages: + - ghc-7.10.2 + - env: GHCVER=head RESOLVER=nightly EXTRADEPS="" STACKARGS="" + addons: + apt: + sources: + - hvr-ghc + packages: + - ghc-head + allow_failures: + - env: GHCVER=head RESOLVER=nightly EXTRADEPS="" STACKARGS="" -# Note: the distinction between `before_install` and `install` is not important. before_install: - - travis_retry sudo add-apt-repository -y ppa:hvr/ghc - - travis_retry sudo apt-get update - - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER # see note about happy/alex - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$PATH + # Download and unpack the stack executable + - mkdir -p ~/.local/bin + - export PATH=$HOME/.local/bin:$PATH + - travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack' + - export PATH=/opt/ghc/$GHCVER/bin:$PATH + - export RUNSTACK="stack --no-terminal --skip-ghc-check --resolver=$RESOLVER" install: - - cabal --version - - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" - - travis_retry cabal update - - cabal install cabal-src cabal-meta alex happy + - $RUNSTACK --version + - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" + - $RUNSTACK install alex happy before_script: - - psql -c "CREATE USER test WITH PASSWORD 'test';" -U postgres - - psql -c "CREATE DATABASE test;" -U postgres - - psql -c "GRANT ALL PRIVILEGES ON DATABASE test TO test;" -U postgres + - psql -c "CREATE USER test WITH PASSWORD 'test';" -U postgres + - psql -c "CREATE DATABASE test;" -U postgres + - psql -c "GRANT ALL PRIVILEGES ON DATABASE test TO test;" -U postgres + - for dep in $EXTRADEPS; do echo " - $dep" >> stack.yaml; done -# Here starts the actual work to be performed for the package under test; any command which exits with a non-zero exit code causes the build to fail. script: - - cabal-meta install --enable-tests --enable-benchmarks --force-reinstalls - - serversession/dist/build/tests/tests - - serversession-backend-acid-state/dist/build/tests/tests - - du -hcs state; rm -Rfv state - - serversession-backend-persistent/dist/build/tests/tests --skip=100\ MiB - - du -hcs test.db*; rm -Rfv test.db* - - psql -c 'SELECT COUNT(*) FROM "persistent_session";' -U test test; psql -c 'DROP DATABASE test;' -U postgres - - serversession-backend-redis/dist/build/tests/tests - - redis-cli FLUSHALL + - $RUNSTACK test $STACKARGS serversession + - $RUNSTACK test $STACKARGS serversession-backend-acid-state + - du -hcs serversession-backend-acid-state/state; rm -Rfv serversession-backend-acid-state/state + - $RUNSTACK test $STACKARGS serversession-backend-persistent --test-arguments='"--skip=100 MiB"' + - du -hcs serversession-backend-persistent/test.db*; rm -Rfv serversession-backend-persistent/test.db* + - psql -c 'SELECT COUNT(*) FROM "persistent_session";' -U test test; psql -c 'DROP DATABASE test;' -U postgres + - $RUNSTACK test $STACKARGS serversession-backend-redis + - redis-cli FLUSHALL + - $RUNSTACK test $STACKARGS --no-run-tests # Make sure everything else builds diff --git a/serversession-backend-persistent/serversession-backend-persistent.cabal b/serversession-backend-persistent/serversession-backend-persistent.cabal index 0bd5415..c09b92e 100644 --- a/serversession-backend-persistent/serversession-backend-persistent.cabal +++ b/serversession-backend-persistent/serversession-backend-persistent.cabal @@ -23,7 +23,7 @@ library , cereal >= 0.4 , path-pieces , persistent >= 2.1 && < 2.3 - , tagged >= 0.8 + , tagged >= 0.7 , text , time , transformers diff --git a/serversession-backend-redis/serversession-backend-redis.cabal b/serversession-backend-redis/serversession-backend-redis.cabal index 46a0493..762468c 100644 --- a/serversession-backend-redis/serversession-backend-redis.cabal +++ b/serversession-backend-redis/serversession-backend-redis.cabal @@ -13,6 +13,10 @@ homepage: https://github.com/yesodweb/serversession description: API docs and the README are available at extra-source-files: README.md +flag old-locale + description: Use time-1.4 and old-locale (GHC 7.8). + default: False + library hs-source-dirs: src build-depends: @@ -20,17 +24,22 @@ library , bytestring , hedis == 0.6.* , path-pieces - , tagged >= 0.8 + , tagged >= 0.7 , text - , time >= 1.5 + , time >= 1.4 , transformers , unordered-containers , serversession == 1.0.* + if flag(old-locale) + build-depends: time == 1.4.*, old-locale + else + build-depends: time >= 1.5 exposed-modules: Web.ServerSession.Backend.Redis Web.ServerSession.Backend.Redis.Internal extensions: + CPP DeriveDataTypeable FlexibleContexts OverloadedStrings diff --git a/serversession-backend-redis/src/Web/ServerSession/Backend/Redis/Internal.hs b/serversession-backend-redis/src/Web/ServerSession/Backend/Redis/Internal.hs index 49a33a8..f246358 100644 --- a/serversession-backend-redis/src/Web/ServerSession/Backend/Redis/Internal.hs +++ b/serversession-backend-redis/src/Web/ServerSession/Backend/Redis/Internal.hs @@ -47,6 +47,11 @@ import qualified Data.Text.Encoding as TE import qualified Data.Time.Clock as TI import qualified Data.Time.Format as TI +#if MIN_VERSION_time(1,5,0) +import Data.Time.Format (defaultTimeLocale) +#else +import System.Locale (defaultTimeLocale) +#endif ---------------------------------------------------------------------- @@ -184,13 +189,19 @@ printSession Session {..} = -- | Parse 'UTCTime' from a 'ByteString' stored on Redis. Uses -- 'error' on parse error. parseUTCTime :: ByteString -> TI.UTCTime -parseUTCTime = TI.parseTimeOrError True TI.defaultTimeLocale timeFormat . B8.unpack +#if MIN_VERSION_time(1,5,0) +parseUTCTime = TI.parseTimeOrError True defaultTimeLocale timeFormat . B8.unpack +#else +parseUTCTime = + fromMaybe (error "Web.ServerSession.Backend.Redis.Internal.parseUTCTime") . + TI.parseTime defaultTimeLocale timeFormat . B8.unpack +#endif -- | Convert a 'UTCTime' into a 'ByteString' to be stored on -- Redis. printUTCTime :: TI.UTCTime -> ByteString -printUTCTime = B8.pack . TI.formatTime TI.defaultTimeLocale timeFormat +printUTCTime = B8.pack . TI.formatTime defaultTimeLocale timeFormat -- | Time format used when storing 'UTCTime'.