@@ -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))