From 25b189462950e6268a1e782949ade3edf1dceb61 Mon Sep 17 00:00:00 2001 From: Urgau Date: Thu, 17 Jul 2025 20:40:09 +0200 Subject: [PATCH 1/3] Add exclude list for rendered-link handler --- src/config.rs | 5 ++++- src/handlers/rendered_link.rs | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index c44deefd3..ea96c92d6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -497,6 +497,8 @@ pub(crate) struct BotPullRequests {} #[serde(deny_unknown_fields)] pub(crate) struct RenderedLinkConfig { pub(crate) trigger_files: Vec, + #[serde(default)] + pub(crate) exclude_files: Vec, } #[derive(PartialEq, Eq, Debug, serde::Deserialize)] @@ -720,7 +722,8 @@ mod tests { merge_conflicts: None, bot_pull_requests: None, rendered_link: Some(RenderedLinkConfig { - trigger_files: vec!["posts/".to_string()] + trigger_files: vec!["posts/".to_string()], + exclude_files: vec![], }), issue_links: Some(IssueLinksConfig { check_commits: true, diff --git a/src/handlers/rendered_link.rs b/src/handlers/rendered_link.rs index 31b4dcc6d..096d10f91 100644 --- a/src/handlers/rendered_link.rs +++ b/src/handlers/rendered_link.rs @@ -47,6 +47,10 @@ async fn add_rendered_link( .trigger_files .iter() .any(|tf| f.filename.starts_with(tf)) + && !config + .exclude_files + .iter() + .any(|tf| f.filename.starts_with(tf)) }) .and_then(|file| { let head = e.issue.head.as_ref()?; From 1496c0c2bd100c45db2f534d04b01473a2ef3f6d Mon Sep 17 00:00:00 2001 From: Urgau Date: Thu, 17 Jul 2025 21:03:58 +0200 Subject: [PATCH 2/3] Sort by total number of lines changed to improve rendered link guess --- src/github.rs | 3 +++ src/handlers/rendered_link.rs | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/github.rs b/src/github.rs index 2c4ede7cb..c72cbfe5e 100644 --- a/src/github.rs +++ b/src/github.rs @@ -1100,6 +1100,9 @@ pub struct PullRequestFile { pub sha: String, pub filename: String, pub blob_url: String, + pub additions: u64, + pub deletions: u64, + pub changes: u64, } #[derive(Debug, serde::Deserialize)] diff --git a/src/handlers/rendered_link.rs b/src/handlers/rendered_link.rs index 096d10f91..646c9bde1 100644 --- a/src/handlers/rendered_link.rs +++ b/src/handlers/rendered_link.rs @@ -42,7 +42,7 @@ async fn add_rendered_link( let rendered_link = files .iter() - .find(|f| { + .filter(|f| { config .trigger_files .iter() @@ -52,7 +52,10 @@ async fn add_rendered_link( .iter() .any(|tf| f.filename.starts_with(tf)) }) - .and_then(|file| { + // Sort the relavant files by the total number of lines changed, as to + // improve our guess for the relevant file to show the link to. + .max_by_key(|f| f.additions + f.deletions + f.changes) + .map(|file| { let head = e.issue.head.as_ref()?; let base = e.issue.base.as_ref()?; @@ -88,7 +91,8 @@ async fn add_rendered_link( }, file.filename )) - }); + }) + .flatten(); let new_body: Cow<'_, str> = if !e.issue.body.contains("[Rendered]") { if let Some(rendered_link) = rendered_link { From 905cdf67b634787e379eed4283a3673f99006f2b Mon Sep 17 00:00:00 2001 From: Urgau Date: Fri, 18 Jul 2025 23:27:50 +0200 Subject: [PATCH 3/3] Add documentation to `RenderedLinkConfig` fields --- src/config.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/config.rs b/src/config.rs index ea96c92d6..81d2a2a46 100644 --- a/src/config.rs +++ b/src/config.rs @@ -496,7 +496,9 @@ pub(crate) struct BotPullRequests {} #[serde(rename_all = "kebab-case")] #[serde(deny_unknown_fields)] pub(crate) struct RenderedLinkConfig { + /// List of paths to watch for modifications pub(crate) trigger_files: Vec, + /// List of paths to exclude from watching for modifications #[serde(default)] pub(crate) exclude_files: Vec, }