on master help sign in
Make choosing which duplicate package to use deterministic
4c8dcedTom Smalley
lib/command/src/Obelisk/Command/Run.hs+3−1
@@ -279,7 +279,9 @@ parsePackagesOrFail dirs = do
279 | _cabalPackageInfo_buildable packageInfo -> Right packageInfo
279 | _cabalPackageInfo_buildable packageInfo -> Right packageInfo
280 _ -> Left dir
280 _ -> Left dir
281
281
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))
282− let packagesByName = Map.fromListWith (<>) [(_cabalPackageInfo_packageName p, p NE.:| []) | p <- packageInfos']
284+ $ Map.fromListWith (<>) [(_cabalPackageInfo_packageName p, p NE.:| []) | p <- packageInfos']
283 unambiguous <- ifor packagesByName $ \packageName ps -> case ps of
285 unambiguous <- ifor packagesByName $ \packageName ps -> case ps of
284 p NE.:| [] -> pure p -- No ambiguity here
286 p NE.:| [] -> pure p -- No ambiguity here
285 p NE.:| _ -> do
287 p NE.:| _ -> do