Я пытаюсь получить количество файлов, которые были изменены за указанный диапазон дат (ежемесячный отчет).
Я могу довольно легко получить число коммитов с помощью API GitHub V4. Я изменил этот запрос, чтобы также получить количество измененных файлов в каждом коммите, и решил, что смогу объединить их вручную. Это работает с небольшими объемами. Для справки вот запрос, который я использую:
query ($owner: String!, $name: String!, $pagedEndCursor: String, $sinceTS: GitTimestamp!, $untilTS: GitTimestamp!) {
repository(owner: $owner, name: $name) {
refs(first: 100, refPrefix: "refs/heads/", after: $pagedEndCursor, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
totalCount
edges {
node {
name
target {
... on Commit {
history(first: 100, since: $sinceTS, until: $untilTS) {
totalCount
nodes {
changedFiles
committedDate
}
pageInfo{
hasNextPage
}
}
}
}
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
Проблема, с которой я сталкиваюсь, состоит в том, что наши команды широко используют ветки, поэтому у нас есть много репозиториев, имеющих более 100 веток, поэтому я построил разбиение на страницы при обходе ветвей. Хотя вероятность того, что 100 ветвей имеют коммиты в течение определенного месяца, невелика, вполне возможно, что один ветвь может иметь более 100 коммитов в данный месяц.
Я подумал сделать подкачку в истории (я оставил самый внутренний pageInfo
, чтобы показать где), но я не думаю, что это сработает, чтобы пролистать несколько внутренних объектов.
Я мог бы сделать это за несколько проходов, где я запустил запрос, чтобы получить список ветвей, которые изменились за данный месяц, а затем запустил отдельный запрос для каждой из этих ветвей, чтобы получить измененное число файлов, но это кажется, что победить цель использования GraphQL.
Существуют ли другие способы получения измененного числа файлов для диапазона дат во всех ветвях хранилища?