# git: Use the CLI for loading commit SHAs and details \(\#29351\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/7f5c874a3898cde68dec8f600d0deb8f3b3849cf)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: 7f5c874a3898cde68dec8f600d0deb8f3b3849cf

Requested commit: 7f5c874a3898cde68dec8f600d0deb8f3b3849cf

Commit: 7f5c874a3898cde68dec8f600d0deb8f3b3849cf

Tree: 2813864f94a841d996302929da65562213f0ff5f

Author: Cole Miller

Committer: GitHub

## Message

```
git: Use the CLI for loading commit SHAs and details (#29351)

Since #28065 merged we've seen deadlocks inside iconv when opening Zed
in a repository containing many submodules. These calls to iconv happen
inside libgit2, in our implementations of the methods `head_sha`,
`merge_head_shas`, and `show` on `RealGitRepository`. This PR moves
those methods to use the git CLI instead, sidestepping the issue. For
the sake of efficiency, a new `revparse_batch` method is added that uses
`git cat-file` to resolve several ref names in one invocation. I
originally intended to make `show` operate in batch mode as well (or
instead), but I can't see a good way to do that with the git CLI; `git
show` always bails on the first ref that it can't resolve, and
`for-each-ref` doesn't support symbolic refs like `HEAD`.

Separately, I removed the calls to `show` in `MergeDetails::load`, going
back to only loading the SHAs of the various merge heads. Loading full
commit details was intended to support the inlays feature that ended up
being cut from #28065, and we can add it back in when we need it.

Release Notes:

- N/A
```

## Parents

- [8cc2ade21cc9506750683fbb8927851345c44523](https://git.cafe/gitcafe/zed/commit/8cc2ade21cc9506750683fbb8927851345c44523?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/7f5c874a3898cde68dec8f600d0deb8f3b3849cf?format=markdown)
