git.iko.soy/typeable/cabal2nix
on master help sign in
Move hackage-related know how into module Hackage.hs.
commit4bb6cd46c344de37f4d9e8518bc86824337cf63a authorPeter Simons <simons@cryp.to> dateSun 7 Aug 2011, 13:44 (15 years ago) parent1a212fb
2 files changed+31−30
src/Cabal2Nix.hs+6−30 src/Cabal2Nix/Hackage.hs+25
src/Cabal2Nix.hs+6−30
@@ -5,31 +5,15 @@ import System.Environment ( getArgs )
55import Control.Exception ( bracket )
66import System.Exit ( exitFailure )
77import Distribution.PackageDescription.Parse ( parsePackageDescription, ParseResult(..) )
8−import Distribution.PackageDescription ( GenericPackageDescription, package, packageDescription )
9−import Distribution.Package ( PackageIdentifier(..), PackageName(..) )
8+import Distribution.PackageDescription ( package, packageDescription )
109import Distribution.Text ( simpleParse )
11−import Data.Version ( showVersion )
1210import Data.List ( isPrefixOf )
1311import Control.Monad ( when )
1412import Network.HTTP ( simpleHTTP, getRequest, getResponseBody )
1513import System.Console.GetOpt ( OptDescr(..), ArgDescr(..), ArgOrder(..), usageInfo, getOpt )
16−import System.Process ( readProcess )
17−import Cabal2Nix.Package ( showNixPkg, cabal2nix )
18−
19−data Ext = TarGz | Cabal deriving Eq
20−
21−showExt :: Ext -> String
22−showExt TarGz = ".tar.gz"
23−showExt Cabal = ".cabal"
2414
25−hackagePath :: PackageIdentifier -> Ext -> String
26−hackagePath (PackageIdentifier (PackageName name) version') ext =
27− "http://hackage.haskell.org/packages/archive/" ++
28− name ++ "/" ++ version ++ "/" ++ name ++
29− (if ext == TarGz then "-" ++ version else "") ++
30− showExt ext
31− where
32− version = showVersion version'
15+import Cabal2Nix.Package ( showNixPkg, cabal2nix )
16+import Cabal2Nix.Hackage ( hackagePath, Ext(..), hashPackage )
3317
3418readCabalFile :: FilePath -> IO String
3519readCabalFile path
@@ -38,14 +22,6 @@ readCabalFile path
3822 | "file://" `isPrefixOf` path = readCabalFile (drop 7 path)
3923 | otherwise = readFile path
4024
41−hashPackage :: GenericPackageDescription -> IO String
42−hashPackage pkg = do
43− hash <- readProcess "bash" ["-c", "exec nix-prefetch-url 2>/dev/tty " ++ url] ""
44− return (reverse (dropWhile (=='\n') (reverse hash)))
45− where
46− url = hackagePath pid TarGz
47− pid = package (packageDescription pkg)
48−
4925data CliOption = PrintHelp | SHA256 String | Maintainer String | Platform String
5026 deriving (Eq)
5127
@@ -98,8 +74,8 @@ main = bracket (return ()) (\() -> hFlush stdout >> hFlush stderr) $ \() -> do
9874 hPutStrLn stderr ("*** cannot parse cabal file: " ++ show err)
9975 exitFailure
10076
101− sha256 <- case hash of
102− h:[] -> return h
103− _ -> hashPackage cabal
77+ let packageId = package (packageDescription cabal)
78+
79+ sha256 <- if null hash then hashPackage packageId else return (head hash)
10480
10581 putStr (showNixPkg (cabal2nix cabal sha256 platforms maintainers))
src/Cabal2Nix/Hackage.hsnew file+25
@@ -0,0 +1,25 @@
1+module Cabal2Nix.Hackage ( hackagePath, Ext(..), hashPackage ) where
2+
3+import Distribution.Package ( PackageIdentifier(..), PackageName(..) )
4+import System.Process ( readProcess )
5+import Data.Version ( showVersion )
6+
7+data Ext = TarGz | Cabal deriving Eq
8+
9+showExt :: Ext -> String
10+showExt TarGz = ".tar.gz"
11+showExt Cabal = ".cabal"
12+
13+hackagePath :: PackageIdentifier -> Ext -> String
14+hackagePath (PackageIdentifier (PackageName name) version') ext =
15+ "http://hackage.haskell.org/packages/archive/" ++
16+ name ++ "/" ++ version ++ "/" ++ name ++
17+ (if ext == TarGz then "-" ++ version else "") ++
18+ showExt ext
19+ where
20+ version = showVersion version'
21+
22+hashPackage :: PackageIdentifier -> IO String
23+hashPackage pkg = do
24+ hash <- readProcess "bash" ["-c", "exec nix-prefetch-url 2>/dev/tty " ++ hackagePath pkg TarGz] ""
25+ return (reverse (dropWhile (=='\n') (reverse hash)))