
This PR adds support for self-hosted GitLab instances when generating Git permalinks. If the `origin` Git remote contains `gitlab` in the URL hostname we will then attempt to register it as a self-hosted GitLab instance. A note on this: I don't think relying on specific keywords is going to be a suitable long-term solution to detection. In reality the self-hosted instance could be hosted anywhere (e.g., `vcs.my-company.com`), so we will ultimately need a way to have the user indicate which Git provider they are using (perhaps via a setting). Closes https://github.com/zed-industries/zed/issues/18012. Release Notes: - Added support for self-hosted GitLab instances when generating Git permalinks. - The instance URL must have `gitlab` somewhere in the host in order to be recognized.
37 lines
1.3 KiB
Rust
37 lines
1.3 KiB
Rust
mod providers;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use git::repository::GitRepository;
|
|
use git::GitHostingProviderRegistry;
|
|
use gpui::AppContext;
|
|
|
|
pub use crate::providers::*;
|
|
|
|
/// Initializes the Git hosting providers.
|
|
pub fn init(cx: &AppContext) {
|
|
let provider_registry = GitHostingProviderRegistry::global(cx);
|
|
provider_registry.register_hosting_provider(Arc::new(Bitbucket));
|
|
provider_registry.register_hosting_provider(Arc::new(Codeberg));
|
|
provider_registry.register_hosting_provider(Arc::new(Gitee));
|
|
provider_registry.register_hosting_provider(Arc::new(Github));
|
|
provider_registry.register_hosting_provider(Arc::new(Gitlab::new()));
|
|
provider_registry.register_hosting_provider(Arc::new(Sourcehut));
|
|
}
|
|
|
|
/// Registers additional Git hosting providers.
|
|
///
|
|
/// These require information from the Git repository to construct, so their
|
|
/// registration is deferred until we have a Git repository initialized.
|
|
pub fn register_additional_providers(
|
|
provider_registry: Arc<GitHostingProviderRegistry>,
|
|
repository: Arc<dyn GitRepository>,
|
|
) {
|
|
let Some(origin_url) = repository.remote_url("origin") else {
|
|
return;
|
|
};
|
|
|
|
if let Ok(gitlab_self_hosted) = Gitlab::from_remote_url(&origin_url) {
|
|
provider_registry.register_hosting_provider(Arc::new(gitlab_self_hosted));
|
|
}
|
|
}
|