Итерирование через репозитории пользователя является неоптимальным, поскольку оно пропускает любые коммиты, которые они делают в других репозиториях. Лучше использовать вместо этого Events API.
Первый шаг заключается в get the user's events:
GET /users/:username/events
Далее вам нужно перебирать возвращенных событий, проверка элементов where result.type
is set to PushEvent
. Каждый из них соответствует пользователю git push
, и фиксации от этого нажатия доступны (в обратном хронологическом порядке) как result.payload.commits
.
Вы можете отфильтровать их, чтобы игнорировать любые фиксации, сделанные другими пользователями, путем проверки того, что commit.author.email
соответствует тому, что вы ожидаете. У вас также есть доступ к таким объектам, как sha
, message
и url
, и вы можете устранить повторяющиеся фиксации через несколько нажатий, используя свойство distinct
.
В целом существует больше проблем с работой с новинками, но также дает более точное представление о том, что пользователь фактически совершил.
В случае помогает, вот некоторые example code взяты с моего сайта, который использует выше подход для извлечения последней фиксации для пользователя (реализована с использованием Node.js и octokat
npm module):
const USER = 'TODO: your GitHub user name'
const EMAIL = 'TODO: your GitHub email address'
const github = require('octokat')({ token: 'TODO: your GitHub API token' })
return github.fromUrl(`https://api.github.com/users/${USER}/events`)
.fetch()
.then(events => {
let lastCommit
events.some(event => {
return event.type === 'PushEvent' && event.payload.commits.reverse().some(commit => {
if (commit.author.email === EMAIL) {
lastCommit = {
repo: event.repo.name,
sha: commit.sha,
time: new Date(event.createdAt),
message: commit.message,
url: commit.url
}
return true
}
return false
})
})
return lastCommit
})