From 23e93564ca7de185aacab4c494312d8b732922dd Mon Sep 17 00:00:00 2001 From: tilpner Date: Fri, 29 May 2020 11:36:29 +0200 Subject: atom: add option to only include open issues --- src/atom.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/atom.rs') diff --git a/src/atom.rs b/src/atom.rs index f7e96ec..2894ccb 100644 --- a/src/atom.rs +++ b/src/atom.rs @@ -44,18 +44,22 @@ fn entity_escape(from: &str) -> String { escaped } -async fn query_issues_for_label<'conn>(conn: &'conn mut Conn, repo_id: i64, label: &str) -> impl Stream> + 'conn { +async fn query_issues_for_label<'conn>(conn: &'conn mut Conn, + repo_id: i64, label: &str, only_open: bool) -> impl Stream> + 'conn { sqlx::query_as::<_, Issue>(r#" SELECT issues.number, state, title, body, user_login, html_url, updated_at FROM issues INNER JOIN is_labeled ON is_labeled.issue=issues.number WHERE is_labeled.label=(SELECT id FROM labels WHERE repo=? AND name=?) + AND (?=0 OR issues.state=?) ORDER BY issues.number DESC "#).bind(repo_id).bind(label) + .bind(only_open).bind(query::issues::IssueState::OPEN.to_integer()) .fetch(conn) } async fn issue_to_entry(conn: &mut Conn, repo_id: i64, issue: Issue) -> Result { - let state_label = query::issues::integer_to_state_desc(issue.state); + let state_label = query::issues::IssueState::from_integer(issue.state) + .expect("Inconsistent database, invalid issue state").to_string(); let labels_of_issue = sqlx::query_as::<_, (String,)>( "SELECT labels.name FROM is_labeled JOIN labels ON is_labeled.label=labels.id @@ -102,7 +106,9 @@ async fn issue_to_entry(conn: &mut Conn, repo_id: i64, issue: Issue) -> Result) -> Result<()> { +pub async fn generate(mut conn: &mut Conn, (ref owner, ref name): (String, String), + out_path: PathBuf, labels: Vec, + only_open: bool) -> Result<()> { let labels = if labels.is_empty() { sqlx::query_as::<_, (String,)>( "SELECT name FROM labels WHERE repo=(SELECT id FROM repositories WHERE owner=? AND name=?)" @@ -142,7 +148,7 @@ pub async fn generate(mut conn: &mut Conn, (ref owner, ref name): (String, Strin .map_err(anyhow::Error::msg)? ]); - let issues: Vec = query_issues_for_label(&mut conn, repo_id, &label).await + let issues: Vec = query_issues_for_label(&mut conn, repo_id, &label, only_open).await .filter_map(|res| async { res.ok() }) .collect().await; -- cgit v1.2.3