diff --git a/assets/icons/bitbucket.svg b/assets/icons/bitbucket.svg
new file mode 100644
index 00000000000..823ffc00c3c
--- /dev/null
+++ b/assets/icons/bitbucket.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/codeberg.svg b/assets/icons/codeberg.svg
new file mode 100644
index 00000000000..52be5909b31
--- /dev/null
+++ b/assets/icons/codeberg.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/forgejo.svg b/assets/icons/forgejo.svg
new file mode 100644
index 00000000000..b818af4e020
--- /dev/null
+++ b/assets/icons/forgejo.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/gitea.svg b/assets/icons/gitea.svg
new file mode 100644
index 00000000000..c3c6abec2dd
--- /dev/null
+++ b/assets/icons/gitea.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/gitlab.svg b/assets/icons/gitlab.svg
new file mode 100644
index 00000000000..d7c5c6b2b49
--- /dev/null
+++ b/assets/icons/gitlab.svg
@@ -0,0 +1,3 @@
+
diff --git a/crates/git_graph/src/git_graph.rs b/crates/git_graph/src/git_graph.rs
index 80acde23c2d..e176a34e2b7 100644
--- a/crates/git_graph/src/git_graph.rs
+++ b/crates/git_graph/src/git_graph.rs
@@ -2733,10 +2733,7 @@ impl GitGraph {
})
.when_some(remote.clone(), |this, remote| {
let provider_name = remote.host.name();
- let icon = match provider_name.as_str() {
- "GitHub" => IconName::Github,
- _ => IconName::Link,
- };
+ let icon = git_ui::get_provider_icon(provider_name.as_str());
let parsed_remote = ParsedGitRemote {
owner: remote.owner.as_ref().into(),
repo: remote.repo.as_ref().into(),
diff --git a/crates/git_ui/src/commit_view.rs b/crates/git_ui/src/commit_view.rs
index c6e1ae6ea73..42e89bb7ba1 100644
--- a/crates/git_ui/src/commit_view.rs
+++ b/crates/git_ui/src/commit_view.rs
@@ -1205,10 +1205,7 @@ impl Render for CommitViewToolbar {
}),
)
.children(remote_info.map(|(provider_name, url)| {
- let icon = match provider_name.as_str() {
- "GitHub" => IconName::Github,
- _ => IconName::Link,
- };
+ let icon = crate::get_provider_icon(provider_name.as_str());
IconButton::new("view_on_provider", icon)
.icon_size(IconSize::Small)
diff --git a/crates/git_ui/src/git_ui.rs b/crates/git_ui/src/git_ui.rs
index f791ade8e0c..740c5fbc837 100644
--- a/crates/git_ui/src/git_ui.rs
+++ b/crates/git_ui/src/git_ui.rs
@@ -53,6 +53,18 @@ pub mod worktree_service;
pub use conflict_view::MergeConflictIndicator;
+pub fn get_provider_icon(name: &str) -> IconName {
+ match name {
+ "Bitbucket" => IconName::Bitbucket,
+ "Codeberg" => IconName::Codeberg,
+ "Forgejo Self-Hosted" => IconName::Forgejo,
+ "GitHub" => IconName::Github,
+ "GitLab" => IconName::Gitlab,
+ "Gitea" => IconName::Gitea,
+ _ => IconName::Link,
+ }
+}
+
pub fn init(cx: &mut App) {
editor::set_blame_renderer(blame_ui::GitBlameRenderer, cx);
commit_view::init(cx);
diff --git a/crates/icons/src/icons.rs b/crates/icons/src/icons.rs
index 1559622fc98..d71fc42859f 100644
--- a/crates/icons/src/icons.rs
+++ b/crates/icons/src/icons.rs
@@ -46,6 +46,7 @@ pub enum IconName {
BellOff,
BellRing,
Binary,
+ Bitbucket,
Blocks,
Bookmark,
BoltFilled,
@@ -70,6 +71,7 @@ pub enum IconName {
Close,
CloudDownload,
Code,
+ Codeberg,
Command,
Control,
Copilot,
@@ -140,6 +142,7 @@ pub enum IconName {
Font,
FontSize,
FontWeight,
+ Forgejo,
ForwardArrow,
ForwardArrowUp,
GenericClose,
@@ -152,7 +155,9 @@ pub enum IconName {
GitGraph,
GitMergeConflict,
GitWorktree,
+ Gitea,
Github,
+ Gitlab,
Hash,
HistoryRerun,
Image,