From bb86eebfbd2ae01b19bf0d5c22ea8a0d0287c18c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 13 Nov 2015 13:35:29 -0400 Subject: [PATCH] init: Automatically enable annex.pidlock when necessary. --- Annex/Init.hs | 29 ++++++++++++++++++++++++++++- debian/changelog | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Annex/Init.hs b/Annex/Init.hs index 03915904e0..65e9aa474a 100644 --- a/Annex/Init.hs +++ b/Annex/Init.hs @@ -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." diff --git a/debian/changelog b/debian/changelog index 764823e6c2..1504c83ca1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Wed, 04 Nov 2015 12:50:20 -0400 -- 2.30.2