work around git segfault

Work around bug in git 2.37 that causes a segfault when when
core.untrackedCache is set, and broke git-annex init.

Depending on when git gets fixed and how widely the buggy versions are
used, this could be reverted quite soon, or need to linger for a long time.
It only makes git-annex init a tiny bit slower in a new repo.

Sponsored-by: Max Thoursie on Patreon
This commit is contained in:
Joey Hess 2022-08-04 14:20:57 -04:00
parent 008204b2f3
commit a23fd7349f
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
3 changed files with 23 additions and 0 deletions

View file

@ -133,6 +133,11 @@ getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha
fromMaybe (error $ "failed to create " ++ fromRef name)
<$> branchsha
go False = withIndex' True $ do
-- Create the index file. This is not necessary,
-- except to avoid a bug in git that causes
-- git write-tree to segfault when the index file does not
-- exist.
inRepo $ flip Git.UpdateIndex.streamUpdateIndex []
cmode <- annexCommitMode <$> Annex.getGitConfig
cmessage <- createMessage
inRepo $ Git.Branch.commitAlways cmode cmessage fullname []

View file

@ -11,6 +11,8 @@ git-annex (10.20220725) UNRELEASED; urgency=medium
* Allow find --branch to be used in a bare repository, the same as
the deprecated findref can be.
* add --dry-run: New option.
* Work around bug in git 2.37 that causes a segfault
when when core.untrackedCache is set, and broke git-annex init.
-- Joey Hess <id@joeyh.name> Mon, 25 Jul 2022 15:35:45 -0400

View file

@ -0,0 +1,16 @@
[[!comment format=mdwn
username="joey"
subject="""comment 6"""
date="2022-08-04T17:46:32Z"
content="""
Now 2 weeks since the segfault in git has been known, and they have not
fixed it.
Now feeling that it's might be worth git-annex init avoiding the
segfault, by making sure to do something that creates the index file before
write-tree. So I don't have to worry about when this gets fixed in git,
or the chances that a buggy release will start being widely used for a long
time.
Yeah, done so.
"""]]