Skip to content

Commit 00a97e1

Browse files
authored
Merge pull request #250 from spastorino/fix-list-issues-in-milestone
Fix list issues in milestone
2 parents cc451a2 + 22d4977 commit 00a97e1

File tree

4 files changed

+28
-26
lines changed

4 files changed

+28
-26
lines changed

crates/rust-project-goals-cli-llm/src/updates.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use anyhow::Context;
22
use chrono::{Datelike, NaiveDate};
33
use rust_project_goals::util::comma;
44
use rust_project_goals_json::GithubIssueState;
5-
use std::collections::BTreeMap;
65
use std::io::Write;
76
use std::path::Path;
87
use std::process::{Command, Stdio};
@@ -12,7 +11,7 @@ use crate::templates::{self, Updates, UpdatesGoal};
1211
use rust_project_goals::gh::issues::ExistingGithubIssue;
1312
use rust_project_goals::gh::{
1413
issue_id::{IssueId, Repository},
15-
issues::{checkboxes, list_issue_titles_in_milestone, ExistingGithubComment},
14+
issues::{checkboxes, list_issues_in_milestone, ExistingGithubComment},
1615
};
1716

1817
const QUICK_UPDATES: &[&str] = &[
@@ -51,7 +50,7 @@ pub async fn updates(
5150

5251
let llm = LargeLanguageModel::new(model_id, region).await?;
5352

54-
let issues = list_issue_titles_in_milestone(repository, milestone)?;
53+
let issues = list_issues_in_milestone(repository, milestone)?;
5554

5655
let filter = Filter {
5756
start_date: match start_date {
@@ -111,21 +110,23 @@ pub async fn updates(
111110

112111
async fn prepare_flagship_goals(
113112
repository: &Repository,
114-
issues: &BTreeMap<String, ExistingGithubIssue>,
113+
issues: &[ExistingGithubIssue],
115114
filter: &Filter<'_>,
116115
llm: &LargeLanguageModel,
117116
quick: bool,
118117
updates: &mut Updates,
119118
) -> anyhow::Result<()> {
120119
// First process the flagship goals, for which we capture the full text of comments.
121-
for (title, issue) in issues {
120+
for issue in issues {
122121
if !issue.has_flagship_label() {
123122
continue;
124123
}
125124

125+
let title = &issue.title;
126+
126127
progress_bar::print_progress_bar_info(
127128
&format!("Issue #{number}", number = issue.number),
128-
&title,
129+
title,
129130
progress_bar::Color::Green,
130131
progress_bar::Style::Bold,
131132
);
@@ -182,22 +183,24 @@ async fn prepare_flagship_goals(
182183

183184
async fn prepare_other_goals(
184185
repository: &Repository,
185-
issues: &BTreeMap<String, ExistingGithubIssue>,
186+
issues: &[ExistingGithubIssue],
186187
filter: &Filter<'_>,
187188
llm: &LargeLanguageModel,
188189
quick: bool,
189190
updates: &mut Updates,
190191
) -> anyhow::Result<()> {
191192
// Next process the remaining goals, for which we generate a summary using an LLVM.
192193
let mut quick_comments = comments_forever();
193-
for (title, issue) in issues {
194+
for issue in issues {
194195
if issue.has_flagship_label() {
195196
continue;
196197
}
197198

199+
let title = &issue.title;
200+
198201
progress_bar::print_progress_bar_info(
199202
&format!("Issue #{number}", number = issue.number),
200-
&title,
203+
title,
201204
progress_bar::Color::Green,
202205
progress_bar::Style::Bold,
203206
);

crates/rust-project-goals-cli/src/generate_json.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::path::PathBuf;
22

33
use rust_project_goals::gh::{
44
issue_id::Repository,
5-
issues::{checkboxes, list_issue_titles_in_milestone, ExistingGithubComment},
5+
issues::{checkboxes, list_issues_in_milestone, ExistingGithubComment},
66
};
77
use rust_project_goals_json::{TrackingIssue, TrackingIssueUpdate, TrackingIssues};
88

@@ -11,16 +11,16 @@ pub(super) fn generate_json(
1111
milestone: &str,
1212
json_path: &Option<PathBuf>,
1313
) -> anyhow::Result<()> {
14-
let issues = list_issue_titles_in_milestone(repository, milestone)?;
14+
let issues = list_issues_in_milestone(repository, milestone)?;
1515

1616
let issues = TrackingIssues {
1717
issues: issues
1818
.into_iter()
19-
.map(|(title, issue)| {
19+
.map(|issue| {
2020
let progress = checkboxes(&issue);
2121
TrackingIssue {
2222
number: issue.number,
23-
title,
23+
title: issue.title.clone(),
2424
flagship: issue.has_flagship_label(),
2525
progress,
2626
assignees: issue.assignees.into_iter().collect(),

crates/rust-project-goals-cli/src/rfc.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ use rust_project_goals::{
1313
gh::{
1414
issue_id::{IssueId, Repository},
1515
issues::{
16-
create_issue, list_issue_titles_in_milestone, lock_issue, sync_assignees,
17-
FLAGSHIP_LABEL,
16+
create_issue, list_issues_in_milestone, lock_issue, sync_assignees, FLAGSHIP_LABEL,
1817
},
1918
labels::GhLabel,
2019
},
@@ -249,10 +248,13 @@ fn initialize_issues<'doc>(
249248
.collect::<anyhow::Result<_>>()?;
250249

251250
// Compare desired issues against existing issues
252-
let existing_issues = list_issue_titles_in_milestone(repository, timeframe)?;
251+
let existing_issues = list_issues_in_milestone(repository, timeframe)?;
253252
let mut actions = BTreeSet::new();
254253
for desired_issue in desired_issues {
255-
match existing_issues.get(&desired_issue.title) {
254+
match existing_issues.iter().find(|issue| {
255+
let issue_id = IssueId::new(repository.clone(), issue.number);
256+
Some(&issue_id) == desired_issue.tracking_issue || issue.title == desired_issue.title
257+
}) {
256258
Some(existing_issue) => {
257259
if existing_issue.assignees != desired_issue.assignees {
258260
actions.insert(GithubAction::SyncAssignees {
@@ -364,7 +366,6 @@ fn issue_text(timeframe: &str, document: &GoalDocument) -> anyhow::Result<String
364366
fn task_items(goal_plan: &GoalPlan) -> anyhow::Result<Vec<String>> {
365367
use std::fmt::Write;
366368

367-
368369
let mut tasks = vec![];
369370

370371
if let Some(title) = &goal_plan.subgoal {

crates/rust-project-goals/src/gh/issues.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
use std::{
2-
collections::{BTreeMap, BTreeSet},
3-
process::Command,
4-
str::FromStr,
5-
};
1+
use std::{collections::BTreeSet, process::Command, str::FromStr};
62

73
use anyhow::Context;
84
use chrono::NaiveDate;
@@ -16,6 +12,7 @@ use super::{issue_id::Repository, labels::GhLabel};
1612
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
1713
pub struct ExistingGithubIssue {
1814
pub number: u64,
15+
pub title: String,
1916
/// Just github username, no `@`
2017
pub assignees: BTreeSet<String>,
2118
pub comments: Vec<ExistingGithubComment>,
@@ -121,10 +118,10 @@ pub fn fetch_issue(repository: &Repository, issue: u64) -> anyhow::Result<Existi
121118
Ok(ExistingGithubIssue::from(e_i))
122119
}
123120

124-
pub fn list_issue_titles_in_milestone(
121+
pub fn list_issues_in_milestone(
125122
repository: &Repository,
126123
timeframe: &str,
127-
) -> anyhow::Result<BTreeMap<String, ExistingGithubIssue>> {
124+
) -> anyhow::Result<Vec<ExistingGithubIssue>> {
128125
let output = Command::new("gh")
129126
.arg("-R")
130127
.arg(&repository.to_string())
@@ -143,7 +140,7 @@ pub fn list_issue_titles_in_milestone(
143140

144141
Ok(existing_issues
145142
.into_iter()
146-
.map(|e_i| (e_i.title.clone(), ExistingGithubIssue::from(e_i)))
143+
.map(|e_i| ExistingGithubIssue::from(e_i))
147144
.collect())
148145
}
149146

@@ -296,6 +293,7 @@ impl From<ExistingGithubIssueJson> for ExistingGithubIssue {
296293
fn from(e_i: ExistingGithubIssueJson) -> Self {
297294
ExistingGithubIssue {
298295
number: e_i.number,
296+
title: e_i.title,
299297
assignees: e_i.assignees.into_iter().map(|a| a.login).collect(),
300298
comments: e_i
301299
.comments

0 commit comments

Comments
 (0)