on master help sign in
Merge pull request #694 from obsidiansystems/ts-duplicate-pkgs

Tweaks to duplicate package handling

commita9bd46401c3f7f51d438f28bf03a90050c047a2c authorElliot Cameron <3noch@users.noreply.github.com> dateThu 9 Apr 2020, 15:51 (7 years ago) parenta02f5eac3ad610
1 file changed+10−5
lib/command/src/Obelisk/Command/Run.hs+10−5
lib/command/src/Obelisk/Command/Run.hs+10−5
@@ -279,14 +279,19 @@ parsePackagesOrFail dirs = do
279279 | _cabalPackageInfo_buildable packageInfo -> Right packageInfo
280280 _ -> Left dir
281281
282− let packagesByName = Map.fromListWith (<>) [(_cabalPackageInfo_packageName p, p NE.:| []) | p <- packageInfos']
282+ -- Sort duplicate packages such that we prefer shorter paths, but fall back to alphabetical ordering.
283+ let packagesByName = Map.map (NE.sortBy $ comparing $ \p -> let n = _cabalPackageInfo_packageFile p in (length n, n))
284+ $ Map.fromListWith (<>) [(_cabalPackageInfo_packageName p, p NE.:| []) | p <- packageInfos']
283285 unambiguous <- ifor packagesByName $ \packageName ps -> case ps of
284286 p NE.:| [] -> pure p -- No ambiguity here
285287 p NE.:| _ -> do
286− putLog Warning $ T.pack $
287− "Packages named '" <> T.unpack packageName <> "' appear in " <> show (length ps) <> " different locations: "
288− <> intercalate ", " (map _cabalPackageInfo_packageFile $ toList ps)
289− <> "; Picking " <> _cabalPackageInfo_packageFile p
288+ let chosenText = " [Chosen] "
289+ prefix p'
290+ | _cabalPackageInfo_packageFile p' == _cabalPackageInfo_packageFile p = chosenText
291+ | otherwise = T.map (const ' ') chosenText
292+ putLog Warning $ T.unlines $
293+ "Packages named '" <> packageName <> "' appear in " <> T.pack (show $ length ps) <> " different locations: "
294+ : map (\p' -> prefix p' <> T.pack (_cabalPackageInfo_packageFile p')) (toList ps)
290295 pure p
291296
292297 packageInfos <- case NE.nonEmpty $ toList unambiguous of