DSCResources/cGitRepositoryBranchUpdate/cGitRepositoryBranchUpdate.psm1

function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param (
        [parameter(Mandatory = $true)]
        [System.String]
        $BaseDirectory,

        [parameter(Mandatory = $true)]
        [System.String]
        $Repository,

        [parameter(Mandatory = $true)]
        [System.String]
        $Branch
    )
    
    Return @{
        'BaseDirectory' = $BaseDirectory
        'Repository' = $Repository
        'Branch' = $Branch
    }
}
Export-ModuleMember -Function Get-TargetResource -Verbose:$false


function Set-TargetResource
{
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true)]
        [System.String]
        $BaseDirectory,

        [parameter(Mandatory = $true)]
        [System.String]
        $Repository,

        [parameter(Mandatory = $true)]
        [System.String]
        $Branch
    )
}
Export-ModuleMember -Function Set-TargetResource -Verbose:$false


function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param (
        [parameter(Mandatory = $true)]
        [System.String]
        $BaseDirectory,

        [parameter(Mandatory = $true)]
        [System.String]
        $Repository,

        [parameter(Mandatory = $true)]
        [System.String]
        $Branch
    )
    
    $RepositoryName = $Repository.Split('/')[-1]
    $StartingDir = (pwd).Path
    Try
    {
        Set-Location -Path "$($BaseDirectory)\$($RepositoryName)"
        $EAPHolder = $ErrorActionPreference
        $ErrorActionPreference = 'SilentlyContinue'
        $Null = git fetch
        $Null = git reset --hard origin/$Branch
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]$EAPHolder
    }
    Catch { throw }
    Finally { Set-Location -Path $StartingDir }

    Return $True
}
Export-ModuleMember -Function Test-TargetResource -Verbose:$false