mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-22 00:41:56 +01:00
/lts and /nightly routes are set up
This commit is contained in:
parent
8c90ad02d3
commit
529f9483cd
@ -1,7 +1,15 @@
|
|||||||
module Handler.Alias where
|
module Handler.Alias
|
||||||
|
( handleAliasR
|
||||||
|
, getLtsR
|
||||||
|
, getNightlyR
|
||||||
|
) where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
import Data.Slug (Slug)
|
import Data.Slug (Slug)
|
||||||
|
import Data.Text.Read (decimal)
|
||||||
|
import Handler.StackageHome (getStackageHomeR, getStackageMetadataR, getStackageCabalConfigR)
|
||||||
|
import Handler.StackageIndex (getStackageIndexR, getStackageBundleR)
|
||||||
|
import Handler.StackageSdist (getStackageSdistR)
|
||||||
|
|
||||||
handleAliasR :: Slug -> Slug -> [Text] -> Handler ()
|
handleAliasR :: Slug -> Slug -> [Text] -> Handler ()
|
||||||
handleAliasR user name pieces = do
|
handleAliasR user name pieces = do
|
||||||
@ -13,3 +21,66 @@ handleAliasR user name pieces = do
|
|||||||
case parseRoute ("stackage" : toPathPiece setid : pieces, []) of
|
case parseRoute ("stackage" : toPathPiece setid : pieces, []) of
|
||||||
Nothing -> notFound
|
Nothing -> notFound
|
||||||
Just route -> redirect (route :: Route App)
|
Just route -> redirect (route :: Route App)
|
||||||
|
|
||||||
|
parseLtsPair :: Text -> Maybe (Int, Int)
|
||||||
|
parseLtsPair t1 = do
|
||||||
|
(x, t2) <- either (const Nothing) Just $ decimal t1
|
||||||
|
t3 <- stripPrefix "." t2
|
||||||
|
(y, "") <- either (const Nothing) Just $ decimal t3
|
||||||
|
Just (x, y)
|
||||||
|
|
||||||
|
getLtsR :: [Text] -> Handler ()
|
||||||
|
getLtsR pieces0 =
|
||||||
|
case pieces0 of
|
||||||
|
[] -> go []
|
||||||
|
piece:pieces'
|
||||||
|
| Just (x, y) <- parseLtsPair piece -> goXY x y pieces'
|
||||||
|
| Just x <- fromPathPiece piece -> goX x pieces'
|
||||||
|
| otherwise -> go pieces0
|
||||||
|
where
|
||||||
|
go pieces = do
|
||||||
|
mlts <- runDB $ selectFirst [] [Desc LtsMajor, Desc LtsMinor]
|
||||||
|
case mlts of
|
||||||
|
Nothing -> notFound
|
||||||
|
Just (Entity _ (Lts _ _ sid)) -> goSid sid pieces
|
||||||
|
|
||||||
|
goX x pieces = do
|
||||||
|
mlts <- runDB $ selectFirst [LtsMajor ==. x] [Desc LtsMinor]
|
||||||
|
case mlts of
|
||||||
|
Nothing -> notFound
|
||||||
|
Just (Entity _ (Lts _ _ sid)) -> goSid sid pieces
|
||||||
|
|
||||||
|
goXY x y pieces = do
|
||||||
|
Entity _ (Lts _ _ sid) <- runDB $ getBy404 $ UniqueLts x y
|
||||||
|
goSid sid pieces
|
||||||
|
|
||||||
|
getNightlyR :: [Text] -> Handler ()
|
||||||
|
getNightlyR pieces0 =
|
||||||
|
case pieces0 of
|
||||||
|
[] -> go []
|
||||||
|
piece:pieces'
|
||||||
|
| Just day <- fromPathPiece piece -> goDay day pieces'
|
||||||
|
| otherwise -> go pieces0
|
||||||
|
where
|
||||||
|
go pieces = do
|
||||||
|
mn <- runDB $ selectFirst [] [Desc NightlyDay]
|
||||||
|
case mn of
|
||||||
|
Nothing -> notFound
|
||||||
|
Just (Entity _ (Nightly _ _ sid)) -> goSid sid pieces
|
||||||
|
goDay day pieces = do
|
||||||
|
Entity _ (Nightly _ _ sid) <- runDB $ getBy404 $ UniqueNightly day
|
||||||
|
goSid sid pieces
|
||||||
|
|
||||||
|
goSid :: StackageId -> [Text] -> Handler ()
|
||||||
|
goSid sid pieces = do
|
||||||
|
s <- runDB $ get404 sid
|
||||||
|
case parseRoute ("snapshot" : toPathPiece (stackageSlug s) : pieces, []) of
|
||||||
|
Just (SnapshotR slug sr) ->
|
||||||
|
case sr of
|
||||||
|
StackageHomeR -> getStackageHomeR slug >>= sendResponse
|
||||||
|
StackageMetadataR -> getStackageMetadataR slug >>= sendResponse
|
||||||
|
StackageCabalConfigR -> getStackageCabalConfigR slug >>= sendResponse
|
||||||
|
StackageIndexR -> getStackageIndexR slug >>= sendResponse
|
||||||
|
StackageBundleR -> getStackageBundleR slug >>= sendResponse
|
||||||
|
StackageSdistR pnv -> getStackageSdistR slug pnv >>= sendResponse
|
||||||
|
_ -> notFound
|
||||||
|
|||||||
@ -45,7 +45,7 @@ getUploadHaddockR slug0 = do
|
|||||||
master <- getYesod
|
master <- getYesod
|
||||||
void $ liftIO $ forkIO $ haddockUnpacker master True ident
|
void $ liftIO $ forkIO $ haddockUnpacker master True ident
|
||||||
setMessage "Haddocks uploaded"
|
setMessage "Haddocks uploaded"
|
||||||
redirect $ StackageHomeR slug
|
redirect $ SnapshotR slug StackageHomeR
|
||||||
_ -> defaultLayout $ do
|
_ -> defaultLayout $ do
|
||||||
setTitle "Upload Haddocks"
|
setTitle "Upload Haddocks"
|
||||||
$(widgetFile "upload-haddock")
|
$(widgetFile "upload-haddock")
|
||||||
|
|||||||
@ -53,11 +53,11 @@ getHomeR = do
|
|||||||
#{asHtml title}
|
#{asHtml title}
|
||||||
<td>
|
<td>
|
||||||
$maybe ex <- mex
|
$maybe ex <- mex
|
||||||
<a href=@{StackageHomeR ex}>exclusive
|
<a href=@{SnapshotR ex StackageHomeR}>exclusive
|
||||||
$if isJust mex && isJust min'
|
$if isJust mex && isJust min'
|
||||||
<td>
|
<td>
|
||||||
$maybe in <- min'
|
$maybe in <- min'
|
||||||
<a href=@{StackageHomeR in}>inclusive
|
<a href=@{SnapshotR in StackageHomeR}>inclusive
|
||||||
|]
|
|]
|
||||||
where
|
where
|
||||||
name suffix = concat ["unstable-", short, "-", suffix]
|
name suffix = concat ["unstable-", short, "-", suffix]
|
||||||
|
|||||||
@ -125,7 +125,7 @@ putUploadStackageR = do
|
|||||||
|
|
||||||
setAlias
|
setAlias
|
||||||
|
|
||||||
done "Stackage created" $ StackageHomeR slug
|
done "Stackage created" $ SnapshotR slug StackageHomeR
|
||||||
else do
|
else do
|
||||||
done "Error creating index file" ProfileR
|
done "Error creating index file" ProfileR
|
||||||
|
|
||||||
|
|||||||
@ -99,3 +99,15 @@ BannedTag
|
|||||||
Migration
|
Migration
|
||||||
num Int
|
num Int
|
||||||
UniqueMigration num
|
UniqueMigration num
|
||||||
|
|
||||||
|
Nightly
|
||||||
|
day Day
|
||||||
|
ghcVersion Text
|
||||||
|
stackage StackageId
|
||||||
|
UniqueNightly day
|
||||||
|
|
||||||
|
Lts
|
||||||
|
major Int
|
||||||
|
minor Int
|
||||||
|
stackage StackageId
|
||||||
|
UniqueLts major minor
|
||||||
|
|||||||
@ -15,12 +15,13 @@
|
|||||||
|
|
||||||
/stackage/#PackageSetIdent/*Texts OldStackageR GET
|
/stackage/#PackageSetIdent/*Texts OldStackageR GET
|
||||||
|
|
||||||
/snapshot/#SnapSlug StackageHomeR GET
|
/snapshot/#SnapSlug SnapshotR:
|
||||||
/snapshot/#SnapSlug/metadata StackageMetadataR GET
|
/ StackageHomeR GET
|
||||||
/snapshot/#SnapSlug/cabal.config StackageCabalConfigR GET
|
/metadata StackageMetadataR GET
|
||||||
/snapshot/#SnapSlug/00-index.tar.gz StackageIndexR GET
|
/cabal.config StackageCabalConfigR GET
|
||||||
/snapshot/#SnapSlug/bundle StackageBundleR GET
|
/00-index.tar.gz StackageIndexR GET
|
||||||
/snapshot/#SnapSlug/package/#PackageNameVersion StackageSdistR GET
|
/bundle StackageBundleR GET
|
||||||
|
/package/#PackageNameVersion StackageSdistR GET
|
||||||
|
|
||||||
/hackage-view/#HackageView/00-index.tar.gz HackageViewIndexR GET
|
/hackage-view/#HackageView/00-index.tar.gz HackageViewIndexR GET
|
||||||
/hackage-view/#HackageView/package/#PackageNameVersion HackageViewSdistR GET
|
/hackage-view/#HackageView/package/#PackageNameVersion HackageViewSdistR GET
|
||||||
@ -39,3 +40,6 @@
|
|||||||
/tags TagListR GET
|
/tags TagListR GET
|
||||||
/tag/#Slug TagR GET
|
/tag/#Slug TagR GET
|
||||||
/banned-tags BannedTagsR GET PUT
|
/banned-tags BannedTagsR GET PUT
|
||||||
|
|
||||||
|
/lts/*Texts LtsR GET
|
||||||
|
/nightly/*Texts NightlyR GET
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
$forall (ident, title, _uploaded, display, handle) <- stackages
|
$forall (ident, title, _uploaded, display, handle) <- stackages
|
||||||
<li>
|
<li>
|
||||||
<strong>
|
<strong>
|
||||||
<a href=@{StackageHomeR ident}>
|
<a href=@{SnapshotR ident StackageHomeR}>
|
||||||
#{title}
|
#{title}
|
||||||
<p>
|
<p>
|
||||||
#{display} (#{handle})
|
#{display} (#{handle})
|
||||||
|
|||||||
@ -131,7 +131,7 @@ $newline never
|
|||||||
<td>
|
<td>
|
||||||
#{version}
|
#{version}
|
||||||
<td>
|
<td>
|
||||||
<a href=@{StackageHomeR slug}>#{fromMaybe title $ stripSuffix ", exclusive" title}
|
<a href=@{SnapshotR slug StackageHomeR}>#{fromMaybe title $ stripSuffix ", exclusive" title}
|
||||||
|
|
||||||
<div .markdown-container .readme-container>
|
<div .markdown-container .readme-container>
|
||||||
<div .container>
|
<div .container>
|
||||||
|
|||||||
@ -7,15 +7,15 @@ $newline never
|
|||||||
$if hasBundle
|
$if hasBundle
|
||||||
<span .separator>
|
<span .separator>
|
||||||
<span>
|
<span>
|
||||||
<a href=@{StackageMetadataR slug} title="View metadata on this snapshot, such as package versions">
|
<a href=@{SnapshotR slug StackageMetadataR} title="View metadata on this snapshot, such as package versions">
|
||||||
\Metadata
|
\Metadata
|
||||||
<span .separator>
|
<span .separator>
|
||||||
<span>
|
<span>
|
||||||
<a href=@{StackageBundleR slug} title="This is useful for making modifications to an existing snapshot">
|
<a href=@{SnapshotR slug StackageBundleR} title="This is useful for making modifications to an existing snapshot">
|
||||||
\Bundle
|
\Bundle
|
||||||
<span .separator>
|
<span .separator>
|
||||||
<span>
|
<span>
|
||||||
<a href=@{StackageCabalConfigR slug} title="If you want to stick with upstream Hackage but get a stable package set">
|
<a href=@{SnapshotR slug StackageCabalConfigR} title="If you want to stick with upstream Hackage but get a stable package set">
|
||||||
\cabal.config
|
\cabal.config
|
||||||
$if stackageHasHaddocks stackage
|
$if stackageHasHaddocks stackage
|
||||||
<span .separator>
|
<span .separator>
|
||||||
@ -28,7 +28,7 @@ $newline never
|
|||||||
.
|
.
|
||||||
<p>
|
<p>
|
||||||
<pre>
|
<pre>
|
||||||
remote-repo: stackage-#{slug}:@{StackageHomeR slug}
|
remote-repo: stackage-#{slug}:@{SnapshotR slug StackageHomeR}
|
||||||
$maybe _ <- minclusive
|
$maybe _ <- minclusive
|
||||||
<p>
|
<p>
|
||||||
<a href="https://github.com/fpco/stackage/wiki/Stackage-Server-FAQ#whats-the-difference-between-inclusive-and-exclusive-snapshots">What's the difference between inclusive and exclusive snapshots?</a>
|
<a href="https://github.com/fpco/stackage/wiki/Stackage-Server-FAQ#whats-the-difference-between-inclusive-and-exclusive-snapshots">What's the difference between inclusive and exclusive snapshots?</a>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<h1>Upload Haddocks
|
<h1>Upload Haddocks
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href=@{StackageHomeR slug}>Return to snapshot
|
<a href=@{SnapshotR slug StackageHomeR}>Return to snapshot
|
||||||
|
|
||||||
$if stackageHasHaddocks
|
$if stackageHasHaddocks
|
||||||
<div .alert .alert-warning>You have already uploaded Haddocks. Uploading again will delete the old contents.
|
<div .alert .alert-warning>You have already uploaded Haddocks. Uploading again will delete the old contents.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user