Allow viewing past commits in Zed (#27636)

This PR adds functionality for loading the diff for an arbitrary git
commit, and displaying it in a tab. To retrieve the diff for the commit,
I'm using a single `git cat-file --batch` invocation to efficiently load
both the old and new versions of each file that was changed in the
commit.

Todo

* Features
* [x] Open the commit view when clicking the most recent commit message
in the commit panel
  * [x] Open the commit view when clicking a SHA in a git blame column
  * [x] Open the commit view when clicking a SHA in a commit tooltip
  * [x] Make it work over RPC
  * [x] Allow buffer search in commit view
* [x] Command palette action to open the commit for the current blame
line
* Styling
* [x] Add a header that shows the author, timestamp, and the full commit
message
  * [x] Remove stage/unstage buttons in commit view
  * [x] Truncate the commit message in the tab
* Bugs
  * [x] Dedup commit tabs within a pane
  * [x] Add a tooltip to the tab

Release Notes:

- Added the ability to show past commits in Zed. You can view the most
recent commit by clicking its message in the commit panel. And when
viewing a git blame, you can show any commit by clicking its sha.
This commit is contained in:
Max Brunsfeld
2025-03-31 23:26:47 +00:00
committed by GitHub
parent 33912011b7
commit 8546dc101d
28 changed files with 1742 additions and 603 deletions
Generated
+2 -2
View File
@@ -4402,7 +4402,6 @@ dependencies = [
"anyhow",
"assets",
"buffer_diff",
"chrono",
"client",
"clock",
"collections",
@@ -4451,7 +4450,6 @@ dependencies = [
"text",
"theme",
"time",
"time_format",
"tree-sitter-html",
"tree-sitter-rust",
"tree-sitter-typescript",
@@ -5715,6 +5713,7 @@ dependencies = [
"askpass",
"assistant_settings",
"buffer_diff",
"chrono",
"collections",
"command_palette_hooks",
"component",
@@ -5732,6 +5731,7 @@ dependencies = [
"linkify",
"linkme",
"log",
"markdown",
"menu",
"multi_buffer",
"notifications",