From af00ff05913441cd4860c66aaf1d7a20a55b6d76 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 22 May 2016 15:39:22 -0400 Subject: update ghc version; 8.0.1 is released --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1e70e46a..2092e784 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,7 @@ propellor (3.0.4) UNRELEASED; urgency=medium * Run letsencrypt with --noninteractive. - * Fix build with ghc 8.0.1-rc4. + * Fix build with ghc 8.0.1. Thanks, davean. * Module added for the Borg backup system. Thanks, Félix Sipma. -- cgit v1.2.3 From 14e5429163f0138f03deaaa1134c8b4982c27141 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 22 May 2016 15:41:28 -0400 Subject: merge Utility from git-annex --- src/Utility/Exception.hs | 6 +++++- src/Utility/FileMode.hs | 3 ++- src/Utility/FileSystemEncoding.hs | 8 ++++++++ src/Utility/PosixFiles.hs | 10 +++++++++- src/Utility/Tmp.hs | 2 +- src/Utility/UserInfo.hs | 4 +--- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/Utility/Exception.hs b/src/Utility/Exception.hs index 8b110ae6..e691f13b 100644 --- a/src/Utility/Exception.hs +++ b/src/Utility/Exception.hs @@ -21,7 +21,8 @@ module Utility.Exception ( tryNonAsync, tryWhenExists, catchIOErrorType, - IOErrorType(..) + IOErrorType(..), + catchPermissionDenied, ) where import Control.Monad.Catch as X hiding (Handler) @@ -97,3 +98,6 @@ catchIOErrorType errtype onmatchingerr a = catchIO a onlymatching onlymatching e | ioeGetErrorType e == errtype = onmatchingerr e | otherwise = throwM e + +catchPermissionDenied :: MonadCatch m => (IOException -> m a) -> m a -> m a +catchPermissionDenied = catchIOErrorType PermissionDenied diff --git a/src/Utility/FileMode.hs b/src/Utility/FileMode.hs index efef5fa2..bb3780c6 100644 --- a/src/Utility/FileMode.hs +++ b/src/Utility/FileMode.hs @@ -18,9 +18,10 @@ import System.PosixCompat.Types import Utility.PosixFiles #ifndef mingw32_HOST_OS import System.Posix.Files +import Control.Monad.IO.Class (liftIO) #endif +import Control.Monad.IO.Class (MonadIO) import Foreign (complement) -import Control.Monad.IO.Class (liftIO, MonadIO) import Control.Monad.Catch import Utility.Exception diff --git a/src/Utility/FileSystemEncoding.hs b/src/Utility/FileSystemEncoding.hs index 67341d37..eab98337 100644 --- a/src/Utility/FileSystemEncoding.hs +++ b/src/Utility/FileSystemEncoding.hs @@ -19,6 +19,7 @@ module Utility.FileSystemEncoding ( encodeW8NUL, decodeW8NUL, truncateFilePath, + setConsoleEncoding, ) where import qualified GHC.Foreign as GHC @@ -164,3 +165,10 @@ truncateFilePath n = reverse . go [] n . L8.fromString else go (c:coll) (cnt - x') (L8.drop 1 bs) _ -> coll #endif + +{- This avoids ghc's output layer crashing on invalid encoded characters in + - filenames when printing them out. -} +setConsoleEncoding :: IO () +setConsoleEncoding = do + fileEncoding stdout + fileEncoding stderr diff --git a/src/Utility/PosixFiles.hs b/src/Utility/PosixFiles.hs index 4550bebd..37253da2 100644 --- a/src/Utility/PosixFiles.hs +++ b/src/Utility/PosixFiles.hs @@ -1,6 +1,6 @@ {- POSIX files (and compatablity wrappers). - - - This is like System.PosixCompat.Files, except with a fixed rename. + - This is like System.PosixCompat.Files, but with a few fixes. - - Copyright 2014 Joey Hess - @@ -21,6 +21,7 @@ import System.PosixCompat.Files as X hiding (rename) import System.Posix.Files (rename) #else import qualified System.Win32.File as Win32 +import qualified System.Win32.HardLink as Win32 #endif {- System.PosixCompat.Files.rename on Windows calls renameFile, @@ -32,3 +33,10 @@ import qualified System.Win32.File as Win32 rename :: FilePath -> FilePath -> IO () rename src dest = Win32.moveFileEx src dest Win32.mOVEFILE_REPLACE_EXISTING #endif + +{- System.PosixCompat.Files.createLink throws an error, but windows + - does support hard links. -} +#ifdef mingw32_HOST_OS +createLink :: FilePath -> FilePath -> IO () +createLink = Win32.createHardLink +#endif diff --git a/src/Utility/Tmp.hs b/src/Utility/Tmp.hs index 7610f6cc..6a541cfe 100644 --- a/src/Utility/Tmp.hs +++ b/src/Utility/Tmp.hs @@ -11,9 +11,9 @@ module Utility.Tmp where import System.IO -import System.Directory import Control.Monad.IfElse import System.FilePath +import System.Directory import Control.Monad.IO.Class #ifndef mingw32_HOST_OS import System.Posix.Temp (mkdtemp) diff --git a/src/Utility/UserInfo.hs b/src/Utility/UserInfo.hs index 7e94cafa..c6010116 100644 --- a/src/Utility/UserInfo.hs +++ b/src/Utility/UserInfo.hs @@ -17,9 +17,7 @@ module Utility.UserInfo ( import Utility.Env import System.PosixCompat -#ifndef mingw32_HOST_OS import Control.Applicative -#endif import Prelude {- Current user's home directory. @@ -58,6 +56,6 @@ myVal envvars extract = go envvars #ifndef mingw32_HOST_OS go [] = extract <$> (getUserEntryForID =<< getEffectiveUserID) #else - go [] = error $ "environment not set: " ++ show envvars + go [] = extract <$> error ("environment not set: " ++ show envvars) #endif go (v:vs) = maybe (go vs) return =<< getEnv v -- cgit v1.2.3 From 0d9148d03cd40ddf9ae79fadd6571dd0fd576d5b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 22 May 2016 15:52:27 -0400 Subject: split out module to work around badly named symbol in directory-1.2.6.2 Sadly my bug report about this is not going to get fixed it seems, so I have to drag around a whole added module file just to deal with it. https://github.com/haskell/directory/issues/52 --- debian/changelog | 1 + propellor.cabal | 1 + src/Propellor/Base.hs | 4 ++-- src/Utility/Directory.hs | 6 +++--- src/Utility/SystemDirectory.hs | 16 ++++++++++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/Utility/SystemDirectory.hs diff --git a/debian/changelog b/debian/changelog index 2092e784..137d9d75 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ propellor (3.0.4) UNRELEASED; urgency=medium Thanks, davean. * Module added for the Borg backup system. Thanks, Félix Sipma. + * Fix build with directory-1.2.6.2. -- Joey Hess Thu, 05 May 2016 10:37:43 -0400 diff --git a/propellor.cabal b/propellor.cabal index beac5c38..547f34a6 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -207,6 +207,7 @@ Library Utility.Process.NonConcurrent Utility.SafeCommand Utility.Scheduled + Utility.SystemDirectory Utility.Table Utility.ThreadScheduler Utility.Tmp diff --git a/src/Propellor/Base.hs b/src/Propellor/Base.hs index ef75bf03..ae75589f 100644 --- a/src/Propellor/Base.hs +++ b/src/Propellor/Base.hs @@ -20,7 +20,7 @@ module Propellor.Base ( , module Propellor.Utilities -- * System modules - , module System.Directory + , module Utility.SystemDirectory , module System.IO , module System.FilePath , module Data.Maybe @@ -47,7 +47,7 @@ import Propellor.PropAccum import Propellor.Location import Propellor.Utilities -import System.Directory hiding (isSymbolicLink) +import Utility.SystemDirectory import System.IO import System.FilePath import Data.Maybe diff --git a/src/Utility/Directory.hs b/src/Utility/Directory.hs index 3b12b9fc..693e7713 100644 --- a/src/Utility/Directory.hs +++ b/src/Utility/Directory.hs @@ -6,15 +6,14 @@ -} {-# LANGUAGE CPP #-} -{-# OPTIONS_GHC -fno-warn-tabs -w #-} +{-# OPTIONS_GHC -fno-warn-tabs #-} module Utility.Directory ( module Utility.Directory, - module System.Directory + module Utility.SystemDirectory ) where import System.IO.Error -import System.Directory hiding (isSymbolicLink) import Control.Monad import System.FilePath import Control.Applicative @@ -31,6 +30,7 @@ import Utility.SafeCommand import Control.Monad.IfElse #endif +import Utility.SystemDirectory import Utility.PosixFiles import Utility.Tmp import Utility.Exception diff --git a/src/Utility/SystemDirectory.hs b/src/Utility/SystemDirectory.hs new file mode 100644 index 00000000..3dd44d19 --- /dev/null +++ b/src/Utility/SystemDirectory.hs @@ -0,0 +1,16 @@ +{- System.Directory without its conflicting isSymbolicLink + - + - Copyright 2016 Joey Hess + - + - License: BSD-2-clause + -} + +-- Disable warnings because only some versions of System.Directory export +-- isSymbolicLink. +{-# OPTIONS_GHC -fno-warn-tabs -w #-} + +module Utility.SystemDirectory ( + module System.Directory +) where + +import System.Directory hiding (isSymbolicLink) -- cgit v1.2.3 From 0dd63693b8938a1d9a1319811b3d8bdd1569c60f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 22 May 2016 15:55:08 -0400 Subject: prep release --- debian/changelog | 4 ++-- propellor.cabal | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 137d9d75..261989c2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -propellor (3.0.4) UNRELEASED; urgency=medium +propellor (3.0.4) unstable; urgency=medium * Run letsencrypt with --noninteractive. * Fix build with ghc 8.0.1. @@ -7,7 +7,7 @@ propellor (3.0.4) UNRELEASED; urgency=medium Thanks, Félix Sipma. * Fix build with directory-1.2.6.2. - -- Joey Hess Thu, 05 May 2016 10:37:43 -0400 + -- Joey Hess Sun, 22 May 2016 15:54:49 -0400 propellor (3.0.3) unstable; urgency=medium diff --git a/propellor.cabal b/propellor.cabal index 547f34a6..e6279aef 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -1,5 +1,5 @@ Name: propellor -Version: 3.0.3 +Version: 3.0.4 Cabal-Version: >= 1.8 License: BSD2 Maintainer: Joey Hess -- cgit v1.2.3