init: Automatically enable annex.pidlock when necessary.
authorJoey Hess <joeyh@joeyh.name>
Fri, 13 Nov 2015 17:35:29 +0000 (13:35 -0400)
committerJoey Hess <joeyh@joeyh.name>
Fri, 13 Nov 2015 17:35:29 +0000 (13:35 -0400)
Annex/Init.hs
debian/changelog

index 03915904e0bcd56cb8ecbddc8b1d9ee0debd3428..65e9aa474aabefcc55373059478a26e5665f5948 100644 (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."
index 764823e6c20f38f6c46967242b32cb6d6f5bbf24..1504c83ca152d1ce0f8ddb155654a3e72ca4e4d7 100644 (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