203 строки
7.2 KiB
PowerShell
203 строки
7.2 KiB
PowerShell
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
function Get-GitHubRepositoryFork
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Gets the list of forks of the specified repository on GitHub.
|
|
|
|
.DESCRIPTION
|
|
Gets the list of forks of the specified repository on GitHub.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Sort
|
|
The sort order for results.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.PARAMETER NoStatus
|
|
If this switch is specified, long-running commands will run on the main thread
|
|
with no commandline status update. When not specified, those commands run in
|
|
the background, enabling the command prompt to provide status information.
|
|
If not supplied here, the DefaultNoStatus configuration property value will be used.
|
|
|
|
.EXAMPLE
|
|
Get-GitHubRepositoryFork -OwnerName PowerShell -RepositoryName PowerShellForGitHub
|
|
|
|
Gets all of the forks for the PowerShell\PowerShellForGitHub repository.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParametersetName='Elements')]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSShouldProcess", "", Justification="Methods called within here make use of PSShouldProcess, and the switch is passed on to them inherently.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Uri')]
|
|
[string] $Uri,
|
|
|
|
[ValidateSet('newest', 'oldest', 'stargazers')]
|
|
[string] $Sort = 'newest',
|
|
|
|
[string] $AccessToken,
|
|
|
|
[switch] $NoStatus
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements -DisableValidation
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
'Sort' = $Sort
|
|
}
|
|
|
|
$getParams = @(
|
|
"sort=$Sort"
|
|
)
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/forks`?" + ($getParams -join '&')
|
|
'Description' = "Getting all forks of $RepositoryName"
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
|
|
}
|
|
|
|
return Invoke-GHRestMethodMultipleResult @params
|
|
}
|
|
|
|
function New-GitHubRepositoryFork
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Creates a new fork of a repository on GitHub.
|
|
|
|
.DESCRIPTION
|
|
Creates a new fork of a repository on GitHub.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER OrganizationName
|
|
Name of the organization that the new repository should be created under.
|
|
If not specified, will be created under the current authenticated user's account.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.PARAMETER NoStatus
|
|
If this switch is specified, long-running commands will run on the main thread
|
|
with no commandline status update. When not specified, those commands run in
|
|
the background, enabling the command prompt to provide status information.
|
|
If not supplied here, the DefaultNoStatus configuration property value will be used.
|
|
|
|
.EXAMPLE
|
|
New-GitHubRepositoryFork -OwnerName PowerShell -RepositoryName PowerShellForGitHub
|
|
|
|
Creates a fork of this repository under the current authenticated user's account.
|
|
|
|
.EXAMPLE
|
|
New-GitHubRepositoryFork -OwnerName PowerShell -RepositoryName PowerShellForGitHub -OrganizationName OctoLabs
|
|
|
|
Creates a fork of this repository under the OctoLabs organization.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParametersetName='Elements')]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSShouldProcess", "", Justification="Methods called within here make use of PSShouldProcess, and the switch is passed on to them inherently.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Uri')]
|
|
[string] $Uri,
|
|
|
|
[string] $OrganizationName,
|
|
|
|
[string] $AccessToken,
|
|
|
|
[switch] $NoStatus
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements -DisableValidation
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
$getParams = @()
|
|
if ($PSBoundParameters.ContainsKey('OrganizationName') -and
|
|
(-not [String]::IsNullOrEmpty($OrganizationName)))
|
|
{
|
|
$telemetryProperties['OrganizationName'] = Get-PiiSafeString -PlainText $OrganizationName
|
|
$getParams += "organization=$OrganizationName"
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/forks`?" + ($getParams -join '&')
|
|
'Method' = 'Post'
|
|
'Description' = "Creating fork of $RepositoryName"
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
|
|
}
|
|
|
|
$result = Invoke-GHRestMethod @params
|
|
|
|
Write-Log -Message 'Forking a repository happens asynchronously. You may have to wait a short period of time (up to 5 minutes) before you can access the git objects.' -Level Warning
|
|
return $result
|
|
}
|