Git/Create-GitRepoDeltaFromBase.ps1

function Create-GitRepoDeltaFromBase
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$RepoPath,
        [Parameter(Mandatory=$false)]
        [switch]$Reverse,
        [Parameter(Mandatory=$false)]
        [switch]$NoContent,
        [Parameter(Mandatory=$false)]
        [string]$BasePath = ''
    )

    if ($BasePath -eq '') {
        $BasePath = Get-GitRepoBasePath -RepoPath $RepoPath
    }

    $TempFolder = Create-TempDirectory
    $DeltasFolder = Join-Path $TempFolder 'Deltas'
    $ReplacementFolder = Join-Path $TempFolder 'Replacements'
    $BaseFolder = Join-Path $TempFolder 'Base'
    $AdditionFolder = Join-Path $TempFolder 'Addition'    

    Create-EmptyDirectory $DeltasFolder
    Create-EmptyDirectory $ReplacementFolder
    Create-EmptyDirectory $BaseFolder
    Create-EmptyDirectory $AdditionFolder

    Write-Host -ForegroundColor Green "Retrieving differences between $BasePath and $RepoPath"
    $Objects = Invoke-TFFolderDiff -SourceFolder $BasePath -TargetFolder $RepoPath -TargetVersion $ChangesetNo
    [int]$ObjectNo = 0

    foreach ($Object in $Objects)
    {
        $ObjectNo++
        Write-Progress -Activity ('Creating deltas for {0}' -f $RepoPath) -PercentComplete (($ObjectNo / $Objects.Count) * 100)

        if ($NoContent)
        {
            New-Item -Path (Join-Path $ReplacementFolder $Object) -ItemType File
        }
        else
        {
            if (Test-Path (Join-Path $RepoPath $Object))
            {
                Copy-Item (Join-Path $RepoPath $Object) (Join-Path $AdditionFolder $Object)
            }            

            if ([IO.File]::Exists((Join-Path $AdditionFolder $Object)))
            {
                $VersionList = Get-NAVObjectVersion (Join-Path $AdditionFolder $Object)
                $CustomVerionList = ''
                if ($VersionList -ne '')
                {
                    $CustomVerionList = Get-CustomVersionList $VersionList
                }

                if ($CustomVerionList -eq '')
                {
                    Remove-Item (Join-Path $AdditionFolder $Object) -Force
                }
                else
                {
                    Get-ObjectsFromTFSBranch -BranchPath (Join-Path $BasePath $Object) -DestinationPath (Join-Path $BaseFolder $Object) -Type File            
                    if (!(Get-IsStandardNAVObject -ObjectFileName $Object))
                    {
                        [IO.File]::Move((Join-Path $AdditionFolder $Object),(Join-Path $ReplacementFolder $Object))          
                    }
                }
            }
        }
    }

    if (!$NoContent.IsPresent)
    {
        if ($Reverse)
        {
            Compare-NAVApplicationObject -OriginalPath $AdditionFolder -ModifiedPath $BaseFolder -DeltaPath $DeltasFolder
        }
        else
        {
            Compare-NAVApplicationObject -OriginalPath $BaseFolder -ModifiedPath $AdditionFolder -DeltaPath $DeltasFolder
        }
    }

    Write-Progress -Activity ('Creating deltas for {0}' -f $RepoPath) -Completed

    $ResultObject = New-Object System.Object
    $ResultObject | Add-Member -Type NoteProperty -Name 'DeltasPath' -Value $DeltasFolder 
    $ResultObject | Add-Member -Type NoteProperty -Name 'ReplacementsPath' -Value $ReplacementFolder
    $ResultObject
}

Export-ModuleMember -Function Create-GitRepoDeltaFromBase