diff options
author | Joey Hess <joey@kitenet.net> | 2012-02-25 19:15:29 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-02-25 19:15:29 -0400 |
commit | 12b89a3eb81fdac92ec3ea9633bbd9a7d6a72adb (patch) | |
tree | ea35600752cf95dab1522257ee722d29b39fee27 | |
parent | c3fbe07d7ad03944d0967ebfa2b8f65cbc2ad5dc (diff) |
configure: Check if ssh connection caching is supported by the installed version of ssh and default annex.sshcaching accordingly.
-rw-r--r-- | Annex/Content.hs | 3 | ||||
-rw-r--r-- | Annex/Ssh.hs | 4 | ||||
-rw-r--r-- | Config.hs | 2 | ||||
-rw-r--r-- | Git.hs | 12 | ||||
-rw-r--r-- | configure.hs | 7 | ||||
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | debian/control | 1 | ||||
-rw-r--r-- | doc/git-annex.mdwn | 3 |
8 files changed, 27 insertions, 7 deletions
diff --git a/Annex/Content.hs b/Annex/Content.hs index f328051e3..fdd03f320 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -313,7 +313,8 @@ saveState :: Bool -> Annex () saveState oneshot = do Annex.Queue.flush False unless oneshot $ do - alwayscommit <- Git.configTrue <$> fromRepo (Git.Config.get "annex.alwayscommit" "true") + alwayscommit <- fromMaybe True . Git.configTrue + <$> fromRepo (Git.Config.get "annex.alwayscommit" "") if alwayscommit then Annex.Branch.commit "update" else Annex.Branch.stage diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs index df9f0e410..47f0ee4f6 100644 --- a/Annex/Ssh.hs +++ b/Annex/Ssh.hs @@ -16,6 +16,7 @@ import Common.Annex import Annex.LockPool import qualified Git import qualified Git.Config +import qualified Build.SysConfig as SysConfig {- Generates parameters to ssh to a given host (or user@host) on a given - port, with connection caching. -} @@ -37,7 +38,8 @@ sshParams (host, port) opts = go =<< sshInfo (host, port) sshInfo :: (String, Maybe Integer) -> Annex (Maybe FilePath, [CommandParam]) sshInfo (host, port) = do - caching <- Git.configTrue <$> fromRepo (Git.Config.get "annex.sshcaching" "true") + caching <- fromMaybe SysConfig.sshconnectioncaching . Git.configTrue + <$> fromRepo (Git.Config.get "annex.sshcaching" "") if caching then do dir <- fromRepo gitAnnexSshDir @@ -69,7 +69,7 @@ prop_cost_sane = False `notElem` {- Checks if a repo should be ignored. -} repoNotIgnored :: Git.Repo -> Annex Bool -repoNotIgnored r = not . Git.configTrue <$> getConfig r "ignore" "false" +repoNotIgnored r = not . fromMaybe False . Git.configTrue <$> getConfig r "ignore" "" {- If a value is specified, it is used; otherwise the default is looked up - in git config. forcenumcopies overrides everything. -} @@ -85,7 +85,8 @@ assertLocal repo action = else error $ "acting on non-local git repo " ++ repoDescribe repo ++ " not supported" configBare :: Repo -> Bool -configBare repo = maybe unknown configTrue $ M.lookup "core.bare" $ config repo +configBare repo = maybe unknown (fromMaybe False . configTrue) $ + M.lookup "core.bare" $ config repo where unknown = error $ "it is not known if git repo " ++ repoDescribe repo ++ @@ -112,5 +113,10 @@ workTree Repo { location = Dir d } = d workTree Repo { location = Unknown } = undefined {- Checks if a string from git config is a true value. -} -configTrue :: String -> Bool -configTrue s = map toLower s == "true" +configTrue :: String -> Maybe Bool +configTrue s + | s' == "true" = Just True + | s' == "false" = Just False + | otherwise = Nothing + where + s' = map toLower s diff --git a/configure.hs b/configure.hs index 772df3e38..9dcc6a501 100644 --- a/configure.hs +++ b/configure.hs @@ -4,9 +4,11 @@ import System.Directory import Data.List import Data.Maybe import System.Cmd.Utils +import Control.Applicative import Build.TestConfig import Utility.StatFS +import Utility.SafeCommand tests :: [TestCase] tests = @@ -23,6 +25,7 @@ tests = , TestCase "wget" $ testCmd "wget" "wget --version >/dev/null" , TestCase "bup" $ testCmd "bup" "bup --version >/dev/null" , TestCase "gpg" $ testCmd "gpg" "gpg --version >/dev/null" + , TestCase "ssh connection caching" getSshConnectionCaching , TestCase "StatFS" testStatFS ] ++ shaTestCases [1, 256, 512, 224, 384] @@ -66,6 +69,10 @@ getGitVersion = do let version = last $ words $ head $ lines s return $ Config "gitversion" (StringConfig version) +getSshConnectionCaching :: Test +getSshConnectionCaching = Config "sshconnectioncaching" . BoolConfig <$> + boolSystem "sh" [Param "-c", Param "ssh -o ControlPersist=yes -V >/dev/null 2>/dev/null"] + testStatFS :: Test testStatFS = do s <- getFileSystemStats "." diff --git a/debian/changelog b/debian/changelog index 9436d2e6d..94bc09389 100644 --- a/debian/changelog +++ b/debian/changelog @@ -34,6 +34,8 @@ git-annex (3.20120124) UNRELEASED; urgency=low * To avoid commits of data to the git-annex branch after each command is run, set annex.alwayscommit=false. Its data will then be committed less frequently, when a merge or sync is done. + * configure: Check if ssh connection caching is supported by the installed + version of ssh and default annex.sshcaching accordingly. -- Joey Hess <joeyh@debian.org> Tue, 24 Jan 2012 16:21:55 -0400 diff --git a/debian/control b/debian/control index 983c3da1e..28f171c75 100644 --- a/debian/control +++ b/debian/control @@ -23,6 +23,7 @@ Build-Depends: git, uuid, rsync, + openssh-client, Maintainer: Joey Hess <joeyh@debian.org> Standards-Version: 3.9.2 Vcs-Git: git://git.kitenet.net/git-annex diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 0dc22b88d..0928c36f6 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -604,7 +604,8 @@ Here are all the supported configuration settings. * `annex.sshcaching` - By default, git-annex caches ssh connections. To disable this, set to `false`. + By default, git-annex caches ssh connections + (if built using a new enough ssh). To disable this, set to `false`. * `annex.alwayscommit` |