2013-10-18 101 views
9

我在使用GitHub API時遇到了一個問題/問題。GitHub API(v3):按創建日期排序的標籤

我需要一個標籤後創建的所有標籤列表。做到這一點的唯一方法是按日期比較標籤。然而,從API結果不會按日期排序:

結果從API(導軌庫爲例):

API results

結果從webinterface:

Webinterface results

我的期望是按日期排序的列表。但是,正如您在圖片中看到的那樣:API在v4.0.0發佈之前返回了v4.0.0rc1 & v4.0.0rc2,而在發佈候選版本之後發佈了4.0.0。在服務器端甚至沒有創建/提交日期來訂購。

版本API也不是解決方案。這個API只返回由Github創建的版本,而不是由標籤創建的版本。

有什麼方法可以按日期排列標籤嗎?

在此先感謝!

回答

9

Repositories API目前,他們將被「混帳標籤」命令,這意味着它們是按字母排序返回的順序返回標籤。

在Git中按時間順序排序標籤的問題是有兩種類型的標籤,輕量級和註釋),對於輕量級類型,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

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/10532153) –

+1

我現在將代碼直接添加到帖子中。 :) – strarsis

2

隨着GraphQL API v4,我們現在可以在orderBy的內篩選標籤。下面將通過提交日期進行升序排序的標籤:

{ 
    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

這裏,tagger領域內target將僅用於填充註釋標籤&將是空的輕型標籤。

正如taggerdate屬性賦予標籤的創建日期(僅適用於註釋標記),它可以通過在客戶端創建日期容易過濾(無需檢索所有標籤1 1)

注意,此時爲orderBy.field可用的選項TAG_COMMIT_DATE & ALPHABETICAL(無TAG_CREATION_DATE