aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2022-07-06 12:19:43 +0200
committerMax Audron <audron@cocaine.farm>2022-07-06 12:29:58 +0200
commiteea9a69b48bcd20a9cd14b7acc1ef6c1f2357ed7 (patch)
treef1e13ff44e4ad4e428e9a5d237c69a45f05bd3c2 /src
parentadd gitlab upload command (diff)
paginate results from gitlab api
Diffstat (limited to 'src')
-rw-r--r--src/forge/gitlab/mod.rs32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/forge/gitlab/mod.rs b/src/forge/gitlab/mod.rs
index dec3b49..cf5fc16 100644
--- a/src/forge/gitlab/mod.rs
+++ b/src/forge/gitlab/mod.rs
@@ -35,15 +35,35 @@ impl super::ForgeTrait for Gitlab {
async fn projects(&self, scope: &str) -> Result<Vec<super::Project>> {
let query = Projects::build_query(projects::Variables {
scope: scope.to_owned(),
+ after: "".to_owned(),
});
- // debug!("query: {:#?}", query);
+
let res = self.client.graphql::<Projects>(&query).await?;
- let res = res
- .projects
- .unwrap()
- .nodes
- .unwrap()
+ let projects = res.projects.unwrap();
+
+ let mut page = projects.page_info.end_cursor.unwrap();
+ let mut has_next_page = projects.page_info.has_next_page;
+
+ let mut nodes = projects.nodes.unwrap().clone();
+
+ while has_next_page {
+ let query = Projects::build_query(projects::Variables {
+ scope: scope.to_owned(),
+ after: page,
+ });
+
+ let res = self.client.graphql::<Projects>(&query).await?;
+
+ let projects = res.projects.unwrap();
+
+ page = projects.page_info.end_cursor.unwrap();
+ has_next_page = projects.page_info.has_next_page;
+
+ nodes.append(&mut projects.nodes.unwrap());
+ }
+
+ let res = nodes
.into_iter()
.filter(|x| x.is_some())
.map(|x| x.unwrap().into())