git.iko.soy/typeable/cabal2nix
on master help sign in
Use latest distribution-nixpkgs to render all SHA256 digests Nix-style.
commit655334786d5a8bf64ffb7f979f5ac33c46e4029b authorPeter Simons <simons@cryp.to> dateWed 17 May 2017, 22:50 (9 years ago) parentef652a8
5 files changed+16−15
cabal2nix.cabal+4−4 hackage2nix/HackageGit.hs+5−4 package.yaml+1−1 src/Distribution/Nixpkgs/Haskell/Hackage.hs+3−3 src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+3−3
cabal2nix.cabal+4−4
@@ -91,7 +91,7 @@ library
9191 , containers
9292 , deepseq >= 1.4
9393 , directory
94− , distribution-nixpkgs
94+ , distribution-nixpkgs >= 1.1
9595 , filepath
9696 , hackage-db
9797 , hopenssl >= 2
@@ -138,7 +138,7 @@ executable cabal2nix
138138 , containers
139139 , deepseq >= 1.4
140140 , directory
141− , distribution-nixpkgs
141+ , distribution-nixpkgs >= 1.1
142142 , filepath
143143 , hackage-db
144144 , hopenssl >= 2
@@ -170,7 +170,7 @@ executable hackage2nix
170170 , containers
171171 , deepseq >= 1.4
172172 , directory
173− , distribution-nixpkgs
173+ , distribution-nixpkgs >= 1.1
174174 , filepath
175175 , hackage-db
176176 , hopenssl >= 2
@@ -209,7 +209,7 @@ test-suite doctests
209209 , containers
210210 , deepseq >= 1.4
211211 , directory
212− , distribution-nixpkgs
212+ , distribution-nixpkgs >= 1.1
213213 , filepath
214214 , hackage-db
215215 , hopenssl >= 2
hackage2nix/HackageGit.hs+5−4
@@ -3,22 +3,23 @@
33
44module HackageGit where
55
6−import Control.Monad
76import Control.Lens hiding ( (<.>) )
7+import Control.Monad
88import Data.Aeson
99import Data.ByteString.Char8 ( ByteString )
1010import qualified Data.ByteString.Char8 as BS
11−import OpenSSL.Digest ( digest, digestByName, toHex )
1211import Data.Map as Map
1312import Data.Set as Set
1413import Data.String
1514import Data.String.UTF8 ( toString, fromRep )
15+import Distribution.Nixpkgs.Hashes
1616import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
1717import Distribution.Package
1818import Distribution.PackageDescription
1919import Distribution.PackageDescription.Parse ( parsePackageDescription, ParseResult(..) )
2020import Distribution.Text
2121import Distribution.Version
22+import OpenSSL.Digest ( digest, digestByName )
2223import System.Directory
2324import System.FilePath
2425
@@ -49,7 +50,7 @@ readPackage dirPrefix (PackageIdentifier name version) = do
4950 cabal <- case parsePackageDescription (decodeUTF8 buf) of
5051 ParseOk _ a -> return a
5152 ParseFailed err -> fail (cabalFile ++ ": " ++ show err)
52− return (cabal, BS.unpack (toHex (digest (digestByName "sha256") buf)))
53+ return (cabal, printSHA256 (digest (digestByName "sha256") buf))
5354
5455declareLenses [d|
5556 data Meta = Meta { hashes :: Map String String
@@ -72,4 +73,4 @@ readPackageMeta dirPrefix (PackageIdentifier name version) = do
7273 buf <- BS.readFile metaFile
7374 case eitherDecodeStrict buf of
7475 Left msg -> fail (metaFile ++ ": " ++ msg)
75− Right x -> return x
76+ Right x -> return $ over (hashes . ix "SHA256") (printSHA256 . packHex) x
package.yaml+1−1
@@ -82,7 +82,7 @@ dependencies:
8282 - containers
8383 - deepseq >= 1.4
8484 - directory
85− - distribution-nixpkgs
85+ - distribution-nixpkgs >= 1.1
8686 - filepath
8787 - hackage-db
8888 - hopenssl >= 2
src/Distribution/Nixpkgs/Haskell/Hackage.hs+3−3
@@ -1,11 +1,11 @@
11module Distribution.Nixpkgs.Haskell.Hackage ( readHashedHackage, readHashedHackage', module Distribution.Hackage.DB ) where
22
33import Data.ByteString.Lazy ( ByteString )
4−import Data.ByteString.Char8 ( unpack )
54import Distribution.Hackage.DB
65import qualified Distribution.Hackage.DB.Parsed as Unparsed ( parsePackage )
76import qualified Distribution.Hackage.DB.Unparsed as Unparsed
8−import OpenSSL.Digest ( digest, digestByName, toHex )
7+import Distribution.Nixpkgs.Hashes
8+import OpenSSL.Digest ( digest, digestByName )
99
1010-- | A variant of 'readHackage' that adds the SHA256 digest of the
1111-- original Cabal file to the parsed 'GenericPackageDescription'. That
@@ -25,7 +25,7 @@ readHashedHackage' = fmap parseUnparsedHackage . Unparsed.readHackage'
2525 parsePackage :: String -> Version -> ByteString -> GenericPackageDescription
2626 parsePackage name version buf =
2727 let pkg = Unparsed.parsePackage name version buf
28− hash = unpack (toHex (digest (digestByName "sha256") buf))
28+ hash = printSHA256 (digest (digestByName "sha256") buf)
2929 in
3030 pkg { packageDescription = (packageDescription pkg) {
3131 customFieldsPD = ("X-Cabal-File-Hash", hash) : customFieldsPD (packageDescription pkg)
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+3−3
@@ -7,18 +7,18 @@ import Control.Monad
77import Control.Monad.IO.Class
88import Control.Monad.Trans.Maybe
99import qualified Data.ByteString.Lazy.Char8 as LBS8
10−import qualified Data.ByteString.Char8 as SBS8
1110import Data.List ( isSuffixOf, isPrefixOf )
1211import Data.Maybe
1312import Data.Version
1413import Distribution.Hackage.DB.Parsed
1514import Distribution.Nixpkgs.Fetch
15+import Distribution.Nixpkgs.Hashes
1616import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
1717import qualified Distribution.Package as Cabal
1818import Distribution.PackageDescription
1919import qualified Distribution.PackageDescription as Cabal
2020import Distribution.Text ( simpleParse )
21−import OpenSSL.Digest ( digest, digestByName, toHex )
21+import OpenSSL.Digest ( digest, digestByName )
2222import System.Directory ( doesDirectoryExist, doesFileExist, createDirectoryIfMissing, getHomeDirectory, getDirectoryContents )
2323import System.Exit ( exitFailure )
2424import System.FilePath ( (</>), (<.>) )
@@ -147,7 +147,7 @@ cabalFromFile failHard file =
147147 -- the reading of the file, so we will always catch the expression here.
148148 MaybeT $ handleIO (\err -> Nothing <$ hPutStrLn stderr ("*** parsing cabal file: " ++ show err)) $ do
149149 buf <- LBS8.readFile file
150− let hash = SBS8.unpack (toHex (digest (digestByName "sha256") buf))
150+ let hash = printSHA256 (digest (digestByName "sha256") buf)
151151 case parsePackage' buf of
152152 Left msg -> if failHard
153153 then fail ("*** cannot parse " ++ show file ++ ": " ++ msg)