diff options
author | 2012-08-02 00:42:33 -0400 | |
---|---|---|
committer | 2012-08-02 00:42:33 -0400 | |
commit | 60da0d6ad28bff7c601ba631a8ec65030f940367 (patch) | |
tree | 56b137977c3f88c46e406859db8457a08fb80371 /Command/WebApp.hs | |
parent | 23fe661d37ceb6c7bf754e9dc8fd5dda89793b63 (diff) |
full autostart support
git annex assistant --autostart will start separate daemons in each
listed autostart repo
running the webapp outside any git-annex repo will open it on the
first listed autostart repo
Diffstat (limited to 'Command/WebApp.hs')
-rw-r--r-- | Command/WebApp.hs | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/Command/WebApp.hs b/Command/WebApp.hs index f143d8667..d3153f630 100644 --- a/Command/WebApp.hs +++ b/Command/WebApp.hs @@ -18,12 +18,14 @@ import Utility.Daemon (checkDaemon, lockPidFile) import Init import qualified Git.CurrentRepo import qualified Annex +import Locations.UserConfig +import System.Posix.Directory import Control.Concurrent import Control.Concurrent.STM def :: [Command] -def = [oneShot $ noRepo firstRun $ dontCheck repoExists $ +def = [oneShot $ noRepo startNoRepo $ dontCheck repoExists $ command "webapp" paramNothing seek "launch webapp"] seek :: [CommandSeek] @@ -31,7 +33,7 @@ seek = [withNothing start] start :: CommandStart start = notBareRepo $ do - ifM (isInitialized) ( go , liftIO firstRun ) + ifM (isInitialized) ( go , liftIO startNoRepo ) stop where go = do @@ -46,14 +48,24 @@ start = notBareRepo $ do liftIO $ isJust <$> checkDaemon pidfile checkshim f = liftIO $ doesFileExist f -openBrowser :: FilePath -> IO () -openBrowser htmlshim = unlessM (runBrowser url) $ - error $ "failed to start web browser on url " ++ url - where - url = fileUrl htmlshim +{- When run without a repo, see if there is an autoStartFile, + - and if so, start the first available listed repository. + - If not, it's our first time being run! -} +startNoRepo :: IO () +startNoRepo = do + autostartfile <- autoStartFile + ifM (doesFileExist autostartfile) ( autoStart autostartfile , firstRun ) -fileUrl :: FilePath -> String -fileUrl file = "file://" ++ file +autoStart :: FilePath -> IO () +autoStart autostartfile = do + dirs <- lines <$> readFile autostartfile + edirs <- filterM doesDirectoryExist dirs + case edirs of + [] -> firstRun -- what else can I do? Nothing works.. + (d:_) -> do + changeWorkingDirectory d + state <- Annex.new =<< Git.CurrentRepo.get + void $ Annex.eval state $ doCommand start {- Run the webapp without a repository, which prompts the user, makes one, - changes to it, starts the regular assistant, and redirects the @@ -92,3 +104,12 @@ firstRun = do {- Set up the pid file in the new repo. -} dummydaemonize = do liftIO . lockPidFile =<< fromRepo gitAnnexPidFile + +openBrowser :: FilePath -> IO () +openBrowser htmlshim = unlessM (runBrowser url) $ + error $ "failed to start web browser on url " ++ url + where + url = fileUrl htmlshim + +fileUrl :: FilePath -> String +fileUrl file = "file://" ++ file |