Override safe.bareRepository for git remotes

Fix using git remotes that are bare when git is configured
with safe.bareRepository = explicit

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2023-09-07 14:56:26 -04:00
parent cbfd214993
commit baf8e4f6ed
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
7 changed files with 37 additions and 19 deletions

View file

@ -72,18 +72,21 @@ read' repo = go repo
go _ = assertLocal repo $ error "internal"
git_config addparams d = withCreateProcess p (git_config' p)
where
params = addparams ++ safedirparam
params = addparams ++ explicitrepoparams
++ ["config", "--null", "--list"]
p = (proc "git" params)
{ cwd = Just (fromRawFilePath d)
, env = gitEnv repo
, std_out = CreatePipe
}
safedirparam = if safeDirectory repo
-- Use * rather than d, because git treats
-- "dir/" differently than "dir" when comparing for
-- safe.directory purposes.
then ["-c", "safe.directory=*"]
explicitrepoparams = if repoPathSpecifiedExplicitly repo
then
-- Use * rather than d, because git treats
-- "dir/" differently than "dir" when comparing
-- for safe.directory purposes.
[ "-c", "safe.directory=*"
, "-c", "safe.bareRepository=all"
]
else []
git_config' p _ (Just hout) _ pid =
forceSuccessProcess p pid

View file

@ -287,6 +287,6 @@ newFrom l = Repo
, gitEnvOverridesGitDir = False
, gitGlobalOpts = []
, gitDirSpecifiedExplicitly = False
, safeDirectory = False
, repoPathSpecifiedExplicitly = False
}

View file

@ -53,8 +53,11 @@ data Repo = Repo
, gitGlobalOpts :: [CommandParam]
-- True only when --git-dir or GIT_DIR was used
, gitDirSpecifiedExplicitly :: Bool
-- Set -c safe.directory when using this repository.
, safeDirectory :: Bool
-- Use when the path to the repository was specified explicitly,
-- eg in a git remote, and so it's safe to set
-- -c safe.directory=* and -c safe.bareRepository=all
-- when using this repository.
, repoPathSpecifiedExplicitly :: Bool
} deriving (Show, Eq, Ord)
newtype ConfigKey = ConfigKey S.ByteString