Github GraphQL - получение списка коммитов репозитория
Я использую GraphQL, чтобы получить некоторые данные из списка репозиториев с помощью API Github GraphQL (v4). Я хочу получить список последних коммитов из репозитория, независимо от того, что является веткой коммита / tag / ref.
Сейчас я делаю следующее, чтобы получить список коммитов из определенного репозитория:
... on Repository{
refs(refPrefix:"refs/",orderBy:$refOrder,first:1){
edges{
node{
... on Ref{
target{
... on Commit{
history(first:10){
totalCount
edges{
node{
... on Commit{
committedDate
}
}
}
}
}
}
}
}
}
}
}
куда $refOrder
это объект, который я отправляю вместе с запросом, и он определен ниже:
{
"refOrder": {
"direction": "DESC",
"field": "TAG_COMMIT_DATE"
}
}
Этот кусок кода работает, но не получает результаты, которые я хочу. Ответ возвращается со списком коммитов, но не обязательно последними коммитами из хранилища. Когда я захожу на страницу репозитория и нажимаю "Коммиты", я обычно вижу список коммитов, которые являются более новыми, чем то, что я получил в результате моего вызова API.
Что мне не хватает? Должен ли я попробовать другой refPrefix
или же orderBy
аргумент? Я уже попробовал "мастер" как refPrefix
, но столкнулся с той же проблемой.
2 ответа
Просто понял, что то, что я искал, это поле, которое существует в Repository
объект называется defaultBranchRef
, Используя это поле, я смог получить данные, которые искал.
Мой запрос теперь выглядит так:
... on Repository{
defaultBranchRef{
target{
... on Commit{
history(first:10){
edges{
node{
... on Commit{
committedDate
}
}
}
}
}
}
}
}
Если вы также заинтересованы в получении последних коммитов для всех веток (не только ветки по умолчанию), вы можете запросить ссылку с префиксом refs/heads/
:
{
repository(owner: "bertrandmartel", name: "callflow-workshop") {
refs(refPrefix: "refs/heads/", orderBy: {direction: DESC, field: TAG_COMMIT_DATE}, first: 100) {
edges {
node {
... on Ref {
name
target {
... on Commit {
history(first: 2) {
edges {
node {
... on Commit {
committedDate
}
}
}
}
}
}
}
}
}
}
}
}
В вашем случае с помощью refs/
также дал вам тег ref.