mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-05 18:25:57 +00:00
f082344747
Release Notes: - Added links to GitHub pull requests to the git blame tooltips, if they are available. Screenshot: (Yes, the icon will be resized! cc @iamnbutler) ![screenshot-2024-04-19-18 31 13@2x](https://github.com/zed-industries/zed/assets/1185253/774af0b3-f587-4acc-aa1e-1846c2bec127)
83 lines
2.3 KiB
Rust
83 lines
2.3 KiB
Rust
use lazy_static::lazy_static;
|
|
use url::Url;
|
|
|
|
use crate::{hosting_provider::HostingProvider, permalink::ParsedGitRemote};
|
|
|
|
lazy_static! {
|
|
static ref GITHUB_PULL_REQUEST_NUMBER: regex::Regex =
|
|
regex::Regex::new(r"\(#(\d+)\)$").unwrap();
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct PullRequest {
|
|
pub number: u32,
|
|
pub url: Url,
|
|
}
|
|
|
|
pub fn extract_pull_request(remote: &ParsedGitRemote, message: &str) -> Option<PullRequest> {
|
|
match remote.provider {
|
|
HostingProvider::Github => {
|
|
let line = message.lines().next()?;
|
|
let capture = GITHUB_PULL_REQUEST_NUMBER.captures(line)?;
|
|
let number = capture.get(1)?.as_str().parse::<u32>().ok()?;
|
|
|
|
let mut url = remote.provider.base_url();
|
|
let path = format!("/{}/{}/pull/{}", remote.owner, remote.repo, number);
|
|
url.set_path(&path);
|
|
|
|
Some(PullRequest { number, url })
|
|
}
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use unindent::Unindent;
|
|
|
|
use crate::{
|
|
hosting_provider::HostingProvider, permalink::ParsedGitRemote,
|
|
pull_request::extract_pull_request,
|
|
};
|
|
|
|
#[test]
|
|
fn test_github_pull_requests() {
|
|
let remote = ParsedGitRemote {
|
|
provider: HostingProvider::Github,
|
|
owner: "zed-industries",
|
|
repo: "zed",
|
|
};
|
|
|
|
let message = "This does not contain a pull request";
|
|
assert!(extract_pull_request(&remote, message).is_none());
|
|
|
|
// Pull request number at end of first line
|
|
let message = r#"
|
|
project panel: do not expand collapsed worktrees on "collapse all entries" (#10687)
|
|
|
|
Fixes #10597
|
|
|
|
Release Notes:
|
|
|
|
- Fixed "project panel: collapse all entries" expanding collapsed worktrees.
|
|
"#
|
|
.unindent();
|
|
|
|
assert_eq!(
|
|
extract_pull_request(&remote, &message)
|
|
.unwrap()
|
|
.url
|
|
.as_str(),
|
|
"https://github.com/zed-industries/zed/pull/10687"
|
|
);
|
|
|
|
// Pull request number in middle of line, which we want to ignore
|
|
let message = r#"
|
|
Follow-up to #10687 to fix problems
|
|
|
|
See the original PR, this is a fix.
|
|
"#
|
|
.unindent();
|
|
assert!(extract_pull_request(&remote, &message).is_none());
|
|
}
|
|
}
|