Я разрабатываю приложение GitHub, используя структуру nodejs и probot. Я вижу класс Application (https://probot.github.io/api/latest/classes/application.html) платформы probot содержит такие события, как:
> event: "pull_request" | "pull_request.assigned" |
> "pull_request.closed" | "pull_request.edited" | "pull_request.labeled"
> | "pull_request.opened" | "pull_request.reopened" |
> "pull_request.review_request_removed" |
> "pull_request.review_requested" | "pull_request.unassigned" |
> "pull_request.unlabeled" | "pull_request.synchronize
Я заметил, что при нажатии кнопки Создать запрос на вытягивание запускаются события pull_request, а также pull_request.opened.
Чтобы понять это поведение запуска нескольких, казалось бы, похожих событий по нажатию одной и той же кнопки, я попытался повторно открыть закрытый запрос и распечатать объект Context для обоих pull_request. событие, а также событие pull_request.reopened.
Я провел сравнение обоих контекстов и обнаружил, что контексты, возвращаемые обоими событиями, идентичны, за исключением того, что контекст события pull_request содержит следующие дополнительные свойства:
merged: false,
mergeable: null,
rebaseable: null,
mergeable_state: 'unknown',
merged_by: null,
comments: 6,
review_comments: 0,
maintainer_can_modify: false,
commits: 1,
additions: 1,
deletions: 0,
changed_files: 1 },
repository:
{ id: 123456789,
node_id: '',
name: '',
full_name: '',
private: true,
owner: [Object],
html_url: 'some-url-here'
.
.
///////////////////--------many more urls-------//////////////////////
created_at: '2020-04-0',
updated_at: '2020-04-0',
Мы знаем, что общий формат возвращаемого объекта контекста следующий:
Context {
name: 'pull_request',
id: '187128937812-8219-89891892133-16752-1234576765545',
payload:
{ action: 'reopened',
number: 1,
pull_request:
{ url:
.
.
.and so on.......
Эта вышеуказанная информация присутствует в обоих контекстах. Мы видим, что это также говорит нам о конкретном действии, которое было выполнено, и это обозначается context.payload.action. Таким образом, если кому-то требуется получить pull_request.opened, он может сделать это, просто используя событие pull_request следующим образом:
app.on('pull_request', async context => {
console.log('---------------------- on pull_request event')
console.log('Context returned :----', context)
})
И ему не нужно заботиться о других более конкретных событиях (здесь pull_request.opened), т. е. кроме того, что достигается с помощью приведенного выше кода, приведенный ниже код не предоставит реальной дополнительной помощи:
app.on('pull_request.opened', async context => {
console.log('---------------------- on pull_request.opened')
console.log('Context returned :----', context)
})
Итак, вот вопрос, который меня беспокоит: какова цель события pull_request , если другие его конкретные формы (например, pull_request.reopened) не несут другой информации (точнее , если их контексты не содержат разной информации) ?
Я совершенно уверен, что за этим действительно скрывается некоторая мудрость. Я не могу найти ничего в Интернете, ничего в документах, что могло бы объяснить это.
Пожалуйста, помогите мне понять скрытую мудрость.
РЕДАКТИРОВАТЬ 1: НАЧАТЬ
Забыл упомянуть одно наблюдение: повторное открытие запроса на включение также вызывает событие issue_comment.created. Итак, три события запускаются одним действием (нажатием Создать запрос на включение).
РЕДАКТИРОВАТЬ 2: НАЧАТЬ