From 1117ca93c97ce9a3e99c178244d219e2a8efbc67 Mon Sep 17 00:00:00 2001 From: Dan Burton Date: Tue, 21 Apr 2015 16:29:58 -0700 Subject: [PATCH] Adjusted design related to stackage-setup per #87 #88 --- Handler/Alias.hs | 4 +-- Handler/Download.hs | 41 ++++++++----------------- Types.hs | 9 +++--- config/routes | 3 +- static/setup/linux64/ghc-7.8-links.yaml | 26 ++++++++++++++++ static/setup/linux64/stackage-setup | 3 ++ templates/download.hamlet | 2 +- templates/downloadExe.hamlet | 3 -- 8 files changed, 51 insertions(+), 40 deletions(-) create mode 100644 static/setup/linux64/ghc-7.8-links.yaml create mode 100755 static/setup/linux64/stackage-setup delete mode 100644 templates/downloadExe.hamlet diff --git a/Handler/Alias.hs b/Handler/Alias.hs index 5829dd9..235492c 100644 --- a/Handler/Alias.hs +++ b/Handler/Alias.hs @@ -11,7 +11,7 @@ import Handler.StackageIndex (getStackageIndexR) import Handler.StackageSdist (getStackageSdistR) import Handler.Hoogle (getHoogleR, getHoogleDatabaseR) import Handler.BuildPlan (getBuildPlanR) -import Handler.Download (getDownloadEnvironmentJsonR) +import Handler.Download (getGhcMajorVersionR) handleAliasR :: Slug -> Slug -> [Text] -> Handler () handleAliasR user name pieces = do @@ -82,5 +82,5 @@ goSid sid pieces = do HoogleR -> getHoogleR slug >>= sendResponse HoogleDatabaseR -> getHoogleDatabaseR slug >>= sendResponse BuildPlanR -> getBuildPlanR slug >>= sendResponse - DownloadEnvironmentJsonR arch -> getDownloadEnvironmentJsonR slug arch >>= sendResponse + GhcMajorVersionR -> getGhcMajorVersionR slug >>= sendResponse _ -> notFound diff --git a/Handler/Download.hs b/Handler/Download.hs index 2b804dd..86c87aa 100644 --- a/Handler/Download.hs +++ b/Handler/Download.hs @@ -1,8 +1,7 @@ module Handler.Download ( getDownloadR - , getDownloadStackageExecutableR , getDownloadLtsSnapshotsJsonR - , getDownloadEnvironmentJsonR + , getGhcMajorVersionR ) where import Import @@ -13,6 +12,10 @@ executableFor Win32 = StackageWindowsExecutable executableFor Win64 = StackageWindowsExecutable executableFor _ = StackageUnixExecutable +executableLink :: SupportedArch -> StackageExecutable -> Route App +executableLink arch exe = + StaticR $ StaticRoute ["setup", toPathPiece arch, toPathPiece exe] [] + downloadCandidates :: [(SupportedArch, StackageExecutable)] downloadCandidates = map (\arch -> (arch, executableFor arch)) @@ -22,14 +25,6 @@ getDownloadR :: Handler Html getDownloadR = defaultLayout $ do $(widgetFile "download") -getDownloadStackageExecutableR - :: SupportedArch -> StackageExecutable -> Handler Html -getDownloadStackageExecutableR arch exe = do - -- TODO: send exeutable file instead - when (executableFor arch /= exe) notFound - defaultLayout $ do - $(widgetFile "downloadExe") - ltsMajorVersions :: Handler [Lts] ltsMajorVersions = liftM (map entityVal) $ runDB $ do mapWhileIsJustM [0..] $ \x -> do @@ -53,21 +48,11 @@ getDownloadLtsSnapshotsJsonR = liftM reverse ltsMajorVersions >>= \case printLts (Lts major minor _) = "lts-" ++ show major ++ "." ++ show minor -getDownloadEnvironmentJsonR :: SnapSlug -> SupportedArch -> Handler Value -getDownloadEnvironmentJsonR _slug Linux64 = do - -- TODO: dynamic generation based on db entries - let ghc = object - [ "version" .= asText "7.8.4" - , "url" .= asText "http://www.haskell.org/ghc/dist/7.8.4/ghc-7.8.4-x86_64-unknown-linux-deb7.tar.xz" - , "sha1" .= asText "11aec12d4bb27f6fa59dcc8535a7a3b3be8cb787" - ] - cabal = object - [ "version" .= asText "1.20.0.3" - , "url" .= asText "http://www.haskell.org/cabal/release/cabal-install-1.20.0.3/cabal-1.20.0.3-i386-unknown-linux.tar.gz" - , "sha1" .= asText "647ae3e561343a709b09ed70fa6bc7b1ce39e25b" - ] - return $ object - [ "ghc" .= ghc - , "cabal" .= cabal - ] -getDownloadEnvironmentJsonR _slug _arch = notFound +-- TODO: add this to db +ltsGhcMajorVersion :: Stackage -> Text +ltsGhcMajorVersion _ = "7.8" + +getGhcMajorVersionR :: SnapSlug -> Handler Text +getGhcMajorVersionR slug = do + snapshot <- runDB $ getBy404 $ UniqueSnapshot slug + return $ ltsGhcMajorVersion $ entityVal snapshot diff --git a/Types.hs b/Types.hs index 3e55df4..74d1000 100644 --- a/Types.hs +++ b/Types.hs @@ -109,11 +109,12 @@ data StackageExecutable deriving (Show, Read, Eq) instance PathPiece StackageExecutable where - toPathPiece StackageWindowsExecutable = "stackage.exe" - toPathPiece StackageUnixExecutable = "stackage" + -- TODO: distribute stackage, not just stackage-setup + toPathPiece StackageWindowsExecutable = "stackage-setup.exe" + toPathPiece StackageUnixExecutable = "stackage-setup" - fromPathPiece "stackage" = Just StackageUnixExecutable - fromPathPiece "stackage.exe" = Just StackageWindowsExecutable + fromPathPiece "stackage-setup" = Just StackageUnixExecutable + fromPathPiece "stackage-setup.exe" = Just StackageWindowsExecutable fromPathPiece _ = Nothing data SupportedArch diff --git a/config/routes b/config/routes index 10bc9e7..371e01b 100644 --- a/config/routes +++ b/config/routes @@ -28,7 +28,7 @@ /hoogle HoogleR GET /db.hoo HoogleDatabaseR GET /build-plan BuildPlanR GET - /download/#SupportedArch/environment.json DownloadEnvironmentJsonR GET + /ghc-major-version GhcMajorVersionR GET /aliases AliasesR PUT /alias/#Slug/#Slug/*Texts AliasR @@ -60,5 +60,4 @@ /package-counts PackageCountsR GET /download DownloadR GET -/download/#SupportedArch/#StackageExecutable DownloadStackageExecutableR GET /download/lts-snapshots.json DownloadLtsSnapshotsJsonR GET diff --git a/static/setup/linux64/ghc-7.8-links.yaml b/static/setup/linux64/ghc-7.8-links.yaml new file mode 100644 index 0000000..4a728a3 --- /dev/null +++ b/static/setup/linux64/ghc-7.8-links.yaml @@ -0,0 +1,26 @@ +- + name: ghc + version: 7.8.4 + url: http://www.haskell.org/ghc/dist/7.8.4/ghc-7.8.4-x86_64-unknown-linux-deb7.tar.xz + sha1: 11aec12d4bb27f6fa59dcc8535a7a3b3be8cb787 + instructions: + - tar xJf ghc-7.8.4-x86_64-unknown-linux-deb7.tar.xz + - cd ghc-7.8.4 + - ./configure --prefix=`pwd` + - make install + - cd .. + - rm ghc-7.8.4-x86_64-unknown-linux-deb7.tar.xz +- + name: cabal + version: 1.20.0.3 + url: https://www.haskell.org/cabal/release/cabal-install-1.20.0.3/cabal-install-1.20.0.3.tar.gz + sha1: 444448b0f704420e329e8fc1989b6743c1c8546d + instructions: + - tar xzf cabal-install-1.20.0.3.tar.gz + - cd cabal-install-1.20.0.3 + - ./bootstrap.sh + - cd .. + - rm -r cabal-install-1.20.0.3 + - rm cabal-install-1.20.0.3.tar.gz + - mkdir cabal-1.20.0.3 + - mv $HOME/.cabal/bin/cabal cabal-1.20.0.3/bin/cabal diff --git a/static/setup/linux64/stackage-setup b/static/setup/linux64/stackage-setup new file mode 100755 index 0000000..3216344 --- /dev/null +++ b/static/setup/linux64/stackage-setup @@ -0,0 +1,3 @@ +#! /bin/bash + +echo "fake stackage setup" diff --git a/templates/download.hamlet b/templates/download.hamlet index c5434de..25585e4 100644 --- a/templates/download.hamlet +++ b/templates/download.hamlet @@ -1,5 +1,5 @@ $forall (arch, exe) <- downloadCandidates