diff --git a/Annex/Environment.hs b/Annex/Environment.hs index e0586ae78b..b153518499 100644 --- a/Annex/Environment.hs +++ b/Annex/Environment.hs @@ -7,7 +7,11 @@ {-# LANGUAGE OverloadedStrings #-} -module Annex.Environment where +module Annex.Environment ( + checkEnvironment, + checkEnvironmentIO, + ensureCommit, +) where import Annex.Common import qualified Annex @@ -15,6 +19,8 @@ import Utility.UserInfo import qualified Git.Config import Utility.Env.Set +import Control.Exception + {- Checks that the system's environment allows git to function. - Git requires a GECOS username, or suitable git configuration, or - environment variables. @@ -29,7 +35,8 @@ checkEnvironment :: Annex () checkEnvironment = do gitusername <- fromRepo $ Git.Config.getMaybe "user.name" when (isNothing gitusername || gitusername == Just "") $ - liftIO checkEnvironmentIO + unlessM userConfigOnly $ + liftIO checkEnvironmentIO checkEnvironmentIO :: IO () checkEnvironmentIO = whenM (isNothing <$> myUserGecos) $ do @@ -46,8 +53,16 @@ checkEnvironmentIO = whenM (isNothing <$> myUserGecos) $ do ensureCommit :: Annex a -> Annex a ensureCommit a = either retry return =<< tryNonAsync a where - retry _ = do - name <- liftIO $ either (const "unknown") id <$> myUserName - Annex.addGitConfigOverride ("user.name=" ++ name) - Annex.addGitConfigOverride ("user.email=" ++ name) - a + retry e = ifM userConfigOnly + ( liftIO (throwIO e) + , do + name <- liftIO $ either (const "unknown") id <$> myUserName + Annex.addGitConfigOverride ("user.name=" ++ name) + Annex.addGitConfigOverride ("user.email=" ++ name) + a + ) + +userConfigOnly :: Annex Bool +userConfigOnly = do + v <- fromRepo $ Git.Config.getMaybe "user.useconfigonly" + return (fromMaybe False (Git.Config.isTrueFalse' =<< v)) diff --git a/CHANGELOG b/CHANGELOG index b8973b6636..76037f24d3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ git-annex (10.20230330) UNRELEASED; urgency=medium of --unlock-present and --hide-missing adjusted branches. * Avoid setting user.name and user.email in the git config when git is unable to detect them. + * Support user.useConfigOnly git config. -- Joey Hess Fri, 31 Mar 2023 12:48:54 -0400