Git/Git.psm1
Function Rename-TfsGitRepository { [CmdletBinding(SupportsShouldProcess=$true)] [OutputType([Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository])] Param ( [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)] [object] $Repository, [Parameter(Mandatory=$true, Position=1)] [string] $NewName, [Parameter()] [object] $Project, [Parameter()] [object] $Collection, [Parameter()] [switch] $Passthru ) Begin { Add-Type -AssemblyName 'Microsoft.TeamFoundation.Core.WebApi' Add-Type -AssemblyName 'Microsoft.TeamFoundation.SourceControl.WebApi' } Process { if ($Repository -is [Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository]) { $Project = $Repository.ProjectReference.Name } $tp = Get-TfsTeamProject -Project $Project -Collection $Collection $tpc = $tp.Store.TeamProjectCollection $gitClient = Get-TfsClientObject -Type 'Microsoft.TeamFoundation.SourceControl.WebApi.GitHttpClient' if ($Repository -is [Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository]) { $reposToRename = @($Repository) } else { $reposToRename = Get-TfsGitRepository -Name $Repository -Project $Project -Collection $Collection } foreach($repo in $reposToRename) { if ($PSCmdlet.ShouldProcess($repo.Name, "Rename Git repository in Team Project $($tp.Name) to $NewName")) { $task = $gitClient.RenameRepositoryAsync($repo, $NewName) $task.Wait() if ($Passthru) { return $task.Result } } } } } Function Get-TfsGitRepository { [CmdletBinding()] [OutputType([Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository])] Param ( [Parameter()] [SupportsWildcards()] [string] $Name = '*', [Parameter(ValueFromPipeline=$true)] [object] $Project, [Parameter()] [object] $Collection ) Process { $tp = Get-TfsTeamProject -Project $Project -Collection $Collection $tpc = $tp.Store.TeamProjectCollection $id = $tp.Guid $gitService = $tpc.GetService([type]'Microsoft.TeamFoundation.Git.Client.GitRepositoryService') return $gitService.QueryRepositories($tp.Name) | ? Name -Like $Name } } Function Remove-TfsGitRepository { [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High')] Param ( [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [SupportsWildcards()] [Alias('Name')] [object] $Repository = '*', [Parameter()] [object] $Project, [Parameter()] [object] $Collection ) Begin { Add-Type -AssemblyName 'Microsoft.TeamFoundation.Core.WebApi' Add-Type -AssemblyName 'Microsoft.TeamFoundation.SourceControl.WebApi' } Process { if ($Repository -is [Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository]) { $Project = $Repository.ProjectReference.Name } $tp = Get-TfsTeamProject -Project $Project -Collection $Collection $tpc = $tp.Store.TeamProjectCollection $gitClient = Get-TfsClientObject -Type 'Microsoft.TeamFoundation.SourceControl.WebApi.GitHttpClient' if ($Repository -is [Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository]) { $reposToDelete = @($Repository) } else { $reposToDelete = Get-TfsGitRepository -Name $Repository -Project $Project -Collection $Collection } foreach($repo in $reposToDelete) { if ($PSCmdlet.ShouldProcess($repo.Name, "Delete Git repository from Team Project $($tp.Name)")) { $gitClient.DeleteRepositoryAsync($repo.Id).Wait() } } } } Function New-TfsGitRepository { Param ( [Parameter(Mandatory=$true)] [string] $Name, [Parameter(ValueFromPipeline=$true)] [object] $Project, [Parameter()] [object] $Collection, [Parameter()] [switch] $Passthru ) Begin { Add-Type -AssemblyName 'Microsoft.TeamFoundation.Core.WebApi' Add-Type -AssemblyName 'Microsoft.TeamFoundation.SourceControl.WebApi' } Process { $tp = Get-TfsTeamProject -Project $Project -Collection $Collection $tpc = $tp.Store.TeamProjectCollection $gitClient = Get-TfsClientObject -Type 'Microsoft.TeamFoundation.SourceControl.WebApi.GitHttpClient' $tpRef = [Microsoft.TeamFoundation.Common.TeamProjectReference] @{Id = $tp.Guid; Name = $tp.Name} $repoToCreate = [Microsoft.TeamFoundation.SourceControl.WebApi.GitRepository] @{Name = $Name; ProjectReference = $tpRef} $task = $gitClient.CreateRepositoryAsync($repoToCreate, $tp.Name) $task.Wait() if ($Passthru) { return $task.Result } } } |