From e91bf784cd044852f939d3b13d6418e4d5fa5e0d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 4 Apr 2023 15:12:52 -0400 Subject: [PATCH] Support user.useConfigOnly git config When it's set and git cannot determine user.name or user.email, this will result in git-annex init failing when committing to create the git-annex branch. Other git-annex commands that commit can also fail. Sponsored-by: Jack Hill on Patreon --- Annex/Environment.hs | 29 ++++++++++++++++++++++------- CHANGELOG | 1 + 2 files changed, 23 insertions(+), 7 deletions(-) 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