Private/Repository/Get-CgrApprovedSourceState.ps1

function Get-CgrApprovedSourceState {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [psobject] $Repository,

        [Parameter(Mandatory)]
        [ValidateSet('Snapshot', 'FullHistory')]
        [string] $ContentMode
    )

    $repositoryId = Get-CgrObjectProperty -InputObject $Repository -Name 'Id'
    $repositoryNodeId = Get-CgrObjectProperty -InputObject $Repository -Name 'NodeId'

    if ($ContentMode -eq 'FullHistory') {
        $identity = Get-CgrRepositoryFullHistoryIdentity -Repository $Repository
        $planningWorkspaceBytesValue = Get-CgrObjectProperty -InputObject $identity -Name 'PlanningWorkspaceBytes'
        $planningWorkspaceBytes = if ($null -eq $planningWorkspaceBytesValue) { 0L } else { [long] $planningWorkspaceBytesValue }
        return [pscustomobject] @{
            PSTypeName = 'CopyGitHubRepo.ApprovedSourceState'
            SchemaVersion = 1
            ContentMode = 'FullHistory'
            Repository = $Repository.FullName
            RepositoryId = if ($null -ne $repositoryId) { [long] $repositoryId } else { $null }
            RepositoryNodeId = $repositoryNodeId
            DefaultBranch = $identity.DefaultBranch
            Refs = @($identity.Refs)
            ReachableCommitCount = $identity.ReachableCommitCount
            BranchTrees = @($identity.BranchTrees)
            GitLfsObjectsAvailable = [bool] $identity.GitLfsObjectsAvailable
            PlanningWorkspaceBytes = $planningWorkspaceBytes
            PlanningWorkspaceEvidenceKind = if ($planningWorkspaceBytes -gt 0) { 'ObservedPlanningWorkspaceLowerBound' } else { 'Unknown' }
            CapturedAtUtc = [DateTimeOffset]::UtcNow.ToString('o')
        }
    }

    $treeIdentity = Get-CgrRepositoryDefaultBranchTree -Repository $Repository
    $historicalRecords = Get-CgrSnapshotHistory -Repository $Repository
    $planningWorkspaceBytesValue = Get-CgrObjectProperty -InputObject $treeIdentity -Name 'PlanningWorkspaceBytes'
    $planningWorkspaceBytes = if ($null -eq $planningWorkspaceBytesValue) { 0L } else { [long] $planningWorkspaceBytesValue }
    return [pscustomobject] @{
        PSTypeName = 'CopyGitHubRepo.ApprovedSourceState'
        SchemaVersion = 1
        ContentMode = 'Snapshot'
        Repository = $Repository.FullName
        RepositoryId = if ($null -ne $repositoryId) { [long] $repositoryId } else { $null }
        RepositoryNodeId = $repositoryNodeId
        DefaultBranch = $treeIdentity.BranchName
        CommitSha = $treeIdentity.CommitSha
        TreeSha = $treeIdentity.TreeSha
        GitLfsObjectsAvailable = Get-CgrObjectProperty -InputObject $treeIdentity -Name 'GitLfsObjectsAvailable'
        GitLfsPointerFiles = @(Get-CgrObjectProperty -InputObject $treeIdentity -Name 'GitLfsPointerFiles')
        HistoricalRecords = $historicalRecords
        PlanningWorkspaceBytes = $planningWorkspaceBytes
        PlanningWorkspaceEvidenceKind = if ($planningWorkspaceBytes -gt 0) { 'ObservedPlanningWorkspaceLowerBound' } else { 'Unknown' }
        CapturedAtUtc = [DateTimeOffset]::UtcNow.ToString('o')
    }
}