@@ -14,8 +14,8 @@ import Distribution.Server.Features.Core
1414import  Distribution.Server.Features.PreferredVersions 
1515import  Distribution.Server.Features.PreferredVersions.State  (PreferredVersions )
1616import  qualified  Distribution.Server.Packages.PackageIndex  as  PackageIndex 
17- import  Distribution.Server.Packages.PackageIndex  (PackageIndex , packageNames , allPackagesByName )
18- import  Distribution.Server.Packages.Types  (PkgInfo ,  pkgInfoId )
17+ import  Distribution.Server.Packages.PackageIndex  (PackageIndex , packageNames , allPackagesByNameNE )
18+ import  Distribution.Server.Packages.Types  (PkgInfo )
1919import  Distribution.Server.Features.ReverseDependencies.State 
2020import  Distribution.Package 
2121import  Distribution.Text  (display )
@@ -26,6 +26,7 @@ import Data.Aeson
2626import  Data.ByteString.Lazy  (ByteString )
2727import  Data.Containers.ListUtils  (nubOrd )
2828import  Data.List  (mapAccumL , sortOn )
29+ import  qualified  Data.List.NonEmpty  as  NE 
2930import  Data.Maybe  (catMaybes , fromJust )
3031import  Data.Function  (fix )
3132import  qualified  Data.Bimap  as  Bimap 
@@ -35,21 +36,21 @@ import qualified Data.Map as Map
3536import            Data.Set  (Set )
3637import  qualified  Data.Set  as  Set 
3738import  GHC.Generics  hiding  (packageName )
38- import  GHC.Stack 
3939
4040data  ReverseFeature  =  ReverseFeature  { 
4141    reverseFeatureInterface  ::  HackageFeature ,
4242
4343    reverseResource  ::  ReverseResource ,
4444
45-     reverseHook  ::  Hook  [PackageId ] () ,
45+     reverseHook  ::  Hook  [NE. NonEmpty   PkgInfo ] () ,
4646
4747    queryReverseDeps  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ([PackageName ], [PackageName ]),
4848    revPackageId  ::  forall  m .  (MonadCatch  m , MonadIO  m ) =>  PackageId  ->  m  ReverseDisplay ,
4949    revPackageName  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseDisplay ,
5050    renderReverseRecent  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  ReverseDisplay  ->  m  ReversePageRender ,
5151    renderReverseOld  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  ReverseDisplay  ->  m  ReversePageRender ,
5252    revPackageFlat  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  [(PackageName , Int 
53+     revDirectCount  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  Int 
5354    revPackageStats  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseCount ,
5455    revCountForAllPackages  ::  forall  m .  (MonadIO  m , MonadCatch  m ) =>  m  [(PackageName , ReverseCount )],
5556    revJSON  ::  forall  m .  (MonadIO  m , MonadThrow  m ) =>  m  ByteString ,
@@ -95,9 +96,9 @@ initReverseFeature _ = do
9596            Just  pkginfo ->  do 
9697                index <-  queryGetPackageIndex
9798                r <-  readMemState memState
98-                 added <-  addPackage (packageName pkgid) (getAllDependencies  pkginfo index ) r
99+                 added <-  addPackage index  (packageName pkgid) (getDepNames  pkginfo) r
99100                writeMemState memState added
100-                 runHook_ updateReverse [pkgid ]
101+                 runHook_ updateReverse [pure  pkginfo ]
101102
102103      return  feature
103104
@@ -128,7 +129,7 @@ instance ToJSON Edge
128129reverseFeature  ::  IO PackageIndex  PkgInfo )
129130               ->  IO PreferredVersions 
130131               ->  MemState  ReverseIndex 
131-                ->  Hook  [PackageId ] () 
132+                ->  Hook  [NE. NonEmpty   PkgInfo ] () 
132133               ->  ReverseFeature 
133134
134135reverseFeature queryGetPackageIndex
@@ -153,8 +154,7 @@ reverseFeature queryGetPackageIndex
153154    initReverseIndex =  do 
154155            index <-  liftIO queryGetPackageIndex
155156            --  We build the proper index earlier, this just fires the reverse hooks
156-             let  allPackages =  map  pkgInfoId $  concat  $  allPackagesByName index
157-             runHook_ reverseHook allPackages
157+             runHook_ reverseHook $  allPackagesByNameNE index
158158
159159
160160    reverseResource =  fix $  \ r ->  ReverseResource 
@@ -187,14 +187,14 @@ reverseFeature queryGetPackageIndex
187187        let  indirect =  Set. difference rdepsall rdeps
188188        return  (Set. toList rdeps, Set. toList indirect)
189189
190-     revPackageId  ::  (HasCallStack ,  MonadCatch  m , MonadIO  m ) =>  PackageId  ->  m  ReverseDisplay 
190+     revPackageId  ::  (MonadCatch  m , MonadIO  m ) =>  PackageId  ->  m  ReverseDisplay 
191191    revPackageId pkgid =  do 
192192        dispInfo <-  revDisplayInfo
193193        pkgIndex <-  liftIO queryGetPackageIndex
194194        revs <-  queryReverseIndex
195195        perVersionReverse dispInfo pkgIndex revs pkgid
196196
197-     revPackageName  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseDisplay 
197+     revPackageName  ::  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseDisplay 
198198    revPackageName pkgname =  do 
199199        dispInfo <-  revDisplayInfo
200200        pkgIndex <-  liftIO queryGetPackageIndex
@@ -203,7 +203,7 @@ reverseFeature queryGetPackageIndex
203203
204204    revJSON  ::  (MonadIO  m , MonadThrow  m ) =>  m  ByteString 
205205    revJSON =  do 
206-         ReverseIndex  revdeps nodemap <-  queryReverseIndex
206+         ReverseIndex  revdeps nodemap _depmap  <-  queryReverseIndex
207207        let  assoc =  takeWhile  (\ (a,_) ->  a <  Bimap. size nodemap) $  Arr. assocs .  Gr. transposeG $  revdeps
208208            nodeToString node =  unPackageName (nodemap Bimap. !>
209209            --  nodes = map (uncurry Node) $ map (\n -> (fst n, nodeToString (fst n))) assoc
@@ -216,7 +216,7 @@ reverseFeature queryGetPackageIndex
216216        prefs <-  liftIO queryGetPreferredVersions
217217        return  $  getDisplayInfo prefs pkgIndex
218218
219-     renderReverseWith  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  PackageName  ->  ReverseDisplay  ->  (Maybe VersionStatus  ->  Bool ->  m  ReversePageRender 
219+     renderReverseWith  ::  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  ReverseDisplay  ->  (Maybe VersionStatus  ->  Bool ->  m  ReversePageRender 
220220    renderReverseWith pkg rev filterFunc =  do 
221221        let  rev' =  map  fst  $  Map. toList rev
222222        directCounts <-  mapM  revDirectCount (pkg: rev')
@@ -244,20 +244,20 @@ reverseFeature queryGetPackageIndex
244244
245245    --  -- This could also differentiate between direct and indirect dependencies
246246    --  -- with a bit more calculation.
247-     revPackageFlat  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  [(PackageName , Int 
247+     revPackageFlat  ::  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  [(PackageName , Int 
248248    revPackageFlat pkgname =  do 
249249        memState <-  readMemState reverseMemState
250250        deps <-  getDependenciesFlat pkgname memState
251251        let  depList =  Set. toList deps
252252        counts <-  mapM  (`getTotalCount`  memState) depList
253253        return  $  zip  depList counts
254254
255-     revPackageStats  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseCount 
255+     revPackageStats  ::  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  ReverseCount 
256256    revPackageStats pkgname =  do 
257257      (direct, transitive) <-  getReverseCount pkgname =<<  readMemState reverseMemState
258258      return  $  ReverseCount  direct transitive
259259
260-     revDirectCount  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  Int 
260+     revDirectCount  ::  (MonadIO  m , MonadCatch  m ) =>  PackageName  ->  m  Int 
261261    revDirectCount pkgname =  do 
262262      getDirectCount pkgname =<<  readMemState reverseMemState
263263
@@ -270,7 +270,7 @@ reverseFeature queryGetPackageIndex
270270    --  broken packages.
271271    -- 
272272    --  The returned list is sorted ascendingly on directCount (see ReverseCount).
273-     revCountForAllPackages  ::  (HasCallStack ,  MonadIO  m , MonadCatch  m ) =>  m  [(PackageName , ReverseCount )]
273+     revCountForAllPackages  ::  (MonadIO  m , MonadCatch  m ) =>  m  [(PackageName , ReverseCount )]
274274    revCountForAllPackages =  do 
275275        index <-  liftIO queryGetPackageIndex
276276        let  pkgnames =  packageNames index
@@ -279,7 +279,7 @@ reverseFeature queryGetPackageIndex
279279
280280    revForEachVersion  ::  (MonadThrow  m , MonadIO  m ) =>  PackageName  ->  m  (Map. MapVersion  (Set  PackageIdentifier ))
281281    revForEachVersion pkg =  do 
282-       ReverseIndex  revs nodemap <-  readMemState reverseMemState
282+       ReverseIndex  revs nodemap depmap  <-  readMemState reverseMemState
283283      index <-  liftIO queryGetPackageIndex
284284      nodeid <-  Bimap. lookup  pkg nodemap
285285      revDepNames <-  mapM  (`Bimap.lookupR`  nodemap) (Set. toList $  suc revs nodeid)
@@ -289,5 +289,5 @@ reverseFeature queryGetPackageIndex
289289          revDepVersions =  do 
290290            x <-  nubOrd revDepNames
291291            pkginfo <-  PackageIndex. lookupPackageName index pkg
292-             pure  (packageVersion pkginfo, dependsOnPkg index (packageId pkginfo) x)
292+             pure  (packageVersion pkginfo, dependsOnPkg index (packageId pkginfo) x depmap )
293293      pure  $  Map. fromListWith Set. union revDepVersions
0 commit comments