@@ -34,9 +34,10 @@ import Distribution.Package
3434import Distribution.PackageDescription
3535import Distribution.PackageDescription.Configuration
3636import Distribution.Utils.ShortText (fromShortText )
37- import Distribution.Simple.Utils (safeLast )
3837
3938import Control.Concurrent
39+ import qualified Data.List.NonEmpty as NE
40+ import Data.List.NonEmpty (NonEmpty )
4041import Data.Maybe (mapMaybe )
4142import Data.Map (Map )
4243import qualified Data.Map as Map
@@ -233,9 +234,9 @@ listFeature CoreFeature{..}
233234 False -> do
234235 index <- queryGetPackageIndex
235236 let pkgs = PackageIndex. lookupPackageName index pkgname
236- case pkgs of
237- [] -> return () -- this shouldn't happen
238- _ -> modifyMemState itemCache . uncurry Map. insert =<< constructItem pkgs
237+ case NE. nonEmpty pkgs of
238+ Nothing -> return () -- this shouldn't happen
239+ Just ne -> modifyMemState itemCache . uncurry Map. insert =<< constructItem ne
239240
240241 updateDesc pkgname = do
241242 index <- queryGetPackageIndex
@@ -256,13 +257,14 @@ listFeature CoreFeature{..}
256257 constructItemIndex :: IO (Map PackageName PackageItem )
257258 constructItemIndex = do
258259 index <- queryGetPackageIndex
259- items <- mapM constructItem $ PackageIndex. allPackagesByName index
260- return $ Map. fromList items
260+ let byName = PackageIndex. allPackagesByNameNE index
261+ mPkgInfos <- traverse (mapM constructItem) (NE. nonEmpty byName)
262+ pure $ foldMap (Map. fromList . NE. toList) mPkgInfos
261263
262- constructItem :: [ PkgInfo ] -> IO (PackageName , PackageItem )
264+ constructItem :: NonEmpty PkgInfo -> IO (PackageName , PackageItem )
263265 constructItem pkgs = do
264266 let pkgname = packageName pkg
265- pkg = last pkgs
267+ pkg = NE. last pkgs
266268 -- [reverse index disabled] revCount <- query . GetReverseCount $ pkgname
267269 users <- queryGetUserDb
268270 tags <- queryTagsForPackage pkgname
@@ -271,7 +273,7 @@ listFeature CoreFeature{..}
271273 deprs <- queryGetDeprecatedFor pkgname
272274 maintainers <- queryUserGroup (maintainersGroup pkgname)
273275 packageR <- rankPackage versions (cmFind pkgname downs)
274- (UserIdSet. size maintainers) documentation tar env pkgs (safeLast pkgs)
276+ (UserIdSet. size maintainers) documentation tar env pkgs
275277
276278 return $ (,) pkgname $ (updateDescriptionItem (pkgDesc pkg) $ emptyPackageItem pkgname) {
277279 itemTags = tags
0 commit comments