Match possible cabal names against list of known names
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 8 Sep 2009 17:04:38 +0000 (17:04 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 8 Sep 2009 17:04:38 +0000 (17:04 +0000)
Debian.hs
Main.hs

index 55e4477..c265ed4 100644 (file)
--- a/Debian.hs
+++ b/Debian.hs
@@ -8,28 +8,31 @@ import Utils
 import Data.List
 import qualified Data.Map as M
 
-findHaskellPackages (Control sources) = map getData . filter isHaskellPackage $ sources
+findHaskellPackages hackage (Control sources) = map getData . filter isHaskellPackage $ sources
   where        getData para = (fromDebian cabalName, Version version url)
          where package' = fieldValue "Package" para
                package = maybe (error "Source stanza without Package field") BS.unpack package'
                version' = fieldValue "Version" para
                version = maybe (error "Source stanza without Package field") BS.unpack version'
-               cabalName | "haskell-" `isPrefixOf` package = drop (length "haskell-") package
-                         | reverse "-haskell" `isPrefixOf` reverse package =
-                               reverse $ drop (length "haskell-") $ reverse package
-                         | otherwise                       = package
+               cabalName | Just found <- find ((`M.member` hackage).fromHackage) [
+                                       package,
+                                       drop (length "haskell-") package,
+                                       reverse $ drop (length "haskell-") $ reverse package
+                                       ]
+                                       = found
+                         | otherwise   = package
                url = "http://packages.debian.org/source/sid/" ++ package
 
        isHaskellPackage para = maybe False ( ("ghc6" `isSublistOf`) . BS.unpack)
                                                (fieldValue "Build-Depends" para)
 
 
-readFile :: FilePath -> IO DistroInfo
-readFile file = do
+readFile :: FilePath -> DistroInfo -> IO DistroInfo
+readFile file hackage = do
        sourceParse <- parseControlFromFile file
        sources <- case sourceParse of
                Left error -> fail (show error)
                Right source -> return source
-       return $ M.fromList $ findHaskellPackages sources
+       return $ M.fromList $ findHaskellPackages hackage sources
 
 
diff --git a/Main.hs b/Main.hs
index 0ed9bdf..e97e10d 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -16,7 +16,7 @@ main = do
        hackage <- H.readFile "00-index.tar.gz"
        putStrLn $ "Read " ++ show (M.size hackage) ++ " packages from Hackage"
 
-       debian <- D.readFile "Sources"
+       debian <- D.readFile "Sources" hackage
        putStrLn $ "Read " ++ show (M.size debian) ++ " packages from Debian"