git-annex config: guard against non-repo-global configs
git-annex config: Only allow configs be set that are ones git-annex actually supports reading from repo-global config, to avoid confused users trying to set other configs with this.
This commit is contained in:
parent
5a72e3be18
commit
ccd8c43dc8
8 changed files with 136 additions and 110 deletions
44
Config.hs
44
Config.hs
|
@ -5,10 +5,14 @@
|
|||
- Licensed under the GNU AGPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Config where
|
||||
module Config (
|
||||
module Config,
|
||||
annexConfig,
|
||||
remoteAnnexConfig,
|
||||
remoteConfig,
|
||||
) where
|
||||
|
||||
import Annex.Common
|
||||
import qualified Git
|
||||
|
@ -18,12 +22,8 @@ import qualified Annex
|
|||
import Config.Cost
|
||||
import Config.DynamicConfig
|
||||
import Types.Availability
|
||||
import Types.GitConfig
|
||||
import Git.Types
|
||||
import qualified Types.Remote as Remote
|
||||
|
||||
import qualified Data.ByteString as S
|
||||
|
||||
type UnqualifiedConfigKey = S.ByteString
|
||||
|
||||
{- Looks up a setting in git config. This is not as efficient as using the
|
||||
- GitConfig type. -}
|
||||
|
@ -50,31 +50,6 @@ reloadConfig = Annex.changeGitRepo =<< inRepo Git.Config.reRead
|
|||
unsetConfig :: ConfigKey -> Annex ()
|
||||
unsetConfig key = void $ inRepo $ Git.Config.unset key
|
||||
|
||||
class RemoteNameable r where
|
||||
getRemoteName :: r -> RemoteName
|
||||
|
||||
instance RemoteNameable Git.Repo where
|
||||
getRemoteName r = fromMaybe "" (Git.remoteName r)
|
||||
|
||||
instance RemoteNameable RemoteName where
|
||||
getRemoteName = id
|
||||
|
||||
instance RemoteNameable Remote where
|
||||
getRemoteName = Remote.name
|
||||
|
||||
{- A per-remote config setting in git config. -}
|
||||
remoteConfig :: RemoteNameable r => r -> UnqualifiedConfigKey -> ConfigKey
|
||||
remoteConfig r key = ConfigKey $
|
||||
"remote." <> encodeBS' (getRemoteName r) <> "." <> key
|
||||
|
||||
{- A per-remote config annex setting in git config. -}
|
||||
remoteAnnexConfig :: RemoteNameable r => r -> UnqualifiedConfigKey -> ConfigKey
|
||||
remoteAnnexConfig r key = remoteConfig r ("annex-" <> key)
|
||||
|
||||
{- A global annex setting in git config. -}
|
||||
annexConfig :: UnqualifiedConfigKey -> ConfigKey
|
||||
annexConfig key = ConfigKey ("annex." <> key)
|
||||
|
||||
{- Calculates cost for a remote. Either the specific default, or as configured
|
||||
- by remote.<name>.annex-cost, or if remote.<name>.annex-cost-command
|
||||
- is set and prints a number, that is used. -}
|
||||
|
@ -108,8 +83,3 @@ crippledFileSystem = annexCrippledFileSystem <$> Annex.getGitConfig
|
|||
setCrippledFileSystem :: Bool -> Annex ()
|
||||
setCrippledFileSystem b =
|
||||
setConfig (annexConfig "crippledfilesystem") (Git.Config.boolConfig b)
|
||||
|
||||
yesNo :: String -> Maybe Bool
|
||||
yesNo "yes" = Just True
|
||||
yesNo "no" = Just False
|
||||
yesNo _ = Nothing
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue