leksah-server 0.8.0.2 → 0.8.0.3
raw patch · 6 files changed
+78/−21 lines, 6 filesdep +haddockdep ~haddock-leksah
Dependencies added: haddock
Dependency ranges changed: haddock-leksah
Files
- data/prefscoll.lkshp +8/−2
- leksah-server.cabal +3/−3
- src/IDE/HeaderParser.hs +1/−1
- src/IDE/Metainfo/Collector.hs +49/−8
- src/IDE/Metainfo/SourceCollectorH.hs +9/−7
- src/IDE/StrippedPrefs.hs +8/−0
data/prefscoll.lkshp view
@@ -1,4 +1,10 @@ Paths under which haskell sources for packages may be found:- ["~/Develop"]+ [] Maybe a directory for unpacking cabal packages:- Just "~/Haskell"+ Just "~/.leksah-0.8/packageSources"+Maybe an URL to load prebuild metadata :+ Just "http://www.leksah.org"+Port number for server connection:+ 11111+End the server with last connection:+ True
leksah-server.cabal view
@@ -1,5 +1,5 @@ name: leksah-server-version: 0.8.0.2+version: 0.8.0.3 cabal-version: >= 1.2 build-type: Simple license: GPL@@ -26,7 +26,7 @@ pretty >=1.0.1.0, process >=1.0.1.0, time >= 1.1, deepseq >= 1.1, hslogger >= 1.0.7, network >= 2.2 && <= 3.0 if (impl(ghc >= 6.12))- build-depends: haddock-leksah == 2.6.0+ build-depends: haddock >= 2.7.2 else build-depends: haddock-leksah == 2.5.0 if os(windows)@@ -59,7 +59,7 @@ ltk >=0.8 && <= 0.9, mtl >=1.1.0.2, parsec >=2.1.0.1, pretty >=1.0.1.0, process >=1.0.1.0, deepseq >= 1.1, network >= 2.2 && <= 3.0 if (impl(ghc >= 6.12))- build-depends: haddock-leksah == 2.6.0+ build-depends: haddock >= 2.7.2 else build-depends: haddock-leksah == 2.5.0
src/IDE/HeaderParser.hs view
@@ -31,7 +31,7 @@ parseTheHeader :: FilePath -> IO ServerAnswer parseTheHeader filePath = do text <- readFile filePath- opts <- figureOutGhcOpts -- figureOutHaddockOpts+ opts <- figureOutHaddockOpts parseResult <- liftIO $ myParseHeader filePath text opts case parseResult of Left str -> return (ServerFailed str)
src/IDE/Metainfo/Collector.hs view
@@ -55,18 +55,23 @@ setLevel) import System.Log.Handler.Simple(fileHandler) import Network(withSocketsDo)-import Network.Socket (SocketType(..), iNADDR_ANY, SockAddr(..),PortNumber(..))+import Network.Socket+ (inet_addr, SocketType(..), SockAddr(..), PortNumber(..)) import IDE.Utils.Server import System.IO (Handle, hPutStrLn, hGetLine, hFlush, hClose) import IDE.HeaderParser(parseTheHeader) import System.Process (system) import System.Exit (ExitCode(..)) import Distribution.Package (PackageIdentifier(..))+import Data.IORef+import Control.Concurrent (throwTo, ThreadId, myThreadId) -- -------------------------------------------------------------------- -- Command line options -- ++ getThisPackage :: PackageConfig -> PackageIdentifier #if MIN_VERSION_Cabal(1,8,0) getThisPackage = IPI.sourcePackageId@@ -87,6 +92,8 @@ | Debug | Verbosity String | LogFile String+ | Forever+ | EndWithLast deriving (Show,Eq) options :: [OptDescr Flag]@@ -111,6 +118,11 @@ "One of DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY" , Option ['l'] ["logfile"] (ReqArg LogFile "LogFile") "File path for logging messages"+ , Option ['f'] ["forever"] (NoArg Forever)+ "Don't end the server when last connection ends"+ , Option ['c'] ["endWithLast"] (NoArg EndWithLast)+ "End the server when last connection ends"+ ] header :: String@@ -161,6 +173,9 @@ prefsPath <- getConfigFilePathForLoad strippedPreferencesFilename Nothing dataDir prefs <- readStrippedPrefs prefsPath debugM "leksah-server" $ "prefs " ++ show prefs+ connRef <- newIORef []+ threadId <- myThreadId+ localServerAddr <- inet_addr "127.0.0.1" if elem VersionF o then putStrLn $ "Leksah Haskell IDE (server), version " ++ showVersion version@@ -174,6 +189,13 @@ let sources = elem Sources o let rebuild = elem Rebuild o let debug = elem Debug o+ let forever = elem Forever o+ let endWithLast = elem EndWithLast o+ let newPrefs = if forever && not endWithLast+ then prefs{endWithLastConn = False}+ else if not forever && endWithLast+ then prefs{endWithLastConn = True}+ else prefs if elem CollectSystem o then do debugM "leksah-server" "collectSystem"@@ -181,26 +203,45 @@ else case servers of (Nothing:_) -> do- running <- serveOne Nothing (server (PortNum (fromIntegral (serverPort prefs))) prefs)+ running <- serveOne Nothing (server (PortNum (fromIntegral+ (serverPort prefs))) newPrefs connRef threadId localServerAddr) waitFor running return () (Just ps:_) -> do let port = read ps- running <- serveOne Nothing (server (PortNum (fromIntegral port)) prefs)+ running <- serveOne Nothing (server (PortNum+ (fromIntegral port)) newPrefs connRef threadId localServerAddr) waitFor running return () _ -> return () - server port prefs = Server (SockAddrInet port iNADDR_ANY) Stream (doCommands prefs)+ server port prefs connRef threadId hostAddr = Server (SockAddrInet port hostAddr) Stream+ (doCommands prefs connRef threadId) -doCommands :: Prefs -> (Handle, t1, t2) -> IO ()-doCommands prefs (h,n,p) = do+doCommands :: Prefs -> IORef [Handle] -> ThreadId -> (Handle, t1, t2) -> IO ()+doCommands prefs connRef threadId (h,n,p) = do+ atomicModifyIORef connRef (\ list -> (h : list, ()))+ doCommands' prefs connRef threadId (h,n,p)+++doCommands' :: Prefs -> IORef [Handle] -> ThreadId -> (Handle, t1, t2) -> IO ()+doCommands' prefs connRef threadId (h,n,p) = do debugM "leksah-server" $ "***wait" mbLine <- catch (liftM Just (hGetLine h)) (\ (_e :: SomeException) -> do infoM "leksah-server" $ "***lost connection" hClose h- return Nothing)+ atomicModifyIORef connRef (\ list -> (delete h list,()))+ handles <- readIORef connRef+ case handles of+ [] -> do+ when (endWithLastConn prefs) $ do+ infoM "leksah-server" $ "***lost last connection - exiting"+ throwTo threadId ExitSuccess+ --exitSuccess+ infoM "leksah-server" $ "***lost last connection - waiting"+ return Nothing+ _ -> return Nothing) case mbLine of Nothing -> return () Just line -> do@@ -229,7 +270,7 @@ (\ (e :: SomeException) -> do hPutStrLn h (show (ServerFailed (show e))) hFlush h)- doCommands prefs (h,n,p)+ doCommands' prefs connRef threadId (h,n,p) collectSystem :: Prefs -> Bool -> Bool -> Bool -> IO() collectSystem prefs writeAscii forceRebuild findSources = do
src/IDE/Metainfo/SourceCollectorH.hs view
@@ -23,14 +23,12 @@ (PackageDescr(..), TypeDescr(..), RealDescr(..), Descr(..), ModuleDescr(..), PackModule(..), SimpleDescr(..), packageIdentifierToString) -#if MIN_VERSION_haddock_leksah(2,6,0)-import Haddock.Types- (ExportItem(..), DeclInfo,- Interface(..),HsDoc(..))-#else+#ifdef MIN_VERSION_haddock_leksah import Haddock.Types (ExportItem(..), DeclInfo, Interface(..))+#else+import Documentation.Haddock #endif import Distribution.Text (simpleParse) import InstEnv (Instance(..))@@ -50,7 +48,6 @@ import Name (getOccString,getSrcSpan) import PackageConfig (PackageConfig)-import Haddock.Interface (createInterfaces) import Distribution.Verbosity (verbose) import qualified Distribution.InstalledPackageInfo as IPI import IDE.StrippedPrefs (getUnpackDirectory, Prefs(..))@@ -80,6 +77,11 @@ getThisPackage = IPI.package #endif +#ifdef MIN_VERSION_haddock_leksah+#else+type HsDoc = Doc+#endif+ type NDoc = HsDoc Name isEmptyDoc :: NDoc -> Bool@@ -180,7 +182,7 @@ "Can't parse module name" descrs = extractDescrs (PM pid modName) (ifaceDeclMap interface) (ifaceExportItems interface)- (ifaceInstances interface) (ifaceLocals interface)+ (ifaceInstances interface) [] --(ifaceLocals interface) imports = Map.empty --TODO #if MIN_VERSION_ghc(6,12,1)
src/IDE/StrippedPrefs.hs view
@@ -38,6 +38,7 @@ , unpackDirectory :: Maybe FilePath , retreiveURL :: Maybe String , serverPort :: Int+ , endWithLastConn :: Bool } deriving(Eq,Show) defaultPrefs :: Prefs@@ -46,6 +47,7 @@ , unpackDirectory = Nothing , retreiveURL = Just "http://www.leksah.org/" , serverPort = 11111+ , endWithLastConn = True } -- ------------------------------------------------------------@@ -86,6 +88,12 @@ intParser serverPort (\b a -> a{serverPort = b})+ , mkFieldS+ (paraName <<<- ParaName "End the server with last connection" $ emptyParams)+ (PP.text . show)+ boolParser+ endWithLastConn+ (\b a -> a{endWithLastConn = b}) ] -- ------------------------------------------------------------