add lsof build deps

Check for it in configure; and add a --force option for people without it
who want to live dangerously.
This commit is contained in:
Joey Hess 2012-06-15 23:24:01 -04:00
parent 5d63c2a4bb
commit 0052cec2b7
5 changed files with 32 additions and 3 deletions

View file

@ -49,8 +49,10 @@ import Assistant.DaemonStatus
import Assistant.Watcher
import Assistant.Committer
import Assistant.SanityChecker
import qualified Annex
import qualified Utility.Daemon
import Utility.LogFile
import qualified Build.SysConfig as SysConfig
import Control.Concurrent
@ -64,7 +66,12 @@ startDaemon foreground
pidfile <- fromRepo gitAnnexPidFile
go $ Utility.Daemon.daemonize logfd (Just pidfile) False
where
go a = withThreadState $ \st -> do
go a
| SysConfig.lsof = start a
| otherwise =
ifM (Annex.getState Annex.force)
(start a, needlsof)
start a = withThreadState $ \st -> do
dstatus <- startDaemonStatus
liftIO $ a $ do
changechan <- newChangeChan
@ -78,5 +85,17 @@ startDaemon foreground
_ <- forkIO $ sanityCheckerThread st dstatus changechan
watchThread st dstatus changechan
-- this message is optimised away when lsof is available
needlsof = error $ unlines
[ "The lsof command is needed for watch mode to be safe."
, "But this build of git-annex was made without lsof available. Giving up..."
, ""
, "You can use --force if lsof is available now. Please make very sure it is."
, "If run with --force and without lsof available, files can be added to the"
, "annex while a process still has them opened for writing. This can"
, "corrupt data in the annex, and make fsck complain."
, "Use the --force with caution, Luke!"
]
stopDaemon :: Annex ()
stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile