Add pull request milestone features

This commit is contained in:
Georg Bauer
2026-07-31 14:22:21 +02:00
parent c5ecb8f87d
commit 86200b4668
9 changed files with 474 additions and 52 deletions

View File

@@ -159,29 +159,48 @@ pub async fn load_milestone(
apis::issue_api::issue_get_milestone(&configuration, owner, repository, &id.to_string())
.await
.map_err(|error| error.to_string())?;
let issues = apis::issue_api::issue_list_issues(
&configuration,
owner,
repository,
Some("all"),
None,
None,
Some("issues"),
milestone.title.as_deref(),
None,
None,
None,
None,
None,
Some(1),
Some(100),
)
.await
.map_err(|error| error.to_string())?;
Ok(MilestoneDetails { milestone, issues })
let load = |kind| {
apis::issue_api::issue_list_issues(
&configuration,
owner,
repository,
Some("all"),
None,
None,
Some(kind),
milestone.title.as_deref(),
None,
None,
None,
None,
None,
Some(1),
Some(100),
)
};
let (issues, pulls) = tokio::join!(load("issues"), load("pulls"));
let mut pulls = pulls.map_err(|error| error.to_string())?;
for pull in &mut pulls {
pull.repository.get_or_insert_with(|| {
Box::new(models::RepositoryMeta {
name: Some(repository.into()),
owner: Some(owner.into()),
..Default::default()
})
});
}
Ok(MilestoneDetails {
milestone,
issues: issues.map_err(|error| error.to_string())?,
pulls,
})
}
pub async fn load_pulls(server: &Server, status: &str) -> Result<Vec<models::Issue>, String> {
pub async fn load_pulls(
server: &Server,
status: &str,
milestone: &str,
) -> Result<Vec<models::Issue>, String> {
let client =
Client::new(&server.url, Some(&server.token)).map_err(|error| error.to_string())?;
let configuration = client.configuration();
@@ -197,7 +216,7 @@ pub async fn load_pulls(server: &Server, status: &str) -> Result<Vec<models::Iss
&configuration,
Some(status),
None,
None,
(!milestone.is_empty()).then_some(milestone),
None,
None,
Some("pulls"),
@@ -223,6 +242,20 @@ pub async fn load_pulls(server: &Server, status: &str) -> Result<Vec<models::Iss
Ok(pulls)
}
pub async fn load_pull_milestones(server: &Server) -> Result<Vec<String>, String> {
let (open, closed) = tokio::try_join!(
load_pulls(server, "open", ""),
load_pulls(server, "closed", "")
)?;
Ok(open
.into_iter()
.chain(closed)
.filter_map(|pull| pull.milestone?.title)
.collect::<BTreeSet<_>>()
.into_iter()
.collect())
}
pub async fn load_branches(
server: &Server,
owner: &str,