diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs index 4d623eb0ae..e968959c61 100644 --- a/Assistant/Threads/Committer.hs +++ b/Assistant/Threads/Committer.hs @@ -41,9 +41,9 @@ import Data.Either {- This thread makes git commits at appropriate times. -} commitThread :: NamedThread commitThread = NamedThread "Committer" $ do - delayadd <- liftAnnex $ - maybe delayaddDefault (Just . Seconds) . readish - <$> getConfig (annexConfig "delayadd") "" + delayadd <- liftAnnex $ do + v <- readish <$> getConfig (annexConfig "delayadd") "" + maybe delayaddDefault (return . Just . Seconds) v runEvery (Seconds 1) <~> do -- We already waited one second as a simple rate limiter. -- Next, wait until at least one change is available for @@ -115,13 +115,17 @@ shouldCommit now changes thisSecond c = now `diffUTCTime` changeTime c <= 1 {- OSX needs a short delay after a file is added before locking it down, - - as pasting a file seems to try to set file permissions or otherwise - - access the file after closing it. -} -delayaddDefault :: Maybe Seconds + - when using a non-direct mode repository, as pasting a file seems to + - try to set file permissions or otherwise access the file after closing + - it. -} +delayaddDefault :: Annex (Maybe Seconds) #ifdef darwin_HOST_OS -delayaddDefault = Just $ Seconds 1 +delayaddDefault = ifM isDirect + ( return Nothing + , return $ Just $ Seconds 1 + ) #else -delayaddDefault = Nothing +delayaddDefault = return Nothing #endif {- If there are PendingAddChanges, or InProcessAddChanges, the files diff --git a/Assistant/WebApp/Configurators/Local.hs b/Assistant/WebApp/Configurators/Local.hs index cbde62fce3..0cee7e40f4 100644 --- a/Assistant/WebApp/Configurators/Local.hs +++ b/Assistant/WebApp/Configurators/Local.hs @@ -29,6 +29,7 @@ import Annex.UUID import Types.StandardGroups import Logs.PreferredContent import Utility.UserInfo +import Config import qualified Data.Text as T import Data.Char @@ -144,7 +145,7 @@ getNewRepositoryR = page "Add another repository" (Just Config) $ do FormSuccess (RepositoryPath p) -> lift $ do let path = T.unpack p liftIO $ makeRepo path False - u <- liftIO $ initRepo path Nothing + u <- liftIO $ initRepo True path Nothing runAnnex () $ setStandardGroup u ClientGroup liftIO $ addAutoStart path redirect $ SwitchToRepositoryR path @@ -187,7 +188,7 @@ getAddDriveR = page "Add a removable drive" (Just Config) $ do where make mountpoint = do liftIO $ makerepo dir - u <- liftIO $ initRepo dir $ Just remotename + u <- liftIO $ initRepo False dir $ Just remotename r <- addremote dir remotename runAnnex () $ setStandardGroup u TransferGroup syncRemote r @@ -246,7 +247,7 @@ startFullAssistant path = do webapp <- getYesod url <- liftIO $ do makeRepo path False - u <- initRepo path Nothing + u <- initRepo True path Nothing inDir path $ setStandardGroup u ClientGroup addAutoStart path @@ -271,8 +272,8 @@ inDir dir a = do state <- Annex.new =<< Git.Config.read =<< Git.Construct.fromPath dir Annex.eval state a -initRepo :: FilePath -> Maybe String -> IO UUID -initRepo dir desc = inDir dir $ do +initRepo :: Bool -> FilePath -> Maybe String -> IO UUID +initRepo primary_assistant_repo dir desc = inDir dir $ do {- Initialize a git-annex repository in a directory with a description. -} unlessM isInitialized $ initialize desc @@ -285,6 +286,12 @@ initRepo dir desc = inDir dir $ do , Param "-m" , Param "created repository" ] +#ifdef darwin_HOST_OS + {- Use direct mode repositories by default on OSX, because + - this avoids some problems with the Finder. -} + when primary_assistant_repo $ + setDirect True +#endif getUUID {- Adds a directory to the autostart file. -} diff --git a/debian/changelog b/debian/changelog index fd5444ec6f..ef1c7ee34a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,8 @@ git-annex (3.20121212) UNRELEASED; urgency=low as well as allowing detection of modification of files in direct mode. BSD systems still use kqueue, and cannot detect modifications of existing files in direct mode. + * OSX assistant: Uses direct mode by default when setting up a new + local repository. * kqueue: Fix bug that made broken symlinks not be noticed. * vicfg: Quote filename. Closes: #696193 * Bugfix: Fixed bug parsing transfer info files, where the newline after @@ -23,9 +25,6 @@ git-annex (3.20121212) UNRELEASED; urgency=low * SHA*E backends: Exclude non-alphanumeric characters from extensions. * migrate: Remove leading \ in SHA* checksums, and non-alphanumerics from extensions of SHA*E keys. - - -- Joey Hess Thu, 13 Dec 2012 14:06:43 -0400 - -- Joey Hess Thu, 13 Dec 2012 14:06:43 -0400 diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn b/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn index 2c92ea3fb8..f4ebc9d1e9 100644 --- a/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn +++ b/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn @@ -31,3 +31,7 @@ The sync should be transparent but it's not, and it's error prone. It would even Dropbox even allows to put a symlink in the dropbox directory, and it will sync the file. [[!tag /design/assistant/OSX]] + +> Now the assistant creates new repositories using direct mode on OSX. +> In direct mode, there is no locking of files; they can be modified +> directly. [[done]] --[[Joey]] diff --git a/doc/bugs/pasting_into_annex_on_OSX.mdwn b/doc/bugs/pasting_into_annex_on_OSX.mdwn index 57ad9d3e01..4ea4851af2 100644 --- a/doc/bugs/pasting_into_annex_on_OSX.mdwn +++ b/doc/bugs/pasting_into_annex_on_OSX.mdwn @@ -20,4 +20,9 @@ Please provide any additional information below. >> Reopening since I've heard from someone else that it can still happen. >> --[[Joey]] +>>> Closing again, since the assistant now makes new repositories on OSX +>>> using direct mode, which should avoid this problem. NB: any existing +>>> repositories you have on OSX should be switched to use direct mode by +>>> manually running `git annex direct` in them. [[done]] --[[Joey]] + [[!tag /design/assistant/OSX]] diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 4b4109820a..169c234c10 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -788,8 +788,8 @@ Here are all the supported configuration settings. Makes the watch and assistant commands delay for the specified number of seconds before adding a newly created file to the annex. Normally this is not needed, because they already wait for all writers of the file - to close it. On Mac OSX, this defaults to 1 second, to work around - a bad interaction with software there. + to close it. On Mac OSX, when not using direct mode this defaults to + 1 second, to work around a bad interaction with software there. * `annex.direct`