@@ -203,10 +203,11 @@ constructPlan baseConfigOpts0 localDumpPkgs loadPackage0 sourceMap installedMap
203203 tasks = M. fromList $ mapMaybe toTask adrs
204204 takeSubset =
205205 case boptsCLIBuildSubset $ bcoBuildOptsCLI baseConfigOpts0 of
206- BSAll -> id
207- BSOnlySnapshot -> stripLocals
208- BSOnlyDependencies -> stripNonDeps (M. keysSet $ smDeps sourceMap)
209- return $ takeSubset Plan
206+ BSAll -> pure
207+ BSOnlySnapshot -> pure . stripLocals
208+ BSOnlyDependencies -> pure . stripNonDeps (M. keysSet $ smDeps sourceMap)
209+ BSOnlyLocals -> errorOnSnapshot
210+ takeSubset Plan
210211 { planTasks = tasks
211212 , planFinals = M. fromList finals
212213 , planUnregisterLocal = mkUnregisterLocal tasks dirtyReason localDumpPkgs initialBuildSteps
@@ -267,6 +268,33 @@ constructPlan baseConfigOpts0 localDumpPkgs loadPackage0 sourceMap installedMap
267268 return $ PSFilePath lp
268269 return $ pPackages <> deps
269270
271+ -- | Throw an exception if there are any snapshot packages in the plan.
272+ errorOnSnapshot :: Plan -> RIO env Plan
273+ errorOnSnapshot plan@ (Plan tasks _finals _unregister installExes) = do
274+ let snapTasks = Map. keys $ Map. filter (\ t -> taskLocation t == Snap ) tasks
275+ let snapExes = Map. keys $ Map. filter (== Snap ) installExes
276+ unless (null snapTasks && null snapExes) $ throwIO $
277+ NotOnlyLocal snapTasks snapExes
278+ pure plan
279+
280+ data NotOnlyLocal = NotOnlyLocal [PackageName ] [Text ]
281+
282+ instance Show NotOnlyLocal where
283+ show (NotOnlyLocal packages exes) = concat
284+ [ " Specified only-locals, but I need to build snapshot contents:\n "
285+ , if null packages then " " else concat
286+ [ " Packages: "
287+ , intercalate " , " (map packageNameString packages)
288+ , " \n "
289+ ]
290+ , if null exes then " " else concat
291+ [ " Executables: "
292+ , intercalate " , " (map T. unpack exes)
293+ , " \n "
294+ ]
295+ ]
296+ instance Exception NotOnlyLocal
297+
270298-- | State to be maintained during the calculation of local packages
271299-- to unregister.
272300data UnregisterState = UnregisterState
0 commit comments