GitHub API (v3): Теги заказа по дате создания
Я столкнулся с проблемой/вопросом при использовании API GitHub.
Мне нужен список всех тегов, созданных после одного тега. Единственный способ сделать это-сравнить теги по дате. Однако результаты API не упорядочены по дате:
результат API (пример репозитория rails):
результаты webinterface:
то, что я ожидал, это список, упорядоченный по дате. Однако, как вы можете видеть на снимках: API возвращает v4.0.0rc1 & v4.0.0rc2 перед выпуском v4.0.0, в то время как 4.0.0 освобождается после кандидатов на выпуск. На стороне сервера даже нет даты создания / фиксации для заказа.
API релизов также не является решением. Этот API возвращает только выпуски, созданные Github, а не выпуски, созданные тегами.
есть ли способ заказать теги по дате?
спасибо вперед!
Рубен
3 ответов
на API репозиториев в настоящее время возвращает теги в том порядке, в котором они будут возвращены командой "git tag", что означает, что они отсортированы по алфавиту.
проблема с сортировкой тегов хронологически в Git заключается в том, что существует два типа тегов: легкий и аннотированный), а для легкого типа Git не хранит дату создания.
пользовательский интерфейс Releases/Tags в настоящее время сортирует теги хронологически по дате фиксации, к которой тег очков. Это снова не дата, когда был создан сам тег, но он устанавливает хронологический порядок вещей.
добавление этой альтернативной опции сортировки в 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);
};
С наилучшими пожеланиями
Edit: теперь есть более простой способ с новым API GitHub GraphQL?
С GraphQL API v4, теперь мы можем фильтровать теги по дате фиксации с помощью field: TAG_COMMIT_DATE
внутри 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
}
}
}
}
}
}
}
}
здесь