init: Automatically enable annex.pidlock when necessary.

This commit is contained in:
Joey Hess 2015-11-13 13:35:29 -04:00
parent c2cbe5619b
commit bb86eebfbd
Failed to extract signature
2 changed files with 29 additions and 1 deletions

View file

@ -41,6 +41,7 @@ import Utility.UserInfo
import Utility.FileMode
import Annex.Perms
import System.Posix.User
import qualified Utility.LockFile.Posix as Posix
#endif
genDescription :: Maybe String -> Annex String
@ -74,9 +75,11 @@ initialize mdescription = do
u <- getUUID
describeUUID u =<< genDescription mdescription
-- Everything except for uuid setup.
-- Everything except for uuid setup, shared clone setup, and initial
-- description.
initialize' :: Annex ()
initialize' = do
checkLockSupport
checkFifoSupport
checkCrippledFileSystem
unlessM isBare $
@ -167,6 +170,24 @@ checkCrippledFileSystem = whenM probeCrippledFileSystem $ do
setConfig (ConfigKey "core.symlinks")
(Git.Config.boolConfig False)
probeLockSupport :: Annex Bool
probeLockSupport = do
#ifdef mingw32_HOST_OS
return True
#else
tmp <- fromRepo gitAnnexTmpMiscDir
let f = tmp </> "lockprobe"
createAnnexDirectory tmp
mode <- annexFileMode
liftIO $ do
nukeFile f
ok <- catchBoolIO $ do
Posix.dropLock =<< Posix.lockExclusive (Just mode) f
return True
nukeFile f
return ok
#endif
probeFifoSupport :: Annex Bool
probeFifoSupport = do
#ifdef mingw32_HOST_OS
@ -188,6 +209,12 @@ probeFifoSupport = do
return $ either (const False) isNamedPipe ms
#endif
checkLockSupport :: Annex ()
checkLockSupport = unlessM probeLockSupport $ do
warning "Detected a filesystem without POSIX fcntl lock support."
warning "Enabling annex.pidlock."
setConfig (annexConfig "pidlock") (Git.Config.boolConfig True)
checkFifoSupport :: Annex ()
checkFifoSupport = unlessM probeFifoSupport $ do
warning "Detected a filesystem without fifo support."

1
debian/changelog vendored
View file

@ -29,6 +29,7 @@ git-annex (5.20151102.2) UNRELEASED; urgency=medium
that were missed before.
* Added annex.pidlock and annex.pidlocktimeout configuration to support
filesystems where POSIX fcntl locks cannot be used.
* init: Automatically enable annex.pidlock when necessary.
-- Joey Hess <id@joeyh.name> Wed, 04 Nov 2015 12:50:20 -0400