Skip to content

Commit 5dc297d

Browse files
authored
Merge pull request #5964 from commercialhaskell/stack-version
Use `stackVersion` consistently
2 parents e02e4d7 + 43b1210 commit 5dc297d

File tree

8 files changed

+182
-166
lines changed

8 files changed

+182
-166
lines changed

src/Stack/Config.hs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import qualified Data.Yaml as Yaml
4949
import Distribution.System
5050
( Arch (OtherArch), OS (..), Platform (..), buildPlatform )
5151
import qualified Distribution.Text
52-
import Distribution.Version ( simplifyVersionRange, mkVersion' )
52+
import Distribution.Version ( simplifyVersionRange )
5353
import GHC.Conc ( getNumProcessors )
5454
import Network.HTTP.StackClient
5555
( httpJSON, parseUrlThrow, getResponseBody )
@@ -59,7 +59,6 @@ import Path
5959
import Path.Extra ( toFilePathNoTrailingSep )
6060
import Path.Find ( findInParents )
6161
import Path.IO
62-
import qualified Paths_stack as Meta
6362
import RIO.List ( unzip )
6463
import RIO.Process
6564
import RIO.Time ( toGregorian )
@@ -82,6 +81,9 @@ import Stack.Types.Nix
8281
import Stack.Types.Resolver
8382
import Stack.Types.SourceMap
8483
import Stack.Types.Version
84+
( IntersectingVersionRange (..), VersionCheck (..)
85+
, stackVersion, withinRange
86+
)
8587
import System.Console.ANSI
8688
( hSupportsANSIWithoutEmulation, setSGRCode )
8789
import System.Environment
@@ -91,8 +93,8 @@ import System.PosixCompat.User ( getEffectiveUserID )
9193

9294
-- | If deprecated path exists, use it and print a warning.
9395
-- Otherwise, return the new path.
94-
tryDeprecatedPath
95-
:: HasLogFunc env
96+
tryDeprecatedPath ::
97+
HasLogFunc env
9698
=> Maybe T.Text -- ^ Description of file for warning (if Nothing, no deprecation warning is displayed)
9799
-> (Path Abs a -> RIO env Bool) -- ^ Test for existence
98100
-> Path Abs a -- ^ New path
@@ -121,8 +123,8 @@ tryDeprecatedPath mWarningDesc exists new old = do
121123
-- | Get the location of the implicit global project directory.
122124
-- If the directory already exists at the deprecated location, its location is returned.
123125
-- Otherwise, the new location is returned.
124-
getImplicitGlobalProjectDir
125-
:: HasLogFunc env
126+
getImplicitGlobalProjectDir ::
127+
HasLogFunc env
126128
=> Config -> RIO env (Path Abs Dir)
127129
getImplicitGlobalProjectDir config =
128130
--TEST no warning printed
@@ -145,8 +147,8 @@ getSnapshots = do
145147
pure $ getResponseBody result
146148

147149
-- | Turn an 'AbstractResolver' into a 'Resolver'.
148-
makeConcreteResolver
149-
:: HasConfig env
150+
makeConcreteResolver ::
151+
HasConfig env
150152
=> AbstractResolver
151153
-> RIO env RawSnapshotLocation
152154
makeConcreteResolver (ARResolver r) = pure r
@@ -184,8 +186,8 @@ getLatestResolver = do
184186
pure $ RSLSynonym $ fromMaybe (Nightly (snapshotsNightly snapshots)) mlts
185187

186188
-- Interprets ConfigMonoid options.
187-
configFromConfigMonoid
188-
:: HasRunner env
189+
configFromConfigMonoid ::
190+
HasRunner env
189191
=> Path Abs Dir -- ^ Stack root, e.g. ~/.stack
190192
-> Path Abs File -- ^ user config file path, e.g. ~/.stack/config.yaml
191193
-> Maybe AbstractResolver
@@ -516,7 +518,7 @@ loadConfig inner = do
516518
(mconcat $ configArgs : addConfigMonoid extraConfigs)
517519

518520
withConfig $ \config -> do
519-
unless (mkVersion' Meta.version `withinRange` configRequireStackVersion config)
521+
unless (stackVersion `withinRange` configRequireStackVersion config)
520522
(throwM (BadStackVersionException (configRequireStackVersion config)))
521523
unless (configAllowDifferentUser config) $ do
522524
unless userOwnsStackRoot $
@@ -527,8 +529,8 @@ loadConfig inner = do
527529

528530
-- | Load the build configuration, adds build-specific values to config loaded by @loadConfig@.
529531
-- values.
530-
withBuildConfig
531-
:: RIO BuildConfig a
532+
withBuildConfig ::
533+
RIO BuildConfig a
532534
-> RIO Config a
533535
withBuildConfig inner = do
534536
config <- ask
@@ -813,8 +815,8 @@ checkOwnership dir = do
813815

814816
-- | @'getDirAndOwnership' dir@ returns @'Just' (dir, 'True')@ when @dir@
815817
-- exists and the current user owns it in the sense of 'isOwnedByUser'.
816-
getDirAndOwnership
817-
:: (MonadIO m)
818+
getDirAndOwnership ::
819+
(MonadIO m)
818820
=> Path Abs Dir
819821
-> m (Maybe (Path Abs Dir, Bool))
820822
getDirAndOwnership dir = liftIO $ forgivingAbsence $ do
@@ -864,8 +866,8 @@ getExtraConfigs userConfigPath = do
864866

865867
-- | Load and parse YAML from the given config file. Throws
866868
-- 'ParseConfigFileException' when there's a decoding error.
867-
loadConfigYaml
868-
:: HasLogFunc env
869+
loadConfigYaml ::
870+
HasLogFunc env
869871
=> (Value -> Yaml.Parser (WithJSONWarnings a)) -> Path Abs File -> RIO env a
870872
loadConfigYaml parser path = do
871873
eres <- loadYaml parser path
@@ -875,8 +877,8 @@ loadConfigYaml parser path = do
875877
Right res -> pure res
876878

877879
-- | Load and parse YAML from the given file.
878-
loadYaml
879-
:: HasLogFunc env
880+
loadYaml ::
881+
HasLogFunc env
880882
=> (Value -> Yaml.Parser (WithJSONWarnings a)) -> Path Abs File -> RIO env (Either Yaml.ParseException a)
881883
loadYaml parser path = do
882884
eres <- liftIO $ Yaml.decodeFileEither (toFilePath path)
@@ -946,8 +948,8 @@ loadProjectConfig mstackYaml = do
946948
-- | Get the location of the default Stack configuration file.
947949
-- If a file already exists at the deprecated location, its location is returned.
948950
-- Otherwise, the new location is returned.
949-
getDefaultGlobalConfigPath
950-
:: HasLogFunc env
951+
getDefaultGlobalConfigPath ::
952+
HasLogFunc env
951953
=> RIO env (Maybe (Path Abs File))
952954
getDefaultGlobalConfigPath =
953955
case (defaultGlobalConfigPath, defaultGlobalConfigPathDeprecated) of
@@ -964,8 +966,8 @@ getDefaultGlobalConfigPath =
964966
-- | Get the location of the default user configuration file.
965967
-- If a file already exists at the deprecated location, its location is returned.
966968
-- Otherwise, the new location is returned.
967-
getDefaultUserConfigPath
968-
:: HasLogFunc env
969+
getDefaultUserConfigPath ::
970+
HasLogFunc env
969971
=> Path Abs Dir -> RIO env (Path Abs File)
970972
getDefaultUserConfigPath stackRoot = do
971973
(path, exists) <- tryDeprecatedPath

src/Stack/Docker.hs

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -23,54 +23,57 @@ module Stack.Docker
2323
, runContainerAndExit
2424
) where
2525

26-
import Stack.Prelude
27-
import qualified Crypto.Hash as Hash (Digest, MD5, hash)
28-
import Pantry.Internal.AesonExtended (FromJSON(..),(.:),(.:?),(.!=),eitherDecode)
26+
import qualified Crypto.Hash as Hash ( Digest, MD5, hash )
2927
import qualified Data.ByteString.Char8 as BS
3028
import qualified Data.ByteString.Lazy as BL
3129
import qualified Data.ByteString.Lazy.Char8 as LBS
32-
import Data.Char (isAscii,isDigit)
33-
import Data.Conduit.List (sinkNull)
34-
import Data.Conduit.Process.Typed hiding (proc)
35-
import Data.List (dropWhileEnd,isPrefixOf,isInfixOf)
36-
import Data.List.Extra (trim)
30+
import Data.Char ( isAscii, isDigit )
31+
import Data.Conduit.List ( sinkNull )
32+
import Data.Conduit.Process.Typed hiding ( proc )
33+
import Data.List ( dropWhileEnd, isInfixOf, isPrefixOf )
34+
import Data.List.Extra ( trim )
3735
import qualified Data.Map.Strict as Map
3836
import qualified Data.Text as T
3937
import qualified Data.Text.Encoding as T
40-
import Data.Time (UTCTime)
41-
import qualified Data.Version (showVersion, parseVersion)
42-
import Distribution.Version (mkVersion, mkVersion')
38+
import Data.Time ( UTCTime )
39+
import qualified Data.Version ( parseVersion )
40+
import Distribution.Version ( mkVersion, mkVersion' )
41+
import Pantry.Internal.AesonExtended
42+
( FromJSON (..), (.:), (.:?), (.!=), eitherDecode )
4343
import Path
44-
import Path.Extra (toFilePathNoTrailingSep)
45-
import Path.IO hiding (canonicalizePath)
46-
import qualified Paths_stack as Meta
47-
import Stack.Config (getInContainer)
44+
import Path.Extra ( toFilePathNoTrailingSep )
45+
import Path.IO hiding ( canonicalizePath )
46+
import qualified RIO.Directory
47+
import RIO.Process
48+
import Stack.Config ( getInContainer )
4849
import Stack.Constants
4950
import Stack.Constants.Config
50-
import Stack.Setup (ensureDockerStackExe)
51-
import Stack.Storage.User (loadDockerImageExeCache,saveDockerImageExeCache)
52-
import Stack.Types.Version
51+
import Stack.Prelude
52+
import Stack.Setup ( ensureDockerStackExe )
53+
import Stack.Storage.User
54+
( loadDockerImageExeCache, saveDockerImageExeCache )
5355
import Stack.Types.Config
5456
import Stack.Types.Docker
55-
import System.Environment (getEnv,getEnvironment,getProgName,getArgs,getExecutablePath)
57+
import Stack.Types.Version ( showStackVersion, withinRange )
58+
import System.Environment
59+
( getArgs, getEnv, getEnvironment, getExecutablePath
60+
, getProgName
61+
)
5662
import qualified System.FilePath as FP
57-
import System.IO.Error (isDoesNotExistError)
58-
import System.IO.Unsafe (unsafePerformIO)
59-
import qualified System.PosixCompat.User as User
60-
import qualified System.PosixCompat.Files as Files
61-
import System.Terminal (hIsTerminalDeviceOrMinTTY)
62-
import Text.ParserCombinators.ReadP (readP_to_S)
63-
import RIO.Process
64-
import qualified RIO.Directory
65-
63+
import System.IO.Error ( isDoesNotExistError )
64+
import System.IO.Unsafe ( unsafePerformIO )
6665
#ifndef WINDOWS
6766
import System.Posix.Signals
6867
import qualified System.Posix.User as PosixUser
6968
#endif
69+
import qualified System.PosixCompat.User as User
70+
import qualified System.PosixCompat.Files as Files
71+
import System.Terminal ( hIsTerminalDeviceOrMinTTY )
72+
import Text.ParserCombinators.ReadP ( readP_to_S )
7073

7174
-- | Function to get command and arguments to run in Docker container
72-
getCmdArgs
73-
:: HasConfig env
75+
getCmdArgs ::
76+
HasConfig env
7477
=> DockerOpts
7578
-> Inspect
7679
-> Bool
@@ -90,7 +93,7 @@ getCmdArgs docker imageInfo isRemoteDocker = do
9093
else pure Nothing
9194
args <-
9295
fmap
93-
(["--" ++ reExecArgName ++ "=" ++ Data.Version.showVersion Meta.version
96+
(["--" ++ reExecArgName ++ "=" ++ showStackVersion
9497
,"--" ++ dockerEntrypointArgName
9598
,show DockerEntrypoint{..}] ++)
9699
(liftIO getArgs)
@@ -404,8 +407,8 @@ pullImage docker image =
404407
ExitFailure _ -> throwIO (PullFailedException image)
405408

406409
-- | Check docker version (throws exception if incorrect)
407-
checkDockerVersion
408-
:: (HasProcessContext env, HasLogFunc env)
410+
checkDockerVersion ::
411+
(HasProcessContext env, HasLogFunc env)
409412
=> DockerOpts -> RIO env ()
410413
checkDockerVersion docker =
411414
do dockerExists <- doesExecutableExist "docker"
@@ -550,8 +553,8 @@ removeDirectoryContents path excludeDirs excludeFiles =
550553
-- e.g. docker pull, in which docker uses stderr for progress output.
551554
--
552555
-- Use 'readProcess_' directly to customize this.
553-
readDockerProcess
554-
:: (HasProcessContext env, HasLogFunc env)
556+
readDockerProcess ::
557+
(HasProcessContext env, HasLogFunc env)
555558
=> [String] -> RIO env BS.ByteString
556559
readDockerProcess args = BL.toStrict <$> proc "docker" args readProcessStdout_
557560

src/Stack/Init.hs

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,39 @@
88
{-# LANGUAGE TypeOperators #-}
99

1010
module Stack.Init
11-
( initProject
12-
, InitOpts (..)
13-
) where
14-
15-
import Stack.Prelude
16-
import qualified Data.Aeson.KeyMap as KeyMap
17-
import qualified Data.ByteString.Builder as B
18-
import qualified Data.ByteString.Char8 as BC
19-
import qualified Data.Foldable as F
20-
import qualified Data.IntMap as IntMap
21-
import Data.List.Extra (groupSortOn)
22-
import qualified Data.List.NonEmpty as NonEmpty
23-
import qualified Data.Map.Strict as Map
24-
import qualified Data.Set as Set
25-
import qualified Data.Text as T
26-
import qualified Data.Yaml as Yaml
11+
( initProject
12+
, InitOpts (..)
13+
) where
14+
15+
import qualified Data.Aeson.KeyMap as KeyMap
16+
import qualified Data.ByteString.Builder as B
17+
import qualified Data.ByteString.Char8 as BC
18+
import qualified Data.Foldable as F
19+
import qualified Data.IntMap as IntMap
20+
import Data.List.Extra ( groupSortOn )
21+
import qualified Data.List.NonEmpty as NonEmpty
22+
import qualified Data.Map.Strict as Map
23+
import qualified Data.Set as Set
24+
import qualified Data.Text as T
25+
import qualified Data.Yaml as Yaml
2726
import qualified Distribution.PackageDescription as C
28-
import qualified Distribution.Text as C
29-
import qualified Distribution.Version as C
27+
import qualified Distribution.Text as C
28+
import qualified Distribution.Version as C
3029
import Path
31-
import Path.Extra (toFilePathNoTrailingSep)
32-
import Path.Find (findFiles)
33-
import Path.IO hiding (findFiles)
34-
import qualified Paths_stack as Meta
35-
import qualified RIO.FilePath as FP
36-
import RIO.List ((\\), intercalate,
37-
isSuffixOf, isPrefixOf)
38-
import RIO.List.Partial (minimumBy)
30+
import Path.Extra ( toFilePathNoTrailingSep )
31+
import Path.Find ( findFiles )
32+
import Path.IO hiding ( findFiles )
33+
import qualified RIO.FilePath as FP
34+
import RIO.List ( (\\), intercalate, isSuffixOf, isPrefixOf )
35+
import RIO.List.Partial ( minimumBy )
3936
import Stack.BuildPlan
40-
import Stack.Config (getSnapshots,
41-
makeConcreteResolver)
37+
import Stack.Config ( getSnapshots, makeConcreteResolver )
4238
import Stack.Constants
39+
import Stack.Prelude
4340
import Stack.SourceMap
4441
import Stack.Types.Config
4542
import Stack.Types.Resolver
46-
import Stack.Types.Version
43+
import Stack.Types.Version ( stackMajorVersion )
4744

4845
-- | Type representing exceptions thrown by functions exported by the
4946
-- "Stack.Init" module.
@@ -397,16 +394,14 @@ renderStackYaml p ignoredPackages dupPackages =
397394
, ""
398395
]
399396

400-
footerHelp =
401-
let major = toMajorVersion $ C.mkVersion' Meta.version
402-
in commentHelp
397+
footerHelp = commentHelp
403398
[ "Control whether we use the GHC we find on the path"
404399
, "system-ghc: true"
405400
, ""
406401
, "Require a specific version of Stack, using version ranges"
407402
, "require-stack-version: -any # Default"
408403
, "require-stack-version: \""
409-
++ C.display (C.orLaterVersion major) ++ "\""
404+
++ C.display (C.orLaterVersion stackMajorVersion) ++ "\""
410405
, ""
411406
, "Override the architecture used by Stack, especially useful on Windows"
412407
, "arch: i386"

src/Stack/Types/Config.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ module Stack.Types.Config
188188
import Control.Monad.Writer ( Writer, tell )
189189
import Control.Monad.Trans.Except ( ExceptT )
190190
import Crypto.Hash ( hashWith, SHA1 (..) )
191-
import Stack.Prelude
192191
import Pantry.Internal.AesonExtended
193192
( ToJSON, toJSON, FromJSON, FromJSONKey (..), parseJSON
194193
, withText, object, (.=), (..:), (...:), (..:?), (..!=)
@@ -217,17 +216,17 @@ import Distribution.PackageDescription ( GenericPackageDescription )
217216
import qualified Distribution.PackageDescription as C
218217
import Distribution.System ( Platform, Arch )
219218
import qualified Distribution.Text
220-
import Distribution.Version ( anyVersion, mkVersion', mkVersion )
219+
import Distribution.Version ( anyVersion, mkVersion )
221220
import Generics.Deriving.Monoid ( memptydefault, mappenddefault )
222221
import Lens.Micro
223222
import Options.Applicative ( ReadM )
224223
import qualified Options.Applicative as OA
225224
import qualified Options.Applicative.Types as OA
226225
import Pantry.Internal ( Storage )
227226
import Path
228-
import qualified Paths_stack as Meta
229227
import qualified RIO.List as List
230228
import Stack.Constants
229+
import Stack.Prelude
231230
import Stack.Types.Compiler
232231
import Stack.Types.CompilerBuild
233232
import Stack.Types.Docker
@@ -238,6 +237,9 @@ import Stack.Types.Resolver
238237
import Stack.Types.SourceMap
239238
import Stack.Types.TemplateName
240239
import Stack.Types.Version
240+
( IntersectingVersionRange (..), VersionCheck (..)
241+
, VersionRange, stackVersion, versionRangeText
242+
)
241243
import qualified System.FilePath as FilePath
242244
import System.PosixCompat.Types ( UserID, GroupID, FileMode )
243245
import RIO.Process ( ProcessContext, HasProcessContext (..) )
@@ -305,7 +307,7 @@ instance Exception ConfigException where
305307
displayException (BadStackVersionException requiredRange) = concat
306308
[ "Error: [S-1641]\n"
307309
, "The version of Stack you are using ("
308-
, show (mkVersion' Meta.version)
310+
, show stackVersion
309311
, ") is outside the required\n"
310312
,"version range specified in stack.yaml ("
311313
, T.unpack (versionRangeText requiredRange)

0 commit comments

Comments
 (0)