Support user.useConfigOnly git config
authorJoey Hess <joeyh@joeyh.name>
Tue, 4 Apr 2023 19:12:52 +0000 (15:12 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 4 Apr 2023 19:12:52 +0000 (15:12 -0400)
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
CHANGELOG

index e0586ae78bc5449ee9a789e02992a6255ae7a557..b153518499b1a05dd9f43990a152e0955722d5c4 100644 (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))
index b8973b66362c80b9b1feb941b2455bd85fb91fd5..76037f24d346cc8529527156995b197b70982577 100644 (file)
--- 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 <id@joeyh.name>  Fri, 31 Mar 2023 12:48:54 -0400