Skip to content

Commit 872f2cb

Browse files
authored
Merge pull request #2118 from Urgau/rendered-link-improv-guess
Improve `[rendered-link]` guess of the relevant file to point to
2 parents dec5eef + 905cdf6 commit 872f2cb

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

src/config.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,11 @@ pub(crate) struct BotPullRequests {}
496496
#[serde(rename_all = "kebab-case")]
497497
#[serde(deny_unknown_fields)]
498498
pub(crate) struct RenderedLinkConfig {
499+
/// List of paths to watch for modifications
499500
pub(crate) trigger_files: Vec<String>,
501+
/// List of paths to exclude from watching for modifications
502+
#[serde(default)]
503+
pub(crate) exclude_files: Vec<String>,
500504
}
501505

502506
#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
@@ -720,7 +724,8 @@ mod tests {
720724
merge_conflicts: None,
721725
bot_pull_requests: None,
722726
rendered_link: Some(RenderedLinkConfig {
723-
trigger_files: vec!["posts/".to_string()]
727+
trigger_files: vec!["posts/".to_string()],
728+
exclude_files: vec![],
724729
}),
725730
issue_links: Some(IssueLinksConfig {
726731
check_commits: true,

src/github.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,9 @@ pub struct PullRequestFile {
11221122
pub sha: String,
11231123
pub filename: String,
11241124
pub blob_url: String,
1125+
pub additions: u64,
1126+
pub deletions: u64,
1127+
pub changes: u64,
11251128
}
11261129

11271130
#[derive(Debug, serde::Deserialize)]

src/handlers/rendered_link.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,20 @@ async fn add_rendered_link(
4242

4343
let rendered_link = files
4444
.iter()
45-
.find(|f| {
45+
.filter(|f| {
4646
config
4747
.trigger_files
4848
.iter()
4949
.any(|tf| f.filename.starts_with(tf))
50+
&& !config
51+
.exclude_files
52+
.iter()
53+
.any(|tf| f.filename.starts_with(tf))
5054
})
51-
.and_then(|file| {
55+
// Sort the relavant files by the total number of lines changed, as to
56+
// improve our guess for the relevant file to show the link to.
57+
.max_by_key(|f| f.additions + f.deletions + f.changes)
58+
.map(|file| {
5259
let head = e.issue.head.as_ref()?;
5360
let base = e.issue.base.as_ref()?;
5461

@@ -84,7 +91,8 @@ async fn add_rendered_link(
8491
},
8592
file.filename
8693
))
87-
});
94+
})
95+
.flatten();
8896

8997
let new_body: Cow<'_, str> = if !e.issue.body.contains("[Rendered]") {
9098
if let Some(rendered_link) = rendered_link {

0 commit comments

Comments
 (0)