2013-10-18 11 views
9

GitHub APIを使用しているときに問題が発生しました。GitHub API(v3):作成日順にタグを並べ替え

1つのタグの後に作成されるすべてのタグのリストが必要です。これを行う唯一の方法は、日付とタグを比較することです。しかし、APIからの結果を日付順されていない:APIから

結果(レールリポジトリの例):ウェブインターフェースから

API results

結果:

Webinterface results

私が期待したのは、日付順のリストです。しかし、写真でわかるように、v4.0.0のリリースより前にv4.0.0rc1 & v4.0.0rc2が返されていますが、リリース候補の後で4.0.0がリリースされています。サーバー側で注文する作成/コミット日付さえありません。

リリースAPIは解決策でもありません。このAPIは、タグで作成されたリリースではなく、Githubによって作成されたリリースのみを返します。

タグを日付順に並べる方法はありますか?

ありがとうございます!

ルーベン

答えて

9

Repositories APIは現在、彼らはそれらがアルファベット順にソートされることを意味し、「gitのタグ」コマンドによって返される順序でタグを返します。

Gitで時系列でタグを並べ替える際の問題は、軽量型と注釈付きの2種類のタグがあることです)、軽量型Gitでは作成日が保存されません。

現在、リリース/タグUIは、タグが指しているコミットの日付順にタグを並べ替えます。これは、タグ自体が作成された日付ではありませんが、物事の時系列的順序を確立します。

この代替ソートオプションをAPIに追加することは、機能リクエストリストにあります。

+2

何かであることを?それは素晴らしい日付でソートするタグを取得する:) – davidmatas

+0

@ davidmatasいいえ。 –

3

回避策として、基本的には各タグの内容をコミット取り出し、このためのノードモジュール、 があります:よろしく

編集して 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); 
}; 

は:簡単な方法が用意されました新しいGithub GraphQL APIを使用しますか?

+1

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 10532153) –

+1

コードを直接投稿に追加しました。 :) – strarsis

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フィールドには、軽量のタグのために空になります。

taggerdateプロパティが(のみ注釈付きタグ用)タグの作成日を与えると、それは

(1ですべてのタグ1を取得しなくても)簡単にクライアント側で作成日によってフィルタリングすることが可能です

(注)この時点でorderBy.fieldで使用可能なオプションは、ここで新しいTAG_COMMIT_DATE & ALPHABETICAL(なしTAG_CREATION_DATE

関連する問題