【问题标题】:GitHub API (v3): Order tags by creation dateGitHub API (v3):按创建日期排序标签
【发布时间】:2013-10-27 10:47:32
【问题描述】:

我在使用 GitHub API 时遇到了问题。

我需要在单个标签之后创建的所有标签的列表。这样做的唯一方法是按日期比较标签。但是,API 的结果不是按日期排序的:

API 的结果(rails 存储库示例):

来自网络界面的结果:

我所期望的是按日期排序的列表。但是,正如您在图片中看到的:API 在 v4.0.0 发布之前返回 v4.0.0rc1 和 v4.0.0rc2,而 4.0.0 在候选发布之后发布。在服务器端甚至没有要订购的创建/提交日期。

发布 API 也不是解决方案。该 API 只返回 Github 创建的版本,不返回标签创建的版本。

有没有办法按日期排序标签?

提前致谢!

鲁本

【问题讨论】:

    标签: api github github-api


    【解决方案1】:

    Repositories API 当前以“git tag”命令返回的顺序返回标签,这意味着它们是按字母顺序排序的。

    在 Git 中按时间顺序排序标签的问题是有两种类型的标签,轻量级和带注释的),对于轻量级类型,Git 不存储创建日期。

    Release/Tags UI 当前按标签指向的提交日期按时间顺序对标签进行排序。这又不是标签本身的创建日期,但它确实建立了事物的时间顺序。

    在 API 中添加这种替代排序选项在我们的功能请求列表中。

    【讨论】:

    • 这里有什么新东西吗?让标签按日期排序会很棒:)
    • 很遗憾,到目前为止,REST 调用中没有可用的排序
    【解决方案2】:

    使用GraphQL API v4,我们现在可以通过field: TAG_COMMIT_DATEorderBy 中的提交日期过滤标签。以下将按提交日期执行升序排序的标签:

    {
      repository(owner: "rails", name: "rails") {
        refs(refPrefix: "refs/tags/", last: 100, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) {
          edges {
            node {
              name
              target {
                oid
                ... on Tag {
                  message
                  commitUrl
                  tagger {
                    name
                    email
                    date
                  }
                }
              }
            }
          }
        }
      }
    }
    

    Test it in the explorer

    这里,target 中的 tagger 字段只会为带注释的标签填充,而对于轻量级标签将为空。

    由于tagger 中的date 属性给出了标签的创建日期(仅适用于带注释的标签),因此可以轻松地在客户端按创建日期进行过滤(无需一一检索所有标签)

    请注意,此时orderBy.field 的可用选项是TAG_COMMIT_DATEALPHABETICAL(没有TAG_CREATION_DATE

    【讨论】:

      【解决方案3】:

      编辑:现在可以使用GitHub GraphQL API

      作为解决方法,有一个节点模块, 它基本上获取每个标签的提交详细信息: github-api-tags-full

      > npm install github-api-tags-full github moment
      
      var GitHubApi  = require('github'),
      moment     = require('moment'),
      githubTags = require('github-api-tags-full');
      
      var github = new GitHubApi({
        version: '3.0.0'
      });
      
      githubTags({ user: 'golang', repo: 'go' }, github)
      .then(function(tags) {
        var tagsSorted = tags.sort(byAuthorDateAsc).reverse(); // descending
        console.log(tagsSorted); // prints the array of tags sorted by their creation date
      });
      
      var byAuthorDateAsc = function(tagA, tagB) {
        return githubCompareDates(
          tagA.commit.author.date,
          tagB.commit.author.date
        );
      };
      var githubCompareDates = function(dateStrA, dateStrB) {
        return moment(dateStrA).diff(dateStrB);
      };
      

      致以最诚挚的问候

      【讨论】:

        猜你喜欢
        • 2018-04-25
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多