@@ -30,34 +30,52 @@ pub(crate) fn get_changelog(
30
30
31
31
// we don't use an HTTPS client or JSON parser to keep the build times low
32
32
let pr = pr_num.to_string();
33
- let pr_json =
34
- cmd!(sh, "curl -s -H {accept} -H {authorization} {pr_url}/{pr}").read()?;
33
+ let cmd = &cmd!(sh, "curl --fail -s -H {accept} -H {authorization} {pr_url}/{pr}");
34
+ let pr_json = match cmd.read() {
35
+ Ok(pr_json) => pr_json,
36
+ Err(e) => {
37
+ // most likely a rust-lang/rust PR
38
+ eprintln!("Cannot get info for #{pr}: {e}");
39
+ continue;
40
+ }
41
+ };
42
+
35
43
let pr_title = cmd!(sh, "jq .title").stdin(&pr_json).read()?;
36
44
let pr_title = unescape(&pr_title[1..pr_title.len() - 1]);
37
45
let pr_comment = cmd!(sh, "jq .body").stdin(pr_json).read()?;
38
46
39
- let comments_json =
40
- cmd!(sh, "curl -s -H {accept} -H {authorization} {pr_url}/{pr}/comments").read()?;
41
- let pr_comments = cmd!(sh, "jq .[].body").stdin(comments_json).read()?;
42
-
43
- let l = iter::once(pr_comment.as_str())
44
- .chain(pr_comments.lines())
45
- .rev()
46
- .find_map(|it| {
47
- let it = unescape(&it[1..it.len() - 1]);
48
- it.lines().find_map(parse_changelog_line)
49
- })
50
- .into_iter()
51
- .next()
52
- .unwrap_or_else(|| parse_title_line(&pr_title));
53
- let s = match l.kind {
47
+ let cmd =
48
+ &cmd!(sh, "curl --fail -s -H {accept} -H {authorization} {pr_url}/{pr}/comments");
49
+ let pr_info = match cmd.read() {
50
+ Ok(comments_json) => {
51
+ let pr_comments = cmd!(sh, "jq .[].body").stdin(comments_json).read()?;
52
+
53
+ iter::once(pr_comment.as_str())
54
+ .chain(pr_comments.lines())
55
+ .rev()
56
+ .find_map(|it| {
57
+ let it = unescape(&it[1..it.len() - 1]);
58
+ it.lines().find_map(parse_changelog_line)
59
+ })
60
+ .into_iter()
61
+ .next()
62
+ }
63
+ Err(e) => {
64
+ eprintln!("Cannot get comments for #{pr}: {e}");
65
+ None
66
+ }
67
+ };
68
+
69
+ let pr_info = pr_info.unwrap_or_else(|| parse_title_line(&pr_title));
70
+ let s = match pr_info.kind {
54
71
PrKind::Feature => &mut features,
55
72
PrKind::Fix => &mut fixes,
56
73
PrKind::Internal => &mut internal,
57
74
PrKind::Other => &mut others,
58
75
PrKind::Skip => continue,
59
76
};
60
- writeln!(s, "* pr:{pr_num}[] {}", l.message.as_deref().unwrap_or(&pr_title)).unwrap();
77
+ writeln!(s, "* pr:{pr_num}[] {}", pr_info.message.as_deref().unwrap_or(&pr_title))
78
+ .unwrap();
61
79
}
62
80
}
63
81
0 commit comments