Skip to content

Find Audit changes

Anatoly Kulakov edited this page Mar 9, 2018 · 1 revision

Обнаружение изменений Аудита

Для отслеживания изменений Аудита можно воспользоваться 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 сохранён хеш коммита, который является границей этого списка.

Стратегия обновления

  1. Если есть возможность отслеживать обновления Аудита реактивно (например использовать push notifications при работе на мобильном устройстве), то необходимо отдать этому варианту предпочтение.

  2. Иначе можно остановиться на периодической проверке последней версии Аудита (Get-AuditCurrentVersion) и сравнении её с текущей версией в приложении.

  3. При обнаружении новой версии Аудита необходимо получить список всех изменившихся файлов (Get-AuditChangesSince) относительно текущей версии. После этого, текущую версию следует изменить на Sha, полученный из Get-AuditChangesSince (не из Get-AuditCurrentVersion, иначе возможны пропуски обновлений).