1{-# LANGUAGE OverloadedStrings #-}
2import Network.Wai.Handler.Warp
3import Control.Exception (bracket)
4import Control.Monad (forever)
6import Network.Socket (accept)
7import Control.Monad.IO.Class (liftIO)
8import qualified Data.Enumerator as E
9import qualified Data.Enumerator.Binary as EB
10import Control.Concurrent (forkIO)
11import Network.Wai (responseLBS)
12import Network.HTTP.Types (status200)
13import Data.Enumerator (($$), run_)
15app = const $ return $ responseLBS status200 [("Content-type", "text/plain")] "This is not kept alive under any circumstances"
17main = withManager 30000000 $ \man -> bracket
18 (bindPort (settingsPort set) (settingsHost set))
20 (\socket -> forever $ do
21 (conn, sa) <- accept socket
22 th <- liftIO $ registerKillThread man
24 run_ $ enumSocket th 4096 conn $$ do
26 (len, env) <- parseRequest (settingsPort set) sa
28 res <- E.joinI $ EB.isolate len $$ app env
29 _ <- liftIO $ sendResponse th env conn res
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list