on master help sign in
command: Warn and disambiguate when multiple packages have same name
commita5ba211e3e824c0fe9ca01adb12b5ad3f0c2cb99 authorElliot Cameron <eacameron@gmail.com> dateMon 10 Feb 2020, 16:40 (7 years ago) parentcb654e4
1 file changed+12−1
lib/command/src/Obelisk/Command/Run.hs+12−1
lib/command/src/Obelisk/Command/Run.hs+12−1
@@ -8,6 +8,7 @@ module Obelisk.Command.Run where
88
99import Control.Arrow ((&&&))
1010import Control.Exception (Exception, bracket)
11+import Control.Lens (ifor)
1112import Control.Monad (filterM, unless)
1213import Control.Monad.Except (runExceptT, throwError)
1314import Control.Monad.IO.Class (liftIO)
@@ -245,7 +246,17 @@ parsePackagesOrFail dirs = do
245246 | _cabalPackageInfo_buildable packageInfo -> Right packageInfo
246247 _ -> Left dir
247248
248− packageInfos <- case NE.nonEmpty packageInfos' of
249+ let packagesByName = Map.fromListWith (<>) [(_cabalPackageInfo_packageName p, p NE.:| []) | p <- packageInfos']
250+ unambiguous <- ifor packagesByName $ \packageName ps -> case ps of
251+ p NE.:| [] -> pure p -- No ambiguity here
252+ p NE.:| _ -> do
253+ putLog Warning $ T.pack $
254+ "Packages named '" <> T.unpack packageName <> "' appear in " <> show (length ps) <> " different locations: "
255+ <> intercalate ", " (map _cabalPackageInfo_packageFile $ toList ps)
256+ <> "; Picking " <> _cabalPackageInfo_packageFile p
257+ pure p
258+
259+ packageInfos <- case NE.nonEmpty $ toList unambiguous of
249260 Nothing -> failWith $ T.pack $ "No valid, buildable packages found in " <> intercalate ", " dirs
250261 Just xs -> pure xs
251262