packages feed

cblrepo-0.5.0: src/ConvertDB.hs

{-
 - Copyright 2011 Per Magnus Therning
 -
 - Licensed under the Apache License, Version 2.0 (the "License");
 - you may not use this file except in compliance with the License.
 - You may obtain a copy of the License at
 -
 -     http://www.apache.org/licenses/LICENSE-2.0
 -
 - Unless required by applicable law or agreed to in writing, software
 - distributed under the License is distributed on an "AS IS" BASIS,
 - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - See the License for the specific language governing permissions and
 - limitations under the License.
 -}

module ConvertDB where

-- {{{1 imports
-- {{{2 local
import Util.Misc
import qualified OldPkgDB as ODB
import qualified PkgDB as NDB

-- {{{2 system
import Control.Monad.Reader
import Data.Version
import System.IO

convertDb :: Command ()
convertDb = do
    inDb <- cfgGet inDbFile >>= \ fn -> liftIO $ ODB.readDb fn
    outDbFn <- cfgGet outDbFile
    newDb <- liftIO $ mapM doConvert inDb
    liftIO $ NDB.saveDb newDb outDbFn

doConvert :: ODB.CblPkg -> IO NDB.CblPkg
doConvert opkg@(n, (v, d, r))
    | ODB.isBasePkg opkg = let
            withNoStdBuffering f = do
                old <- hGetBuffering stdin
                hSetBuffering stdin NoBuffering
                result <- f
                hSetBuffering stdin old
                return result
            getValidChar = do
                putStr " (g)hc or (d)istro? " >> hFlush stdout
                getChar >>= (\ c -> putStrLn "" >> return c) >>= (\ c -> if c `elem` "gd" then return c else getValidChar)
            createPkg c
                | c == 'g' = return $ NDB.createGhcPkg n v
                | c == 'd' = do
                    putStr " release? " >> hFlush stdout
                    rel <- getLine
                    return $ NDB.createDistroPkg n v rel
        in do
            putStr n
            withNoStdBuffering $ getValidChar >>= createPkg
    | otherwise = return $ NDB.createRepoPkg n v d (show r)