From 4eb51126819fe01a003688267f481c6d8014ef47 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 21 Mar 2012 23:41:01 -0400 Subject: [PATCH] rationalize getConfig getConfig got a remote-specific config, and this confusing name caused it to be used a couple of places that only were interested in global configs. Rename to getRemoteConfig and make getConfig only get global configs. There are no behavior changes here, but remote..annex-web-options never actually worked (and per-remote web options is a very unlikely to be useful case so I didn't make it work), so fix the documentation for it. --- Annex/Content.hs | 3 +-- Command/Status.hs | 13 ++++++------- Config.hs | 20 ++++++++++++-------- Remote/Bup.hs | 4 ++-- Remote/Directory.hs | 2 +- Remote/Git.hs | 2 +- Remote/Helper/Hooks.hs | 2 +- Remote/Helper/Ssh.hs | 2 +- Remote/Hook.hs | 7 +++---- Remote/Rsync.hs | 4 ++-- doc/git-annex.mdwn | 16 ++++++++-------- 11 files changed, 38 insertions(+), 37 deletions(-) diff --git a/Annex/Content.hs b/Annex/Content.hs index 1794fb5d93..e0cfa7227f 100644 --- a/Annex/Content.hs +++ b/Annex/Content.hs @@ -313,8 +313,7 @@ saveState oneshot = do {- Downloads content from any of a list of urls. -} downloadUrl :: [Url.URLString] -> FilePath -> Annex Bool downloadUrl urls file = do - g <- gitRepo - o <- map Param . words <$> getConfig g "web-options" "" + o <- map Param . words <$> getConfig "annex.web-options" "" liftIO $ anyM (\u -> Url.download u o file) urls {- Copies a key's content, when present, to a temp file. diff --git a/Command/Status.hs b/Command/Status.hs index 0003748714..aaf8489054 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -172,14 +172,13 @@ bloom_info = stat "bloom filter size" $ json id $ do return $ size ++ note disk_size :: Stat -disk_size = stat "available local disk space" $ json id $ lift go +disk_size = stat "available local disk space" $ json id $ lift $ + if Build.SysConfig.statfs_sanity_checked == Just True + then calcfree + <$> getDiskReserve False + <*> inRepo (getFileSystemStats . gitAnnexDir) + else return unknown where - go - | Build.SysConfig.statfs_sanity_checked == Just True = - calcfree - <$> getDiskReserve False - <*> inRepo (getFileSystemStats . gitAnnexDir) - | otherwise = return unknown calcfree reserve (Just (FileSystemStats { fsStatBytesAvailable = have })) = roughSize storageUnits True $ nonneg $ have - reserve calcfree _ _ = unknown diff --git a/Config.hs b/Config.hs index aecf77a2a7..39fe3333b0 100644 --- a/Config.hs +++ b/Config.hs @@ -25,11 +25,15 @@ setConfig k value = do newg <- inRepo Git.Config.read Annex.changeState $ \s -> s { Annex.repo = newg } +{- Looks up a git config setting in git config. -} +getConfig :: ConfigKey -> String -> Annex String +getConfig key def = fromRepo $ Git.Config.get key def + {- Looks up a per-remote config setting in git config. - Failing that, tries looking for a global config option. -} -getConfig :: Git.Repo -> ConfigKey -> String -> Annex String -getConfig r key def = do - def' <- fromRepo $ Git.Config.get ("annex." ++ key) def +getRemoteConfig :: Git.Repo -> ConfigKey -> String -> Annex String +getRemoteConfig r key def = do + def' <- getConfig key def fromRepo $ Git.Config.get (remoteConfig r key) def' {- A per-remote config setting in git config. -} @@ -41,11 +45,11 @@ remoteConfig r key = "remote." ++ fromMaybe "" (Git.remoteName r) ++ ".annex-" + - is set and prints a number, that is used. -} remoteCost :: Git.Repo -> Int -> Annex Int remoteCost r def = do - cmd <- getConfig r "cost-command" "" + cmd <- getRemoteConfig r "cost-command" "" (fromMaybe def . readish) <$> if not $ null cmd then liftIO $ snd <$> pipeFrom "sh" ["-c", cmd] - else getConfig r "cost" "" + else getRemoteConfig r "cost" "" cheapRemoteCost :: Int cheapRemoteCost = 100 @@ -71,7 +75,8 @@ prop_cost_sane = False `notElem` {- Checks if a repo should be ignored. -} repoNotIgnored :: Git.Repo -> Annex Bool -repoNotIgnored r = not . fromMaybe False . Git.configTrue <$> getConfig r "ignore" "" +repoNotIgnored r = not . fromMaybe False . Git.configTrue + <$> getRemoteConfig r "ignore" "" {- If a value is specified, it is used; otherwise the default is looked up - in git config. forcenumcopies overrides everything. -} @@ -91,8 +96,7 @@ getTrustLevel r = fromRepo $ Git.Config.getMaybe $ remoteConfig r "trustlevel" {- Gets annex.diskreserve setting. -} getDiskReserve :: Bool -> Annex Integer getDiskReserve sanitycheck = do - g <- gitRepo - r <- getConfig g "diskreserve" "" + r <- getConfig "diskreserve" "" when sanitycheck $ check r return $ fromMaybe megabyte $ readSize dataUnits r where diff --git a/Remote/Bup.hs b/Remote/Bup.hs index 4ac91e945f..54aff75058 100644 --- a/Remote/Bup.hs +++ b/Remote/Bup.hs @@ -35,7 +35,7 @@ remote = RemoteType { gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex Remote gen r u c = do - buprepo <- getConfig r "buprepo" (error "missing buprepo") + buprepo <- getRemoteConfig r "buprepo" (error "missing buprepo") cst <- remoteCost r (if bupLocal buprepo then semiCheapRemoteCost else expensiveRemoteCost) bupr <- liftIO $ bup2GitRemote buprepo (u', bupr') <- getBupUUID bupr u @@ -99,7 +99,7 @@ pipeBup params inh outh = do bupSplitParams :: Git.Repo -> BupRepo -> Key -> CommandParam -> Annex [CommandParam] bupSplitParams r buprepo k src = do - o <- getConfig r "bup-split-options" "" + o <- getRemoteConfig r "bup-split-options" "" let os = map Param $ words o showOutput -- make way for bup output return $ bupParams "split" buprepo diff --git a/Remote/Directory.hs b/Remote/Directory.hs index ecbf511d64..3627d9a9ad 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -33,7 +33,7 @@ remote = RemoteType { gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex Remote gen r u c = do - dir <- getConfig r "directory" (error "missing directory") + dir <- getRemoteConfig r "directory" (error "missing directory") cst <- remoteCost r cheapRemoteCost let chunksize = chunkSize c return $ encryptableRemote c diff --git a/Remote/Git.hs b/Remote/Git.hs index 3725edd3a2..541b050994 100644 --- a/Remote/Git.hs +++ b/Remote/Git.hs @@ -300,7 +300,7 @@ rsyncParamsRemote r sending key file = do rsyncParams :: Git.Repo -> Annex [CommandParam] rsyncParams r = do - o <- getConfig r "rsync-options" "" + o <- getRemoteConfig r "rsync-options" "" return $ options ++ map Param (words o) where -- --inplace to resume partial files diff --git a/Remote/Helper/Hooks.hs b/Remote/Helper/Hooks.hs index ed329b914c..2864a8ed58 100644 --- a/Remote/Helper/Hooks.hs +++ b/Remote/Helper/Hooks.hs @@ -84,7 +84,7 @@ runHooks r starthook stophook a = do liftIO $ closeFd fd lookupHook :: Remote -> String -> Annex (Maybe String) -lookupHook r n = go =<< getConfig (repo r) hookname "" +lookupHook r n = go =<< getRemoteConfig (repo r) hookname "" where go "" = return Nothing go command = return $ Just command diff --git a/Remote/Helper/Ssh.hs b/Remote/Helper/Ssh.hs index c61d1b96f2..4c5eef0e6c 100644 --- a/Remote/Helper/Ssh.hs +++ b/Remote/Helper/Ssh.hs @@ -19,7 +19,7 @@ import Annex.Ssh - passed command. -} sshToRepo :: Git.Repo -> [CommandParam] -> Annex [CommandParam] sshToRepo repo sshcmd = do - opts <- map Param . words <$> getConfig repo "ssh-options" "" + opts <- map Param . words <$> getRemoteConfig repo "ssh-options" "" params <- sshParams (Git.Url.hostuser repo, Git.Url.port repo) opts return $ params ++ sshcmd diff --git a/Remote/Hook.hs b/Remote/Hook.hs index 1e5c27b91f..1c87823caa 100644 --- a/Remote/Hook.hs +++ b/Remote/Hook.hs @@ -30,7 +30,7 @@ remote = RemoteType { gen :: Git.Repo -> UUID -> Maybe RemoteConfig -> Annex Remote gen r u c = do - hooktype <- getConfig r "hooktype" (error "missing hooktype") + hooktype <- getRemoteConfig r "hooktype" (error "missing hooktype") cst <- remoteCost r expensiveRemoteCost return $ encryptableRemote c (storeEncrypted hooktype) @@ -74,15 +74,14 @@ hookEnv k f = Just $ fileenv f ++ keyenv lookupHook :: String -> String -> Annex (Maybe String) lookupHook hooktype hook =do - g <- gitRepo - command <- getConfig g hookname "" + command <- getConfig hookname "" if null command then do warning $ "missing configuration for " ++ hookname return Nothing else return $ Just command where - hookname = hooktype ++ "-" ++ hook ++ "-hook" + hookname = "annex." ++ hooktype ++ "-" ++ hook ++ "-hook" runHook :: String -> String -> Key -> Maybe FilePath -> Annex Bool -> Annex Bool runHook hooktype hook k f a = maybe (return False) run =<< lookupHook hooktype hook diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs index 03c9911d78..571cd8f5ee 100644 --- a/Remote/Rsync.hs +++ b/Remote/Rsync.hs @@ -60,8 +60,8 @@ gen r u c = do genRsyncOpts :: Git.Repo -> Annex RsyncOpts genRsyncOpts r = do - url <- getConfig r "rsyncurl" (error "missing rsyncurl") - opts <- getConfig r "rsync-options" "" + url <- getRemoteConfig r "rsyncurl" (error "missing rsyncurl") + opts <- getRemoteConfig r "rsync-options" "" return $ RsyncOpts url $ map Param $ filter safe $ words opts where safe o diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index dd94ccc0c3..72301c0719 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -696,26 +696,26 @@ Here are all the supported configuration settings. to or from this remote. For example, to force ipv6, and limit the bandwidth to 100Kbyte/s, set it to "-6 --bwlimit 100" -* `remote..annex-web-options` - - Options to use when using wget or curl to download a file from the web. - (wget is always used in preference to curl if available). - For example, to force ipv4 only, set it to "-4" - * `remote..annex-bup-split-options` Options to pass to bup split when storing content in this remote. For example, to limit the bandwidth to 100Kbye/s, set it to "--bwlimit 100k" (There is no corresponding option for bup join.) -* `annex.ssh-options`, `annex.rsync-options`, `annex.web-options, `annex.bup-split-options` +* `annex.ssh-options`, `annex.rsync-options`, `annex.bup-split-options` Default ssh, rsync, wget/curl, and bup options to use if a remote does not have specific options. +* `annex.web-options` + + Options to use when using wget or curl to download a file from the web. + (wget is always used in preference to curl if available). + For example, to force ipv4 only, set it to "-4" + * `remote..rsyncurl` - Used by rsunc special remotes, this configures + Used by rsync special remotes, this configures the location of the rsync repository to use. Normally this is automaticaly set up by `git annex initremote`, but you can change it if needed.