packages feed

gpah-0.0.1: src/Generics/GPAH/Date/Analyze.hs

module Generics.GPAH.Date.Analyze where

import Generics.GPAH.Utils
import Generics.GPAH.Date.Base
import qualified Generics.GPAH.Base
import qualified Generics.GPAH.Hackage.Base as Hackage

import Data.List
import qualified Data.Map as M
import Data.Function (on)
import Data.Monoid


yearUpdatesToLib :: [String] -> [(Int, String)] -> M.Map Int Int
yearUpdatesToLib favLibs cLog = foldl (\ acc (year, pkg) -> if pkg `elem` favLibs 
                                                           then M.insertWith (+) year 1 acc
                                                           else acc) 
                                M.empty cLog
yearNewToLib favLibs cLog = yearUpdatesToLib favLibs (nubBy ((==) `on` snd) cLog)


cleanLog :: [[String]] -> [(Int, String)]
cleanLog = map cleanLog' where
  --cleanLog' [String] -> (PackageName, Year, Month)
  cleanLog' [_, _, _, _, _, y, _, pkg, _]  = (read y :: Int, pkg)
                                      

analyzeHackageLog :: String -> Generics.GPAH.Base.Analysis -> Generics.GPAH.Base.Analysis
analyzeHackageLog contents a =   let hacTime = unwords $ take 6 $ words $ last $ lines contents
                                     log = map words $ lines contents :: [[String]]
                                     cLog = cleanLog log
                                     pus = M.findWithDefault [] "syb" $ (Hackage.reverseDeps . Generics.GPAH.Base.hacAnalysis) a -- packages that use syb
                                     puu = M.findWithDefault [] "uniplate" $ (Hackage.reverseDeps . Generics.GPAH.Base.hacAnalysis) a -- packages that use uniplate
                                     pud = M.findWithDefault [] "derive" $ (Hackage.reverseDeps . Generics.GPAH.Base.hacAnalysis) a -- packages that use uniplate
                                 -- construct a new base analysis and adds the date analysis
                                 in mempty {Generics.GPAH.Base.dteAnalysis = Analysis 
                                                               (yearUpdatesToLib pus cLog) 
                                                               (yearUpdatesToLib puu cLog) 
                                                               (yearNewToLib pus cLog) 
                                                               (yearNewToLib puu cLog) 
                                                               hacTime
                                                               (yearUpdatesToLib pud cLog)
                                                               (yearNewToLib pud cLog)
                                           }