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
This commit is contained in:
Joey Hess 2023-04-04 15:12:52 -04:00
parent 66eb63dd82
commit e91bf784cd
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 23 additions and 7 deletions

View file

@ -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))

View file

@ -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 <id@joeyh.name> Fri, 31 Mar 2023 12:48:54 -0400