Py学习  »  Git

github标记和发布资产url列表

John • 6 年前 • 2199 次点击  

我正在努力使用github graphql接口来获取所需的数据。我想得到一个标签和版本的资产url列表。似乎有些回购产生了我想要的结果,而另一些则什么也没有产生。

query {
 repository(owner:"erlang",name:"otp") {
    releases(last:100) {
      edges {
        node {
          url
          releaseAssets(last:100) {
            edges {
              node {
                downloadUrl
              }
            }
          }
          tag {
            name
            target {
              ... on Commit {
                zipballUrl
                tarballUrl
              }
            }
          }
        }
      }
    }
    tags:refs(refPrefix:"refs/tags/", last:30) {
      edges {
        tag:node {
          name
          target {
            sha:oid
            commitResourcePath
            ... on Commit {
              zipballUrl
              tarballUrl
              author {
                name
                email
                date
              }
            }
          }
        }
      }
    }
  }
}

该查询按原样生成我想要的结果(或者至少是一些结果),而所有者:“spring projects”,名称:“spring framework”生成没有tarball的标记。当我查看spring框架回购时,它显然有可供发布的资产。

为什么它们不显示在这个查询中?当我查看git时,每个版本和标记都有资产,即使在我的查询中,结果也是命中或未命中。我错过了什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40507
文章 [ 1 ]  |  最新文章 6 年前
Bertrand Martel
Reply   •   1 楼
Bertrand Martel    7 年前

目标是 git reference ,在这种情况下,它可以指向 Tag 或A Commit 对象。当它指向 提交 ,查询返回预期结果,因为 ...on Commit 不是空的。得到 标签 也可以试试 ...on Tag 提取标记符或它指向的提交,具体取决于您想要什么。下面是一个例子:

{
  repository(owner: "spring-projects", name: "spring-framework") {
    releases(last: 100) {
      edges {
        node {
          url
          releaseAssets(last: 100) {
            edges {
              node {
                downloadUrl
              }
            }
          }
          tag {
            ...refInfo
          }
        }
      }
    }
    tags: refs(refPrefix: "refs/tags/", last: 30) {
      edges {
        node {
          ...refInfo
        }
      }
    }
  }
}

fragment refInfo on Ref {
  name
  target {
    sha: oid
    commitResourcePath
    __typename
    ... on Tag {
      target {
        ... on Commit {
          ...commitInfo
        }
      }
      tagger {
        name
        email
        date
      }
    }
    ... on Commit {
      ...commitInfo
    }
  }
}

fragment commitInfo on Commit {
  zipballUrl
  tarballUrl
  author {
    name
    email
    date
  }
}

Try it in the explorer

注意在上面的例子中,我使用了 fragments 减小查询大小并提高可读性

我猜如果裁判指的是 标签 对象是 annotated tag 它可以保存一条消息、一个特定的标记日期和标记信息。如果它指向 提交 对象,它是 lightweight tag 只是链接到一个提交