Branches/Get-BaseBranchForBranch.ps1

function Get-BaseBranchForBranch()
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$BranchPath
    )

    #check if there is an extension file which specifies the base branch before reading COD1
    $BaseBranch = Get-BaseBranchFromExtensionFile -BranchPath $BranchPath
    if (($BaseBranch -ne '') -and ($BaseBranch -ne $null))
    {
        return $BaseBranch
    }

    $TempFile = Join-Path (Create-TempDirectory) 'COD1.TXT'
    Get-ObjectsFromTFSBranch -BranchPath (Join-Path $BranchPath 'COD1.TXT') -DestinationPath $TempFile -Type File    
    $VersionList = Get-VersionList $TempFile

    if ($VersionList.Contains(','))
    {
        $VersionList = $VersionList.Substring(0,$VersionList.IndexOf(','))
    }

    $BaseBranches = @()

    if ($VersionList.Substring(0,5) -eq 'NAVW1')
    {
        $MajorVersion = $VersionList.Substring(5,$VersionList.IndexOf('.',5) - 5)
        $Build = $VersionList.Substring($VersionList.LastIndexOf('.') + 1)

        if ($Build -eq '00')
        {
            $Build = 'RTM'
        }

        $LikeExpression = '$/NAV - Base Versions*{0}*{1}' -f (Get-VersionNoFromMajorBuild $MajorVersion), $Build
        $BaseBranches = Get-TFSBranches | Where-Object {$_ -like ($LikeExpression)}
        if (Get-BranchIsGBLocalised $BranchPath)
        {
            $BaseBranches = $BaseBranches | Where-Object {$_ -notlike '*W1*'}
        }
        else
        {
            $BaseBranches = $BaseBranches | Where-Object {$_ -like '*W1*'}
        }
    }

    if ($BaseBranches.Count -eq 1)
    {
        return $BaseBranches
    }
    else
    {
        throw ('Could not find a base branch for branch {0}, version list {1}' -f $BranchPath, $VersionList)
    }
}

function Get-BranchIsGBLocalised
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$BranchPath
    )

    $TempFile = (Join-Path (Create-TempDirectory) 'TAB10500.TXT')
    Get-ObjectsFromTFSBranch -BranchPath (Join-Path $BranchPath 'TAB10500.TXT') -DestinationPath $TempFile -Type File

    $Result = Test-Path -Path $TempFile
    if ($Result)
    {
        Remove-Item (Split-Path $TempFile -Parent) -Recurse -Force
    }

    $Result
}

function Get-VersionNoFromMajorBuild
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$MajorVersion
    )

    switch ($MajorVersion)
    {
        '8' {'2015'}
        '9' {'2016'}
        '10' {'2017'}
        '11' {'2018'}
    }          
}

function Get-BaseBranchFromExtensionFile()
{
    Param(
        [Parameter(Mandatory=$true)]
        [string]$BranchPath
    )

    $ExtensionPath = Join-Path $BranchPath 'Extension'
    $LocalExtensionPath = (Join-Path (Create-TempDirectory) 'extension.xml')
    Get-ObjectsFromTFSBranch -BranchPath (Join-Path $ExtensionPath 'extension.xml') -DestinationPath $LocalExtensionPath -Type File

    if (!(Test-Path $LocalExtensionPath))
    {        
        return ''
    }

    [xml]$ExtensionConfig = Get-Content $LocalExtensionPath
    return $ExtensionConfig.SelectSingleNode('extension/base').InnerText
}

Export-ModuleMember -Function Get-BaseBranchForBranch