ソースを参照

Add is: pr support for queries

Santiago Pastorino 4 年 前
コミット
b3a96e2072
1 ファイル変更27 行追加0 行削除
  1. 27 0
      src/github.rs

+ 27 - 0
src/github.rs

@@ -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)>,