git.iko.soy/typeable/cabal2nix
on master help sign in
Moved readCabalFile function into the Hackage module.
ca2b280Peter Simons
src/Cabal2Nix.hs+10−19
@@ -1,28 +1,19 @@
1module Main ( main ) where
1module Main ( main ) where
2
2
3−import System.IO ( hPutStrLn, hFlush, stdout, stderr )
3+import Cabal2Nix.Hackage ( hashPackage, readCabalFile )
4−import System.Environment -- ( getArgs )
5−import Control.Exception ( bracket )
6−import System.Exit ( exitFailure )
7−import Distribution.PackageDescription.Parse ( parsePackageDescription, ParseResult(..) )
8−import Distribution.PackageDescription ( package, packageDescription )
9−import Distribution.Text
10−import Data.List ( isPrefixOf )
11−import Control.Monad ( when )
12−import Network.HTTP ( simpleHTTP, getRequest, getResponseBody )
13−import System.Console.GetOpt ( OptDescr(..), ArgDescr(..), ArgOrder(..), usageInfo, getOpt )
14−
15import Cabal2Nix.Package ( cabal2nix )
4import Cabal2Nix.Package ( cabal2nix )
16−import Cabal2Nix.Hackage ( hackagePath, Ext(..), hashPackage )
17import Distribution.NixOS.Derivation.Cabal
5import Distribution.NixOS.Derivation.Cabal
18import Distribution.NixOS.Derivation.Meta
6import Distribution.NixOS.Derivation.Meta
19
7
20−readCabalFile :: FilePath -> IO String
8+import Control.Exception ( bracket )
21−readCabalFile path
9+import Control.Monad ( when )
22− | "cabal://" `isPrefixOf` path = let Just pid = simpleParse (drop 8 path) in readCabalFile (hackagePath pid Cabal)
10+import Distribution.PackageDescription ( package, packageDescription )
23− | "http://" `isPrefixOf` path = simpleHTTP (getRequest path) >>= getResponseBody
11+import Distribution.PackageDescription.Parse ( parsePackageDescription, ParseResult(..) )
24− | "file://" `isPrefixOf` path = readCabalFile (drop 7 path)
12+import Distribution.Text ( disp )
25− | otherwise = readFile path
13+import System.Console.GetOpt ( OptDescr(..), ArgDescr(..), ArgOrder(..), usageInfo, getOpt )
14+import System.Environment ( getArgs )
15+import System.Exit ( exitFailure )
16+import System.IO ( hPutStrLn, hFlush, stdout, stderr )
26
17
27data CliOption = PrintHelp | SHA256 String | Maintainer String | Platform String | NoHaddock
18data CliOption = PrintHelp | SHA256 String | Maintainer String | Platform String | NoHaddock
28 deriving (Eq)
19 deriving (Eq)
src/Cabal2Nix/Hackage.hs+14−4
@@ -1,11 +1,14 @@
1−module Cabal2Nix.Hackage ( hackagePath, Ext(..), hashPackage ) where
1+module Cabal2Nix.Hackage ( hashPackage, readCabalFile ) where
2
2
3+import Control.Monad ( when )
4+import Data.List ( isPrefixOf )
5+import Data.Version ( showVersion )
3import Distribution.Package ( PackageIdentifier(..), PackageName(..) )
6import Distribution.Package ( PackageIdentifier(..), PackageName(..) )
4−import System.Process ( readProcess )
7+import Distribution.Text
8+import Network.HTTP ( simpleHTTP, getRequest, getResponseBody )
5import System.Directory ( doesFileExist, getHomeDirectory, createDirectoryIfMissing )
9import System.Directory ( doesFileExist, getHomeDirectory, createDirectoryIfMissing )
6import System.FilePath ( dropFileName, (</>), (<.>) )
10import System.FilePath ( dropFileName, (</>), (<.>) )
7−import Data.Version ( showVersion )
11+import System.Process ( readProcess )
8−import Control.Monad ( when )
9
12
10data Ext = TarGz | Cabal deriving Eq
13data Ext = TarGz | Cabal deriving Eq
11
14
@@ -41,3 +44,10 @@ hashCachePath (PackageIdentifier (PackageName name) version') = do
41 return $ home ++ "/.cache/cabal2nix" </> name ++ "-" ++ version <.> "sha256"
44 return $ home ++ "/.cache/cabal2nix" </> name ++ "-" ++ version <.> "sha256"
42 where
45 where
43 version = showVersion version'
46 version = showVersion version'
47+
48+readCabalFile :: FilePath -> IO String
49+readCabalFile path
50+ | "cabal://" `isPrefixOf` path = let Just pid = simpleParse (drop 8 path) in readCabalFile (hackagePath pid Cabal)
51+ | "http://" `isPrefixOf` path = simpleHTTP (getRequest path) >>= getResponseBody
52+ | "file://" `isPrefixOf` path = readCabalFile (drop 7 path)
53+ | otherwise = readFile path