Additions/Create-AdditionDeltaFromBase.ps1

function Create-AdditionDeltaFromBase
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$AdditionPath,
        [Parameter(Mandatory=$false)]
        [int]$ChangesetNo,
        [Parameter(Mandatory=$false)]
        [switch]$Reverse,
        [Parameter(Mandatory=$false)]
        [switch]$NoContent,
        [Parameter(Mandatory=$false)]
        [switch]$UseWorkspaceFiles
    )

    $BasePath = Get-AdditionBasePath -AdditionPath $AdditionPath
    $TempFolder = Create-TempDirectory
    $DeltasFolder = Join-Path $TempFolder 'Deltas'
    $ReplacementFolder = Join-Path $TempFolder 'Replacements'
    $BaseFolder = Join-Path $TempFolder 'Base'
    $AdditionFolder = Join-Path $TempFolder 'Addition'
    $LocalAdditionPath = Get-LocalPathForBranch -BranchPath $AdditionPath

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

    $Objects = Invoke-TFFolderDiff -SourceFolder $BasePath -TargetFolder $AdditionPath -TargetVersion $ChangesetNo
    [int]$ObjectNo = 0

    foreach ($Object in $Objects)
    {
        $ObjectNo++

        Write-Progress -Activity ('Creating deltas for {0}' -f $AdditionPath) -PercentComplete (($ObjectNo / $Objects.Count) * 100)

        if ($NoContent)
        {
            New-Item -Path (Join-Path $ReplacementFolder $Object) -ItemType File
        }
        else
        {
            #retrieve the copy of the object from the workspace if appropriate
            if (($UseWorkspaceFiles.IsPresent) -and (Test-Path (Join-Path $LocalAdditionPath $Object)))
            {
                Copy-Item (Join-Path $LocalAdditionPath $Object) (Join-Path $AdditionFolder $Object)
            }
            else
            {
                Get-ObjectsFromTFSBranch -BranchPath (Join-Path $AdditionPath $Object) -DestinationPath (Join-Path $AdditionFolder $Object) -Type File -ChangesetNo $ChangesetNo
            }

            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 $AdditionPath) -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 | Add-Member -Type NoteProperty -Name 'BasePath' -Value $BaseFolder
    $ResultObject | Add-Member -Type NoteProperty -Name 'AdditionPath' -Value $AdditionFolder
    $ResultObject

}

Export-ModuleMember -Function Create-AdditionDeltaFromBase