diff options
| author | Max Audron <audron@cocaine.farm> | 2022-07-06 12:19:43 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2022-07-06 12:29:58 +0200 |
| commit | eea9a69b48bcd20a9cd14b7acc1ef6c1f2357ed7 (patch) | |
| tree | f1e13ff44e4ad4e428e9a5d237c69a45f05bd3c2 /src/forge/gitlab | |
| parent | add gitlab upload command (diff) | |
paginate results from gitlab api
Diffstat (limited to 'src/forge/gitlab')
| -rw-r--r-- | src/forge/gitlab/mod.rs | 32 |
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()) |
