From fdd1a7beea7fca2e7ec253a943e414555af85dca Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 5 Jul 2013 12:24:28 -0400 Subject: detect system with no dot in FQDN, where git commit will fail, and workaround Sigh, git is so *fragile*. Or rather, across the set of systems that use git-annex, where are no many horribly broken systems.. --- Annex/Environment.hs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'Annex') diff --git a/Annex/Environment.hs b/Annex/Environment.hs index 33569386e..18097d11d 100644 --- a/Annex/Environment.hs +++ b/Annex/Environment.hs @@ -13,10 +13,19 @@ import Common.Annex import Utility.Env import Utility.UserInfo import qualified Git.Config +import Config +import Annex.Exception {- Checks that the system's environment allows git to function. - Git requires a GECOS username, or suitable git configuration, or - - environment variables. -} + - environment variables. + - + - Git also requires the system have a hostname containing a dot. + - Otherwise, it tries various methods to find a FQDN, and will fail if it + - does not. To avoid replicating that code here, which would break if its + - methods change, this function does not check the hostname is valid. + - Instead, code that commits can use ensureCommit. + -} checkEnvironment :: Annex () checkEnvironment = do gitusername <- fromRepo $ Git.Config.getMaybe "user.name" @@ -42,3 +51,12 @@ checkEnvironmentIO = ensureEnv _ _ = noop #endif #endif + +{- Runs an action that commits to the repository, and if it fails, + - sets user.email to a dummy value and tries the action again. -} +ensureCommit :: Annex a -> Annex a +ensureCommit a = either retry return =<< tryAnnex a + where + retry _ = do + setConfig (ConfigKey "user.email") =<< liftIO myUserName + a -- cgit v1.2.3