Also print Statistics for Squeeze
authorJoachim Breitner <mail@joachim-breitner.de>
Sat, 9 Oct 2010 09:21:20 +0000 (09:21 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Sat, 9 Oct 2010 09:21:20 +0000 (09:21 +0000)
HTMLOutput.hs
Main.hs
Utils.hs
runhpvt.sh

index 43eb95e..eddb193 100644 (file)
@@ -7,7 +7,7 @@ import System.Time
 
 import Types
 
-outputHTML :: (Show k, Show t) =>  M.Map k (Maybe Version, Maybe Version) -> t -> String
+outputHTML :: (Show k, Show t) =>  M.Map k (Maybe Version, Maybe Version, Maybe Version) -> t -> String
 outputHTML map time = showHtml $ page time << mkTable map
 
 myTitle = "Haskell Package Version Tracker"
@@ -20,12 +20,16 @@ page time content = thehtml << (header << thetitle << myTitle +++
                                footer))
 
 mkTable m = table << (
-               tr << (th << "Package" +++ th << "Hackage" +++ th << "Debian") +++
+               tr << (th << "Package" +++
+                       th << "Hackage" +++
+                       th << "Debian sid" +++
+                       th << "Debian squeeze") +++
                (concatHtml $ map row $ M.toAscList m)
                )
-  where        row (pkg,(h,d)) = tr << (td << show pkg +++
+  where        row (pkg,(h,du,ds)) = tr << (td << show pkg +++
                                  maybe none mkCell h +++
-                                 maybe none mkCell d )
+                                 maybe none mkCell du +++
+                                  maybe none mkCell ds )
        mkCell (Version v u) = td << hotlink u << v
        none = td << "–"
 
diff --git a/Main.hs b/Main.hs
index 06d6140..e24183a 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -17,11 +17,17 @@ main = do
        hackage <- H.readFile "00-index.tar.gz"
        putStrLn $ "Read " ++ show (M.size hackage) ++ " packages from Hackage"
 
-       debian <- D.readFile "Sources" hackage
-       putStrLn $ "Read " ++ show (M.size debian) ++ " packages from Debian"
+       debian_unstable <- D.readFile "Sources.unstable" hackage
+       putStrLn $ "Read " ++ show (M.size debian_unstable) ++ " packages from Debian (Unstable)"
+
+       debian_squeeze <- D.readFile "Sources.squeeze" hackage
+       putStrLn $ "Read " ++ show (M.size debian_squeeze) ++ " packages from Debian (Squeeze)"
 
        
-       let combined = mapCombine hackage debian 
+       let combined = stopCombine $ startCombine (,,)
+                                     `mapCombine` hackage
+                                     `mapCombine` debian_unstable
+                                     `mapCombine` debian_squeeze
        putStrLn $ "Found " ++ show (M.size combined) ++ " total packages"
 
        time <- getClockTime
index 1057721..bbfd733 100644 (file)
--- a/Utils.hs
+++ b/Utils.hs
@@ -1,6 +1,7 @@
 module Utils where
 
 import qualified Data.Map as M
+import qualified Data.Set as S
 import Data.List
 
 isSublistOf []   _   = True
@@ -8,15 +9,23 @@ isSublistOf what l = contains' l
  where  contains' []   = False
         contains' text = what `isPrefixOf` text || contains' (tail text)
 
-mapCombine :: (Ord k) => M.Map k a -> M.Map k b -> M.Map k (Maybe a, Maybe b)
-mapCombine a b = result
-  where left = M.map (\v -> (Just v, Nothing)) a
-        right = M.map (\v -> (Nothing, Just v)) b
-       result = M.unionWith combine left right
-       combine (Just a, Nothing) (Nothing, Just b) = (Just a, Just b)
-       combine (Just a, Nothing) _                 = (Just a, Nothing)
-       combine _                 (Nothing, Just b) = (Nothing, Just b)
-       combine _                 _                 = (Nothing, Nothing) -- should not happen
+type MapDef k v = (v, M.Map k v)
+
+startCombine :: (Ord k) => a -> MapDef k a
+startCombine f = (f, M.empty)
+
+mapCombine :: (Ord k) => MapDef k (Maybe b -> c) -> M.Map k b -> MapDef k c
+mapCombine (def,a) b = (def Nothing, result)
+  where keys = M.keysSet a `S.union` M.keysSet b
+        result = fromSet app keys
+        app k= M.findWithDefault def k a (M.lookup k b)
+
+stopCombine :: MapDef k c -> M.Map k c
+stopCombine = snd
+
+fromSet :: Ord k => (k -> v) -> S.Set k -> M.Map k v
+fromSet v = S.fold (\k -> M.insert k (v k)) M.empty
+
 
 fromListMax :: (Ord k, Ord a) => [(k,a)] -> M.Map k a
 fromListMax = foldr insert M.empty
index e4db142..108443f 100644 (file)
@@ -4,6 +4,12 @@ set -e
 
 cd $(dirname $0)
 wget -q http://hackage.haskell.org/packages/archive/00-index.tar.gz -O 00-index.tar.gz
-wget -q http://ftp.debian.org/debian/dists/unstable/main/source/Sources.bz2 -O - | bunzip2 > Sources
+wget -q http://ftp.debian.org/debian/dists/unstable/main/source/Sources.bz2 -O - | bunzip2 > Sources.unstable
+wget -q http://ftp.debian.org/debian/dists/squeeze/main/source/Sources.bz2 -O - | bunzip2 > Sources.squeeze
+wget -q http://code.haskell.org/haskell-platform/haskell-platform.cabal -O - > haskell-platform-darcs.cabal
+wget -q http://hackage.haskell.org/platform/2010.1.0.0/haskell-platform.cabal -O -  > haskell-platform-2010.1.0.0.cabal
+wget -q http://hackage.haskell.org/platform/2010.2.0.0/haskell-platform.cabal -O - > haskell-platform-2010.2.0.0.cabal
+
 ./hpvt >/dev/null
 mv output.html public_html/hackagevsdebian.html
+mv cabalDebianMap.txt public_html/cabalDebianMap.txt