-
Notifications
You must be signed in to change notification settings - Fork 25
Find Audit changes
Для отслеживания изменений Аудита можно воспользоваться GitHub REST API.
Для получения текущей версии Аудита можно воспользоваться подобным запросом:
function Get-AuditCurrentVersion()
{
$head = @{
'Accept' = 'application/vnd.github.VERSION.sha'
'User-Agent' = 'DotNetRu-Updater'
}
Invoke-RestMethod "https://api.github.com/repos/DotNetRu/Audit/commits/master" -Headers $head
}
> Get-AuditCurrentVersion
c2f3fc7437123a51b45d730b848b60910a9a9333
Для получения списка файлов, в которых произошло изменение, относительно BaseCommit
можно воспользоваться подобным запросом:
function Get-AuditChangesSince([string] $BaseCommit = $(throw 'Base commit requared'))
{
$head = @{
'Accept' = 'application/vnd.github.v3+json'
'User-Agent' = 'DotNetRu-Updater'
}
$diff = Invoke-RestMethod "https://api.github.com/repos/DotNetRu/Audit/compare/$BaseCommit...master" -Headers $head
[PSCustomObject] @{
Sha = $diff.commits | select -Last 1 -ExpandProperty sha
Files = $diff.files | select -ExpandProperty filename
}
}
> Get-AuditChangesSince -BaseCommit '3ddd7e73f395c0e5214aefddc912d9ac45689925' | Format-List
Sha : c2f3fc7437123a51b45d730b848b60910a9a9333
Files : {db/meetups/SpbDotNet-6.xml, db/speakers/Anatoly-Kulakov/index.xml, db/speakers/Artem-Akulakov/index.xml, db/speakers/Igor-Labutin/index.xml...}
Функция в примере возвращает объект с двумя полями. В свойстве Files
находится массив относительных имён всех изменённых файлов. В свойстве Sha
сохранён хеш коммита, который является границей этого списка.
-
Если есть возможность отслеживать обновления Аудита реактивно (например использовать push notifications при работе на мобильном устройстве), то необходимо отдать этому варианту предпочтение.
-
Иначе можно остановиться на периодической проверке последней версии Аудита (
Get-AuditCurrentVersion
) и сравнении её с текущей версией в приложении. -
При обнаружении новой версии Аудита необходимо получить список всех изменившихся файлов (
Get-AuditChangesSince
) относительно текущей версии. После этого, текущую версию следует изменить наSha
, полученный изGet-AuditChangesSince
(не изGet-AuditCurrentVersion
, иначе возможны пропуски обновлений).