test suite saved my bacon
git config reading memoization shouldn't be used when changing config
This commit is contained in:
parent
a1885bd116
commit
0093a456e8
2 changed files with 21 additions and 13 deletions
|
@ -21,8 +21,7 @@ data ConfigKey = ConfigKey String
|
|||
setConfig :: ConfigKey -> String -> Annex ()
|
||||
setConfig (ConfigKey key) value = do
|
||||
inRepo $ Git.Command.run "config" [Param key, Param value]
|
||||
-- re-read git config and update the repo's state
|
||||
newg <- inRepo Git.Config.read
|
||||
newg <- inRepo Git.Config.reRead
|
||||
Annex.changeState $ \s -> s { Annex.repo = newg }
|
||||
|
||||
{- Unsets a git config setting. (Leaves it in state currently.) -}
|
||||
|
|
|
@ -28,19 +28,28 @@ getMaybe :: String -> Repo -> Maybe String
|
|||
getMaybe key repo = M.lookup key (config repo)
|
||||
|
||||
{- Runs git config and populates a repo with its config.
|
||||
- Cannot use pipeRead because it relies on the config having been already
|
||||
- Avoids re-reading config when run repeatedly. -}
|
||||
read :: Repo -> IO Repo
|
||||
read repo@(Repo { config = c })
|
||||
| c == M.empty = read' repo
|
||||
| otherwise = return repo
|
||||
|
||||
{- Reads config even if it was read before. -}
|
||||
reRead :: Repo -> IO Repo
|
||||
reRead = read'
|
||||
|
||||
{- Cannot use pipeRead because it relies on the config having been already
|
||||
- read. Instead, chdir to the repo.
|
||||
-}
|
||||
read :: Repo -> IO Repo
|
||||
read repo@(Repo { location = Local { gitdir = d } }) = read' repo d
|
||||
read repo@(Repo { location = LocalUnknown d }) = read' repo d
|
||||
read r = assertLocal r $ error "internal"
|
||||
read' :: Repo -> FilePath -> IO Repo
|
||||
read' repo@(Repo { config = c}) d
|
||||
| c == M.empty = bracketCd d $
|
||||
pOpen ReadFromPipe "git" ["config", "--null", "--list"] $
|
||||
hRead repo
|
||||
| otherwise = return repo -- config already read
|
||||
read' :: Repo -> IO Repo
|
||||
read' repo = go repo
|
||||
where
|
||||
go Repo { location = Local { gitdir = d } } = git_config d
|
||||
go Repo { location = LocalUnknown d } = git_config d
|
||||
go _ = assertLocal repo $ error "internal"
|
||||
git_config d = bracketCd d $
|
||||
pOpen ReadFromPipe "git" ["config", "--null", "--list"] $
|
||||
hRead repo
|
||||
|
||||
{- Reads git config from a handle and populates a repo with it. -}
|
||||
hRead :: Repo -> Handle -> IO Repo
|
||||
|
|
Loading…
Reference in a new issue