@@ -11,13 +11,30 @@ import qualified Codec.Archive.Tar as Tar
11import qualified Data.ByteString.Lazy as L
11import qualified Data.ByteString.Lazy as L
12import Control.Arrow (second)
12import Control.Arrow (second)
13import Distribution.Text (display)
13import Distribution.Text (display)
14+import System.Directory (doesFileExist)
15+import System.FilePath ((</>), (<.>))
14−import System.IO (Handle, hPutStrLn)
16+import System.IO (Handle, hPutStrLn, hPutStr)
16−createHackageFile :: InstallInfo -> Handle -> IO ()
18+createHackageFile :: Bool -- ^ inclusive?
20+ -> String -- ^ GHC version
22+ -> Handle -- ^ hackage
23+ -> Handle -- ^ tarballs
17−createHackageFile ii h = do
25+createHackageFile isInc ii ghcVer date hackageH tarballH = do
26+ hPutStr tarballH $ concat
27+ [ "#!/bin/bash -ex\n\ntar czfv ../ghc-"
31+ , if isInc then "-inclusive" else "-exclusive"
32+ , ".stackage hackage desc"
18 indextargz <- getTarballName
34 indextargz <- getTarballName
19 indexLBS <- L.readFile indextargz
35 indexLBS <- L.readFile indextargz
20 loop $ Tar.read indexLBS
36 loop $ Tar.read indexLBS
37+ hPutStrLn tarballH ""
22 selected = Map.fromList . map toStrs . Map.toList $
39 selected = Map.fromList . map toStrs . Map.toList $
23 fmap spiVersion (iiPackages ii)
40 fmap spiVersion (iiPackages ii)
@@ -35,8 +52,21 @@ createHackageFile ii h = do
35 Nothing -> return ()
52 Nothing -> return ()
36 Just (name, version) ->
53 Just (name, version) ->
37 case Map.lookup name selected of
54 case Map.lookup name selected of
38− Just version' | version /= version' -> return ()
55+ Just version'
56+ | version == version' -> emit True name version
57+ | otherwise -> return ()
59+ | isInc -> emit False name version
60+ | otherwise -> return ()
62+ emit usePatch name version = do
63+ exists <- if usePatch then doesFileExist tarball else return False
65+ then hPutStr tarballH $ ' ' : ".." </> tarball
66+ else hPutStrLn hackageH base
39− _ -> hPutStrLn h $ concat [name, "-", version]
68+ base = concat [name, "-", version]
69+ tarball = "patching" </> "tarballs" </> base <.> "tar" <.> "gz"
41parsePair :: String -> Maybe (String, String)
71parsePair :: String -> Maybe (String, String)
42parsePair s =
72parsePair s =