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.<name>.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.
This commit is contained in:
Joey Hess 2012-03-21 23:41:01 -04:00
parent 52b90e5d4c
commit 4eb5112681
11 changed files with 38 additions and 37 deletions

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.<name>.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.<name>.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.<name>.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.