Bug fix: Git config settings passed to git-annex -c did not always take effect.

When Config.setConfig runs, it throws away the old Repo and loads a new
one. So, add an action to adjust the Repo so that -c settings will persist
across that.
This commit is contained in:
Joey Hess 2016-01-22 13:47:41 -04:00
parent ee14601890
commit 99c646615d
Failed to extract signature
3 changed files with 21 additions and 7 deletions

View file

@ -30,6 +30,7 @@ module Annex (
getGitConfig,
changeGitConfig,
changeGitRepo,
adjustGitRepo,
getRemoteGitConfig,
withCurrentState,
changeDirectory,
@ -95,6 +96,7 @@ newtype Annex a = Annex { runAnnex :: ReaderT (MVar AnnexState) IO a }
-- internal state storage
data AnnexState = AnnexState
{ repo :: Git.Repo
, repoadjustment :: (Git.Repo -> IO Git.Repo)
, gitconfig :: GitConfig
, backends :: [BackendA Annex]
, remotes :: [Types.Remote.RemoteA Annex]
@ -141,6 +143,7 @@ data AnnexState = AnnexState
newState :: GitConfig -> Git.Repo -> AnnexState
newState c r = AnnexState
{ repo = r
, repoadjustment = return
, gitconfig = c
, backends = []
, remotes = []
@ -295,10 +298,20 @@ changeGitConfig a = changeState $ \s -> s { gitconfig = a (gitconfig s) }
{- Changing the git Repo data also involves re-extracting its GitConfig. -}
changeGitRepo :: Git.Repo -> Annex ()
changeGitRepo r = changeState $ \s -> s
{ repo = r
, gitconfig = extractGitConfig r
}
changeGitRepo r = do
adjuster <- getState repoadjustment
r' <- liftIO $ adjuster r
changeState $ \s -> s
{ repo = r'
, gitconfig = extractGitConfig r'
}
{- Adds an adjustment to the Repo data. Adjustments persist across reloads
- of the repo's config. -}
adjustGitRepo :: (Git.Repo -> IO Git.Repo) -> Annex ()
adjustGitRepo a = do
changeState $ \s -> s { repoadjustment = \r -> repoadjustment s r >>= a }
changeGitRepo =<< gitRepo
{- Gets the RemoteGitConfig from a remote, given the Git.Repo for that
- remote. -}

View file

@ -87,9 +87,8 @@ gitAnnexGlobalOptions = commonGlobalOptions ++
where
setnumcopies n = Annex.changeState $ \s -> s { Annex.forcenumcopies = Just $ NumCopies n }
setuseragent v = Annex.changeState $ \s -> s { Annex.useragent = Just v }
setgitconfig v = inRepo (Git.Config.store v)
>>= pure . (\r -> r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] })
>>= Annex.changeGitRepo
setgitconfig v = Annex.adjustGitRepo $ \r -> Git.Config.store v $
r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] }
setdesktopnotify v = Annex.changeState $ \s -> s { Annex.desktopnotify = Annex.desktopnotify s <> v }
{- Parser that accepts all non-option params. -}

2
debian/changelog vendored
View file

@ -11,6 +11,8 @@ git-annex (6.20160115) UNRELEASED; urgency=medium
added directly to git due to annex.largefiles configuration.)
(Also done by add --json and import --json)
* registerurl: Check if a remote claims the url, same as addurl does.
* Bug fix: Git config settings passed to git-annex -c did not always take
effect.
-- Joey Hess <id@joeyh.name> Fri, 15 Jan 2016 14:05:01 -0400