Github GraphQL 递归列出目录中的所有文件

13

我希望使用 GraphQL Github API 递归列出目录中包含的所有文件。目前我的查询看起来像这样:

{
  search(first:1, type: REPOSITORY, query: "language:C") {
    edges {
      node {
        ... on Repository {
          name
          descriptionHTML
          stargazers {
            totalCount
          }
          forks {
            totalCount
          }
          object(expression: "master:") {
            ... on Tree {
              entries {
                name
                type
              }
            }
          }
        }
      }
    }
  }
}

然而,这只给了我目录的第一级内容,特别是有些结果对象又是树形结构。是否有一种方法可以调整查询,使其递归地列出树形结构的内容?


1
我很激动地看到了你的问题,一方面因为你的例子解决了我在使用GraphQL时遇到的一个问题,另一方面因为我认为我知道一个解决方案。不幸的是,当我尝试使用“fragment”时,它抛出了一个关于“Fragment [fragment name] 包含一个无限循环”的错误。所以现在我也迫切地等待这个问题的答案。 - REW
3个回答

11

GraphQL 没有递归迭代的方法。但是,您可以使用查询变量以编程方式进行递归迭代:

query TestQuery($branch: GitObjectID) {
 search(first: 1, type: REPOSITORY, query: "language:C") {
    edges {
      node {
        ... on Repository {
          object(expression: "master:", oid: $branch) {
            ... on Tree {
              entries {
                oid
                name
                type
              }
            }
          }
        }
      }
    }
  }
}

从一个值为null开始,并从那里继续。


2

它仍然可以工作,但是在Github GraphQl Explorer中,使用您的示例会出现两个错误:““字段'repository'缺少必需的参数:owner”和““类型'Repository'上不存在字段'commit'”。 - Timo
我一个小时前的评论中提到的第一个错误可以通过使用“owner”来解决,但第二个错误似乎没有被清除。需要另一个查询才能与资源管理器一起使用吗? - Timo

-1
{
  search(first: 1, type: REPOSITORY, query: "language:C") {
    edges {
      node {
        ... on Repository {
          name
          descriptionHTML
          stargazers {
            totalCount
          }
          forks {
            totalCount
          }
          object(expression: "master:") {
            ... on Tree {
              entries {
                name
                object {
                  ... on Tree {
                    entries {
                      name
                      object {
                        ... on Tree {
                          entries {
                            name
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}


1
请添加一些解释说明你正在做什么,对我来说它看起来并不是递归。它看起来只是深入了几个层级。 - Simson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接