@@ -29,6 +29,7 @@ import Distribution.Package
2929import Distribution.PackageDescription
3030import Distribution.PackageDescription.Configuration
3131import Distribution.Pretty (prettyShow )
32+ import Distribution.Types.Version (Version )
3233import Distribution.Utils.ShortText (fromShortText )
3334
3435import Control.Concurrent
@@ -89,17 +90,33 @@ data PackageItem = PackageItem {
8990 itemLastUpload :: ! UTCTime ,
9091 -- Hotness = recent downloads + stars + 2 * no rev deps
9192 itemHotness :: ! Float ,
92- -- Last version
93- itemLastVersion :: ! String
93+ -- Reference version (non-deprecated highest numbered version)
94+ itemReferenceVersion :: ! String
9495}
9596
9697instance MemSize PackageItem where
9798 memSize (PackageItem a b c d e f g h i j k l _m n o) = memSize11 a b c d e f g h i j (k, l, n, o)
9899
99100
100101emptyPackageItem :: PackageName -> PackageItem
101- emptyPackageItem pkg = PackageItem pkg Set. empty Nothing " " []
102- 0 0 0 False 0 0 0 (UTCTime (toEnum 0 ) 0 ) 0 " "
102+ emptyPackageItem pkg =
103+ PackageItem {
104+ itemName = pkg,
105+ itemTags = Set. empty,
106+ itemDeprecated = Nothing ,
107+ itemDesc = " " ,
108+ itemMaintainer = [] ,
109+ itemVotes = 0 ,
110+ itemDownloads = 0 ,
111+ itemRevDepsCount = 0 ,
112+ itemHasLibrary = False ,
113+ itemNumExecutables = 0 ,
114+ itemNumTests = 0 ,
115+ itemNumBenchmarks = 0 ,
116+ itemLastUpload = UTCTime (toEnum 0 ) 0 ,
117+ itemHotness = 0 ,
118+ itemReferenceVersion = " "
119+ }
103120
104121
105122initListFeature :: ServerEnv
@@ -134,10 +151,14 @@ initListFeature _env = do
134151
135152 registerHookJust packageChangeHook isPackageAdd $ \ pkg -> do
136153 let pkgname = packageName . packageId $ pkg
137- modifyItem pkgname $ \ x -> x
138- {itemLastUpload = fst (pkgOriginalUploadInfo pkg)
139- ,itemLastVersion = prettyShow $ pkgVersion $ pkgInfoId pkg
140- }
154+ prefsinfo <- queryGetPreferredInfo pkgname
155+ index <- queryGetPackageIndex
156+ let allVersions = packageVersion <$> PackageIndex. lookupPackageName index pkgname
157+ modifyItem pkgname $ \ x ->
158+ updateReferenceVersion prefsinfo allVersions $
159+ x
160+ { itemLastUpload = fst (pkgOriginalUploadInfo pkg)
161+ }
141162 runHook_ itemUpdate (Set. singleton pkgname)
142163
143164 registerHook groupChangedHook $ \ (gd,_,_,_,_) ->
@@ -174,6 +195,11 @@ initListFeature _env = do
174195 modifyItem pkgname (updateDeprecation mpkgs)
175196 runHook_ itemUpdate (Set. singleton pkgname)
176197
198+ registerHook updatePreferredHook $ \ (pkgname, prefsinfo) -> do
199+ index <- queryGetPackageIndex
200+ let allVersions = packageVersion <$> PackageIndex. lookupPackageName index pkgname
201+ modifyItem pkgname $ updateReferenceVersion prefsinfo allVersions
202+
177203 return feature
178204
179205
@@ -265,8 +291,9 @@ listFeature CoreFeature{..}
265291 votes <- pkgNumScore pkgname
266292 deprs <- queryGetDeprecatedFor pkgname
267293 maintainers <- queryUserGroup (maintainersGroup pkgname)
294+ prefsinfo <- queryGetPreferredInfo pkgname
268295
269- return $ (,) pkgname $ (updateDescriptionItem desc $ emptyPackageItem pkgname) {
296+ return $ (,) pkgname . updateReferenceVersion prefsinfo [pkgVersion (pkgInfoId pkg)] $ (updateDescriptionItem desc $ emptyPackageItem pkgname) {
270297 itemTags = tags
271298 , itemMaintainer = map (userIdToName users) (UserIdSet. toList maintainers)
272299 , itemDeprecated = deprs
@@ -275,7 +302,6 @@ listFeature CoreFeature{..}
275302 , itemLastUpload = fst (pkgOriginalUploadInfo pkg)
276303 , itemRevDepsCount = intRevDirectCount
277304 , itemHotness = votes + fromIntegral (cmFind pkgname downs) + fromIntegral intRevDirectCount * 2
278- , itemLastVersion = prettyShow $ pkgVersion $ pkgInfoId pkg
279305 }
280306
281307 ------------------------------
@@ -329,6 +355,17 @@ updateDeprecation pkgs item =
329355 itemDeprecated = pkgs
330356 }
331357
358+ updateReferenceVersion :: PreferredInfo -> [Version ] -> PackageItem -> PackageItem
359+ updateReferenceVersion prefsinfo allVersions item =
360+ item {
361+ itemReferenceVersion =
362+ case nonDeprecatedVersion of
363+ [] -> " "
364+ xs -> prettyShow $ maximum xs
365+ }
366+ where
367+ nonDeprecatedVersion = filter (`notElem` deprecatedVersions prefsinfo) allVersions
368+
332369updateReverseItem :: Int -> PackageItem -> PackageItem
333370updateReverseItem revDirectCount item =
334371 item {
0 commit comments