Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

# This script will:
#     Locate all synced repos on this machine
#         Report on diffs between versions on master and this machine
#     
#

$RepoList = @() 
$Masters = @{}
$MasterData = @{}

# Scan local repo Detecting masters
#    Slurp in all data about all the Repos on Master servers
#    Its quicker than accessing them one at a time
#
Get-CimInstance -Namespace "root\VisualSVN" -ClassName VisualSVN_Repository | ForEach-Object {

    # Only process Slave VFDS repos
    # Type of repository: 0 - FSFS, 1 - VDFS (master), 2 - VDFS (slave)
    #
    if ( $_.type -eq "2" )
    {
        $entry = @{}
        $entry.Add( 'Repo', $_.Name)
        $masterServer = $_.MasterServer
        $entry.Add('Master', $masterServer)
                
        if ( -not $Masters.ContainsKey($masterServer)) {
        $Masters.Add($masterServer, 1)
        Get-CimInstance -ComputerName $MasterServer -Namespace root\VisualSVN -ClassName VisualSVN_Repository | ForEach-Object {
            
            $mName = $masterServer + $_.Name
            $MasterData.Add($mName, $_)
            }

        }
        $RepoList += $_
    }
}

# Generate output
foreach ($repo in $RepoList.GetEnumerator() | Sort-Object {$_.Name}) {
        $MasterServer = $repo.MasterServer
        $MasterName = $repo.MasterRepository
        $SlaveRevNo = $repo.TotalRevisions

        #
        # Get data from Master
        #
        #Write-Host "MasterServer: $MasterServer"
        $mName = $MasterServer + $MasterName
        $master = $MasterData.Item($mName)
        $MasterRevNo = $master.TotalRevisions

        $diff = $MasterRevNo - $SlaveRevNo
        $DiffStr = ""
        if ($diff -ne 0 ) { $DiffStr = " - $diff version to go" }

        Write-Host ("{4,20} {0,20} {1,10} {2,10} {3}" -f $repo.name, $MasterRevNo, $SlaveRevNo, $DiffStr, $MasterServer)
    
}