|
@@ -669,9 +669,14 @@ impl Repository {
|
|
|
} = query;
|
|
|
|
|
|
let use_issues = exclude_labels.is_empty() && filters.iter().all(|&(key, _)| key != "no");
|
|
|
+ let is_pr = filters
|
|
|
+ .iter()
|
|
|
+ .any(|&(key, value)| key == "is" && value == "pr");
|
|
|
// negating filters can only be handled by the search api
|
|
|
let url = if use_issues {
|
|
|
self.build_issues_url(filters, include_labels)
|
|
|
+ } else if is_pr {
|
|
|
+ self.build_pulls_url(filters, include_labels)
|
|
|
} else {
|
|
|
self.build_search_issues_url(filters, include_labels, exclude_labels)
|
|
|
};
|
|
@@ -721,6 +726,28 @@ impl Repository {
|
|
|
)
|
|
|
}
|
|
|
|
|
|
+ fn build_pulls_url(&self, filters: &Vec<(&str, &str)>, include_labels: &Vec<&str>) -> String {
|
|
|
+ let filters = filters
|
|
|
+ .iter()
|
|
|
+ .map(|(key, val)| format!("{}={}", key, val))
|
|
|
+ .chain(std::iter::once(format!(
|
|
|
+ "labels={}",
|
|
|
+ include_labels.join(",")
|
|
|
+ )))
|
|
|
+ .chain(std::iter::once("filter=all".to_owned()))
|
|
|
+ .chain(std::iter::once(format!("sort=created")))
|
|
|
+ .chain(std::iter::once(format!("direction=asc")))
|
|
|
+ .chain(std::iter::once(format!("per_page=100")))
|
|
|
+ .collect::<Vec<_>>()
|
|
|
+ .join("&");
|
|
|
+ format!(
|
|
|
+ "{}/repos/{}/pulls?{}",
|
|
|
+ Repository::GITHUB_API_URL,
|
|
|
+ self.full_name,
|
|
|
+ filters
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
fn build_search_issues_url(
|
|
|
&self,
|
|
|
filters: &Vec<(&str, &str)>,
|