@@ -16,12 +16,12 @@ import Distribution.Client.CmdErrorMessages
16
16
import Distribution.Client.ProjectOrchestration
17
17
( ProjectBaseContext (.. ), CurrentCommand (.. ), establishProjectBaseContext , establishProjectBaseContextWithRoot )
18
18
import Distribution.Client.NixStyleOptions
19
- ( NixStyleFlags (.. ), defaultNixStyleFlags )
19
+ ( NixStyleFlags (.. ), defaultNixStyleFlags )
20
20
import Distribution.Client.TargetSelector
21
21
( TargetSelector (.. ), ComponentKind
22
22
, readTargetSelectors , reportTargetSelectorProblems )
23
23
import Distribution.Client.Setup
24
- ( GlobalFlags (.. ) )
24
+ ( ConfigFlags ( .. ), GlobalFlags (.. ), liftOptions )
25
25
import Distribution.Solver.Types.SourcePackage
26
26
( SourcePackage (.. ) )
27
27
import Distribution.Client.Types
@@ -31,23 +31,21 @@ import Distribution.Client.DistDirLayout
31
31
import Distribution.Client.ProjectConfig
32
32
( ProjectConfig , withProjectOrGlobalConfig , commandLineFlagsToProjectConfig , projectConfigConfigFile , projectConfigShared )
33
33
import Distribution.Client.ProjectFlags
34
- ( ProjectFlags (.. ), defaultProjectFlags , projectFlagsOptions )
34
+ ( ProjectFlags (.. ), projectFlagsOptions )
35
35
36
- import Distribution.Compat.Lens
37
- ( _1 , _2 )
38
36
import Distribution.Package
39
37
( Package (packageId ) )
40
38
import Distribution.PackageDescription.Configuration
41
39
( flattenPackageDescription )
42
40
import Distribution.ReadE
43
41
( succeedReadE )
44
42
import Distribution.Simple.Command
45
- ( CommandUI (.. ), OptionField , option , reqArg , liftOptionL , ShowOrParseArgs )
43
+ ( CommandUI (.. ), OptionField , option , reqArg , ShowOrParseArgs )
46
44
import Distribution.Simple.PreProcess
47
45
( knownSuffixHandlers )
48
46
import Distribution.Simple.Setup
49
47
( Flag (.. ), toFlag , fromFlagOrDefault , flagToList , flagToMaybe
50
- , optionVerbosity , optionDistPref , trueArg , configVerbosity , configDistPref
48
+ , optionVerbosity , optionDistPref , trueArg
51
49
)
52
50
import Distribution.Simple.SrcDist
53
51
( listPackageSourcesWithDie )
@@ -75,7 +73,7 @@ import System.FilePath
75
73
-- Command
76
74
-------------------------------------------------------------------------------
77
75
78
- sdistCommand :: CommandUI (ProjectFlags , SdistFlags )
76
+ sdistCommand :: CommandUI (NixStyleFlags SdistFlags )
79
77
sdistCommand = CommandUI
80
78
{ commandName = " v2-sdist"
81
79
, commandSynopsis = " Generate a source distribution file (.tar.gz)."
@@ -84,60 +82,63 @@ sdistCommand = CommandUI
84
82
, commandDescription = Just $ \ _ -> wrapText
85
83
" Generates tarballs of project packages suitable for upload to Hackage."
86
84
, commandNotes = Nothing
87
- , commandDefaultFlags = (defaultProjectFlags, defaultSdistFlags)
88
- , commandOptions = \ showOrParseArgs ->
89
- map (liftOptionL _1) (projectFlagsOptions showOrParseArgs) ++
90
- map (liftOptionL _2) (sdistOptions showOrParseArgs)
85
+ , commandDefaultFlags = defaultNixStyleFlags defaultSdistFlags
86
+ , commandOptions = sdistOptions
91
87
}
92
88
93
89
-------------------------------------------------------------------------------
94
90
-- Flags
95
91
-------------------------------------------------------------------------------
96
92
97
93
data SdistFlags = SdistFlags
98
- { sdistVerbosity :: Flag Verbosity
99
- , sdistDistDir :: Flag FilePath
100
- , sdistListSources :: Flag Bool
94
+ { sdistListSources :: Flag Bool
101
95
, sdistNulSeparated :: Flag Bool
102
96
, sdistOutputPath :: Flag FilePath
103
97
}
104
98
105
99
defaultSdistFlags :: SdistFlags
106
100
defaultSdistFlags = SdistFlags
107
- { sdistVerbosity = toFlag normal
108
- , sdistDistDir = mempty
109
- , sdistListSources = toFlag False
101
+ { sdistListSources = toFlag False
110
102
, sdistNulSeparated = toFlag False
111
103
, sdistOutputPath = mempty
112
104
}
113
105
114
- sdistOptions :: ShowOrParseArgs -> [OptionField SdistFlags ]
106
+ sdistOptions :: ShowOrParseArgs -> [OptionField ( NixStyleFlags SdistFlags ) ]
115
107
sdistOptions showOrParseArgs =
116
108
[ optionVerbosity
117
- sdistVerbosity (\ v flags -> flags { sdistVerbosity = v })
109
+ (configVerbosity . configFlags)
110
+ (\ v flags -> flags { configFlags = (configFlags flags) { configVerbosity = v } })
118
111
, optionDistPref
119
- sdistDistDir (\ dd flags -> flags { sdistDistDir = dd })
112
+ (configDistPref . configFlags)
113
+ (\ dd flags -> flags { configFlags = (configFlags flags) { configDistPref = dd } })
120
114
showOrParseArgs
121
- , option [' l' ] [" list-only" ]
115
+ ] ++ liftOptions projectFlags
116
+ (\ x flags -> flags { projectFlags = x })
117
+ (projectFlagsOptions showOrParseArgs)
118
+ ++
119
+ [ option [' l' ] [" list-only" ]
122
120
" Just list the sources, do not make a tarball"
123
- sdistListSources (\ v flags -> flags { sdistListSources = v })
121
+ (sdistListSources . extraFlags)
122
+ (\ v flags -> flags { extraFlags = (extraFlags flags) { sdistListSources = v } })
124
123
trueArg
125
124
, option [] [" null-sep" ]
126
125
" Separate the source files with NUL bytes rather than newlines."
127
- sdistNulSeparated (\ v flags -> flags { sdistNulSeparated = v })
126
+ (sdistNulSeparated . extraFlags)
127
+ (\ v flags -> flags { extraFlags = (extraFlags flags) { sdistNulSeparated = v } })
128
128
trueArg
129
129
, option [' o' ] [" output-directory" , " outputdir" ]
130
130
" Choose the output directory of this command. '-' sends all output to stdout"
131
- sdistOutputPath (\ o flags -> flags { sdistOutputPath = o })
131
+ (sdistOutputPath . extraFlags)
132
+ (\ o flags -> flags { extraFlags = (extraFlags flags) { sdistOutputPath = o } })
132
133
(reqArg " PATH" (succeedReadE Flag ) flagToList)
133
134
]
134
135
135
136
-------------------------------------------------------------------------------
136
137
-- Action
137
138
-------------------------------------------------------------------------------
138
139
139
- sdistAction :: ( ProjectFlags , SdistFlags ) -> [String ] -> GlobalFlags -> IO ()
140
- sdistAction ( ProjectFlags {.. }, SdistFlags { .. }) targetStrings globalFlags = do
140
+ sdistAction :: NixStyleFlags SdistFlags -> [String ] -> GlobalFlags -> IO ()
141
+ sdistAction flags @ NixStyleFlags {.. } targetStrings globalFlags = do
141
142
(baseCtx, distDirLayout) <- withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag withProject withoutProject
142
143
143
144
let localPkgs = localPackages baseCtx
@@ -183,22 +184,14 @@ sdistAction (ProjectFlags{..}, SdistFlags{..}) targetStrings globalFlags = do
183
184
| otherwise ->
184
185
traverse_ (\ pkg -> packageToSdist verbosity (distProjectRootDirectory distDirLayout) format (outputPath pkg) pkg) pkgs
185
186
where
186
- verbosity = fromFlagOrDefault normal sdistVerbosity
187
- listSources = fromFlagOrDefault False sdistListSources
188
- nulSeparated = fromFlagOrDefault False sdistNulSeparated
189
- mOutputPath = flagToMaybe sdistOutputPath
190
- ignoreProject = flagIgnoreProject
187
+ verbosity = fromFlagOrDefault normal $ configVerbosity configFlags
188
+ listSources = fromFlagOrDefault False $ sdistListSources extraFlags
189
+ nulSeparated = fromFlagOrDefault False $ sdistNulSeparated extraFlags
190
+ mOutputPath = flagToMaybe $ sdistOutputPath extraFlags
191
+ ignoreProject = flagIgnoreProject projectFlags
191
192
192
193
prjConfig :: ProjectConfig
193
- prjConfig = commandLineFlagsToProjectConfig
194
- globalFlags
195
- (defaultNixStyleFlags () )
196
- { configFlags = (configFlags $ defaultNixStyleFlags () )
197
- { configVerbosity = sdistVerbosity
198
- , configDistPref = sdistDistDir
199
- }
200
- }
201
- mempty
194
+ prjConfig = commandLineFlagsToProjectConfig globalFlags flags mempty
202
195
203
196
globalConfigFlag = projectConfigConfigFile (projectConfigShared prjConfig)
204
197
0 commit comments