Skip to content
This repository has been archived by the owner on Mar 4, 2023. It is now read-only.

Commit

Permalink
Add a few more session-inspection functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
nominolo committed May 10, 2011
1 parent d3d352f commit c5c7883
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
21 changes: 19 additions & 2 deletions src/Scion/Session.hs
Expand Up @@ -29,7 +29,7 @@ import Scion.Cabal ( CabalException )
import Control.Applicative import Control.Applicative
import Control.Concurrent import Control.Concurrent
import Control.Exception ( throwIO ) import Control.Exception ( throwIO )
import Control.Monad ( when, unless, forever ) import Control.Monad ( when, unless, forever, filterM )
import qualified Data.ByteString as S import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L import qualified Data.ByteString.Lazy as L
import Data.Char ( ord ) import Data.Char ( ord )
Expand All @@ -39,14 +39,15 @@ import Data.Time.Clock.POSIX ( posixSecondsToUTCTime )
import System.Directory ( doesFileExist, getTemporaryDirectory, import System.Directory ( doesFileExist, getTemporaryDirectory,
removeDirectoryRecursive ) removeDirectoryRecursive )
import System.Exit ( ExitCode(..) ) import System.Exit ( ExitCode(..) )
import System.FilePath ( dropFileName, (</>), takeFileName ) import System.FilePath ( dropFileName, (</>), takeFileName, makeRelative )
import System.IO import System.IO
import System.IO.Temp ( createTempDirectory ) import System.IO.Temp ( createTempDirectory )
import System.PosixCompat.Files ( getFileStatus, modificationTime ) import System.PosixCompat.Files ( getFileStatus, modificationTime )
import System.Process ( getProcessExitCode, terminateProcess ) import System.Process ( getProcessExitCode, terminateProcess )


-- ------------------------------------------------------------------- -- -------------------------------------------------------------------


-- | Throw a 'ScionException' if the file does not exist.
ensureFileExists :: FilePath -> ScionM () ensureFileExists :: FilePath -> ScionM ()
ensureFileExists file = do ensureFileExists file = do
ok <- io $ doesFileExist file ok <- io $ doesFileExist file
Expand Down Expand Up @@ -80,6 +81,7 @@ createSession sc0@FileConfig{ sc_fileName = file } = do
, sessionOutputDir = outdir , sessionOutputDir = outdir
, sessionModuleGraph = graph , sessionModuleGraph = graph
, sessionLastCompilation = rslt , sessionLastCompilation = rslt
, sessionHomeDir = working_dir
} }


registerSession sid sess0 registerSession sid sess0
Expand Down Expand Up @@ -115,6 +117,7 @@ createSession sc0@CabalConfig{ sc_cabalFile = file } = do
, sessionOutputDir = build_dir , sessionOutputDir = build_dir
, sessionModuleGraph = graph , sessionModuleGraph = graph
, sessionLastCompilation = rslt , sessionLastCompilation = rslt
, sessionHomeDir = working_dir
} }


registerSession sid sess0 registerSession sid sess0
Expand All @@ -137,6 +140,7 @@ createSession sc@EmptyConfig{} = do
, sessionOutputDir = outdir , sessionOutputDir = outdir
, sessionModuleGraph = graph , sessionModuleGraph = graph
, sessionLastCompilation = rslt , sessionLastCompilation = rslt
, sessionHomeDir = working_dir
} }


registerSession sid sess0 registerSession sid sess0
Expand All @@ -162,6 +166,9 @@ sessionNotes :: SessionId -> ScionM Notes
sessionNotes sid = do sessionNotes sid = do
compilationNotes . sessionLastCompilation <$> getSessionState sid compilationNotes . sessionLastCompilation <$> getSessionState sid


sessionModules :: SessionId -> ScionM [ModuleSummary]
sessionModules sid = sessionModuleGraph <$> getSessionState sid

supportedLanguagesAndExtensions :: ScionM [Extension] supportedLanguagesAndExtensions :: ScionM [Extension]
supportedLanguagesAndExtensions = do supportedLanguagesAndExtensions = do
exts <- getExtensions exts <- getExtensions
Expand Down Expand Up @@ -365,3 +372,13 @@ ignoreMostErrors act = do
HandlerM $ \(ex :: RecConError) -> return (Left (show ex)) HandlerM $ \(ex :: RecConError) -> return (Left (show ex))
] ]


fileSessions :: FilePath -> ScionM [SessionId]
fileSessions path = do
filterM (fileInSession path) =<< activeSessions

fileInSession :: FilePath -> SessionId -> ScionM Bool
fileInSession path0 sid = do
home <- sessionHomeDir <$> getSessionState sid
let path = makeRelative home path0
mods <- sessionModules sid
return $ not $ null [ m | m <- mods, ms_location m == path ]
4 changes: 4 additions & 0 deletions src/Scion/Types/Monad.hs
Expand Up @@ -102,6 +102,10 @@ doesSessionExist sid = ScionM $ \r -> do
Just _ -> return True Just _ -> return True
Nothing -> return False Nothing -> return False


activeSessions :: ScionM [SessionId]
activeSessions = ScionM $ \r -> do
M.keys . gsSessions <$> readIORef r

-- | Unregister a 'SessionId'. NOTE: Does not stop the worker. -- | Unregister a 'SessionId'. NOTE: Does not stop the worker.
unregisterSession :: SessionId -> ScionM () unregisterSession :: SessionId -> ScionM ()
unregisterSession sid = ScionM $ \r -> unregisterSession sid = ScionM $ \r ->
Expand Down
5 changes: 4 additions & 1 deletion src/Scion/Types/Session.hs
Expand Up @@ -124,6 +124,8 @@ data SessionState = SessionState
-- caches to speed things up. -- caches to speed things up.
, sessionModuleGraph :: [ModuleSummary] , sessionModuleGraph :: [ModuleSummary]
, sessionLastCompilation :: CompilationResult , sessionLastCompilation :: CompilationResult
, sessionHomeDir :: FilePath
-- ^ All file paths are relative to this directory.
} deriving (Show) } deriving (Show)


instance Binary SessionConfig where instance Binary SessionConfig where
Expand Down Expand Up @@ -217,7 +219,8 @@ data ModuleSummary = ModuleSummary


instance Show ModuleSummary where instance Show ModuleSummary where
show ms = show ms =
"<summary:" ++ show (ms_module ms) ++ ">" "<summary:" ++ show (ms_module ms) ++ "," ++
ms_location ms ++ ">"


instance Binary ModuleSummary where instance Binary ModuleSummary where
put (ModuleSummary mdl ft imps loc) = put (ModuleSummary mdl ft imps loc) =
Expand Down

0 comments on commit c5c7883

Please sign in to comment.