PowerShellForGitHub/GitHubPullRequests.ps1

392 строки
12 KiB
PowerShell
Исходник Обычный вид История

Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
function Get-GitHubPullRequest
{
<#
.SYNOPSIS
Retrieve the pull requests in the specified repository.
.DESCRIPTION
Retrieve the pull requests in the specified repository.
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 PullRequest
2020-05-08 01:04:51 +03:00
The specific pull request id to return back. If not supplied, will return back all
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
pull requests for the specified Repository.
.PARAMETER State
The state of the pull requests that should be returned back.
.PARAMETER Head
Filter pulls by head user and branch name in the format of 'user:ref-name'
.PARAMETER Base
Base branch name to filter the pulls by.
.PARAMETER Sort
What to sort the results by.
* created
* updated
* popularity (comment count)
* long-running (age, filtering by pulls updated in the last month)
.PARAMETER Direction
The direction to be used for Sort.
.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.
.OUTPUTS
[PSCustomObject[]] List of Pull Requests that match the specified criteria.
.EXAMPLE
$pullRequests = Get-GitHubPullRequest -Uri 'https://github.com/PowerShell/PowerShellForGitHub'
.EXAMPLE
$pullRequests = Get-GitHubPullRequest -OwnerName Microsoft -RepositoryName PowerShellForGitHub -State Closed
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
#>
[CmdletBinding(
SupportsShouldProcess,
2020-05-08 01:04:51 +03:00
DefaultParameterSetName='Elements')]
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
[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] $PullRequest,
[ValidateSet('Open', 'Closed', 'All')]
[string] $State = 'Open',
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
[string] $Head,
[string] $Base,
[ValidateSet('Created', 'Updated', 'Popularity', 'LongRunning')]
[string] $Sort = 'Created',
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
[ValidateSet('Ascending', 'Descending')]
[string] $Direction = 'Descending',
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
[string] $AccessToken,
[switch] $NoStatus
)
Write-InvocationLog
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
$elements = Resolve-RepositoryElements
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
$OwnerName = $elements.ownerName
$RepositoryName = $elements.repositoryName
$telemetryProperties = @{
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
'ProvidedPullRequest' = $PSBoundParameters.ContainsKey('PullRequest')
}
$uriFragment = "/repos/$OwnerName/$RepositoryName/pulls"
$description = "Getting pull requests for $RepositoryName"
if (-not [String]::IsNullOrEmpty($PullRequest))
{
$uriFragment = $uriFragment + "/$PullRequest"
$description = "Getting pull request $PullRequest for $RepositoryName"
}
$sortConverter = @{
'Created' = 'created'
'Updated' = 'updated'
'Popularity' = 'popularity'
'LongRunning' = 'long-running'
}
$directionConverter = @{
'Ascending' = 'asc'
'Descending' = 'desc'
}
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
$getParams = @(
"state=$($State.ToLower())",
"sort=$($sortConverter[$Sort])",
"direction=$($directionConverter[$Direction])"
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
)
if ($PSBoundParameters.ContainsKey('Head'))
{
$getParams += "head=$Head"
}
if ($PSBoundParameters.ContainsKey('Base'))
{
$getParams += "base=$Base"
}
$params = @{
'UriFragment' = $uriFragment + '?' + ($getParams -join '&')
'Description' = $description
'AcceptHeader' = 'application/vnd.github.symmetra-preview+json'
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
Module restructure to v0.2.0 + Significant restructing and refactoring of entire module to make future expansion easier. + Significant documentation updates ([CHANGELOG](./CHANGELOG.md), [CONTRIBUTING.md](./CONTRIBUTING.md), [GOVERNANCE.md](./GOVERNANCE.md), [README.md](./README.md), [USAGE.md](./USAGE.md)) + Added `Set-GitHubAuthentication` (and related methods) for securely caching the Access Token + Added `Set-GitHubConfiguration` (and related methods) to enable short and long-term configuration of the module. + Added ability to asynchronously see status update of REST requests. + Added logging and telemetry to the module (each can be disabled if desired). + Tests now auto-configure themselves across whatever account information is supplied in [Tests/Config/Settings.ps1](./Tests/Config/Settings.ps1) + Added support for a number of additional GitHub API's: + All [Miscellaneous API's](https://developer.github.com/v3/misc/) + Ability to fully query, update, remove, lock, and unlock Issues. + Enhanced pull request querying support + Ability tofully query, create, and remove Repositories, as well as transfer ownership, get tags, get/set topic and current used programming languages. + Enhanced user query support as well as being able update information for the current user. * Made parameter ordering consistent across all functions (OwnerName is now first, then RepositoryName) * Normalized all parameters to use SentenceCase * All functions that can take a Uri or OwnerName/RepositoryName now support both options. * Made all parameter names consistent across functions: * `GitHubAccessToken` -> `AccessToken` * `RepositoryUrl` -> `Uri` * `Organization` -> `OrganizationName` * `Repository` -> `RepositoryName` * `Owner` -> `OwnerName` * Normalized usage of Verbose, Info and Error streams - `New-GitHubLabels` was renamed to `Set-GitHubLabel` and can now optionally take in the labels to apply to the Repository. - `Get-GitHubIssueForRepository` has been removed and replaced with `Get-GitHubIssue`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/closed date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubIssue` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-issues). - `Get-GitHubWeeklyIssueForRepository` has been removed and functionally replaced by `Group-GitHubIssue`. For an updated example of using it, refer to [example usage](USAGE.md#querying-issues) - `Get-GitHubTopIssueRepository` has been removed. We have [updated examples](USAGE.md#querying-issues) for how to accomplish the same scenario. - `Get-GitHubPullRequestForRepository` has been removed and replaced with `Get-GitHubPullRequest`. The key difference between these two is that it no longer accepts multiple repositories as single input, and filtering on creation/merged date can be done after the fact piping the results into `Where-Object` now that the returned objects from `Get-GitHubPullRequest` have actual `[DateTime]` values for the date properties. For an updated example of doing this, refer to [example usage](USAGE.md#querying-pull-requests). - `Get-GitHubWeeklyPullRequestForRepository` has been removed and functionally replaced by `Group-GitHubPullRequest`. For an updated example of using it, refer to [example usage](USAGE.md#querying-pull-requests) - `Get-GitHubTopPullRequestRepository` has been removed. We have [updated examples](USAGE.md#querying-pull-requests) for how to accomplish the same scenario. - `Get-GitHubRepositoryNameFromUrl` and `GitHubRepositoryOwnerFromUrl` have been removed and functionally replaced by `Split-GitHubUri` - `Get-GitHubRepositoryUniqueContributor` has been removed. We have an [updated example](USAGE.md#querying-contributors) for how to accomplish the same scenario. - `GitHubOrganizationRepository` has been removed. You can now retrieve repositories for an organization via `Get-GitHubRepository -OrganizationName <name>`. - `Get-GitHubAuthenticatedUser` has been replaced with `Get-GitHubUser -Current`. Fixes Issue #34: Warning output on import is being written out twice Fixes Issue #33: TLS error in Get-GitHubIssueForRepository : Failed to execute query with exception Fixes Issue #26: Token in template file Fixes Issue #24: Add a command for configuration
2018-10-31 09:14:28 +03:00
}
return Invoke-GHRestMethodMultipleResult @params
}
function New-GitHubPullRequest
{
<#
.SYNOPSIS
Create a new pull request in the specified repository.
.DESCRIPTION
Opens a new pull request from the given branch into the given branch in the specified repository.
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 Title
The title of the pull request to be created.
.PARAMETER Body
The text description of the pull request.
.PARAMETER Issue
The GitHub issue number to open the pull request to address.
.PARAMETER Head
The name of the head branch (the branch containing the changes to be merged).
May also include the name of the owner fork, in the form "${fork}:${branch}".
.PARAMETER Base
The name of the target branch of the pull request
(where the changes in the head will be merged to).
.PARAMETER HeadOwner
The name of fork that the change is coming from.
Used as the prefix of $Head parameter in the form "${HeadOwner}:${Head}".
If unspecified, the unprefixed branch name is used,
creating a pull request from the $OwnerName fork of the repository.
.PARAMETER MaintainerCanModify
If set, allows repository maintainers to commit changes to the
head branch of this pull request.
.PARAMETER Draft
If set, opens the pull request as a draft.
.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.
.OUTPUTS
[PSCustomObject] An object describing the created pull request.
.EXAMPLE
$prParams = @{
OwnerName = 'Microsoft'
Repository = 'PowerShellForGitHub'
Title = 'Add simple file to root'
Head = 'octocat:simple-file'
Base = 'master'
Body = "Adds a simple text file to the repository root.`n`nThis is an automated PR!"
MaintainerCanModify = $true
}
$pr = New-GitHubPullRequest @prParams
.EXAMPLE
New-GitHubPullRequest -Uri 'https://github.com/PowerShell/PSScriptAnalyzer' -Title 'Add test' -Head simple-test -HeadOwner octocat -Base development -Draft -MaintainerCanModify
.EXAMPLE
New-GitHubPullRequest -Uri 'https://github.com/PowerShell/PSScriptAnalyzer' -Issue 642 -Head simple-test -HeadOwner octocat -Base development -Draft
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSShouldProcess", "", Justification="Methods called within here make use of PSShouldProcess, and the switch is passed on to them inherently.")]
[CmdletBinding(SupportsShouldProcess, DefaultParameterSetName='Elements_Title')]
param(
[Parameter(ParameterSetName='Elements_Title')]
[Parameter(ParameterSetName='Elements_Issue')]
[string] $OwnerName,
[Parameter(ParameterSetName='Elements_Title')]
[Parameter(ParameterSetName='Elements_Issue')]
[string] $RepositoryName,
[Parameter(
Mandatory,
ParameterSetName='Uri_Title')]
[Parameter(
Mandatory,
ParameterSetName='Uri_Issue')]
[string] $Uri,
[Parameter(
Mandatory,
ParameterSetName='Elements_Title')]
[Parameter(
Mandatory,
ParameterSetName='Uri_Title')]
[ValidateNotNullOrEmpty()]
[string] $Title,
[Parameter(ParameterSetName='Elements_Title')]
[Parameter(ParameterSetName='Uri_Title')]
[string] $Body,
[Parameter(
Mandatory,
ParameterSetName='Elements_Issue')]
[Parameter(
Mandatory,
ParameterSetName='Uri_Issue')]
[int] $Issue,
[Parameter(Mandatory)]
[string] $Head,
[Parameter(Mandatory)]
[string] $Base,
[string] $HeadOwner,
[switch] $MaintainerCanModify,
[switch] $Draft,
[string] $AccessToken,
[switch] $NoStatus
)
Write-InvocationLog
if (-not [string]::IsNullOrWhiteSpace($HeadOwner))
{
if ($Head.Contains(':'))
{
$message = "`$Head ('$Head') was specified with an owner prefix, but `$HeadOwner ('$HeadOwner') was also specified." +
" Either specify `$Head in '<owner>:<branch>' format, or set `$Head = '<branch>' and `$HeadOwner = '<owner>'."
Write-Log -Message $message -Level Error
throw $message
}
# $Head does not contain ':' - add the owner fork prefix
$Head = "${HeadOwner}:${Head}"
}
$elements = Resolve-RepositoryElements
$OwnerName = $elements.ownerName
$RepositoryName = $elements.repositoryName
$telemetryProperties = @{
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
}
$uriFragment = "/repos/$OwnerName/$RepositoryName/pulls"
$postBody = @{
'head' = $Head
'base' = $Base
}
if ($PSBoundParameters.ContainsKey('Title'))
{
$description = "Creating pull request $Title in $RepositoryName"
$postBody['title'] = $Title
# Body may be whitespace, although this might not be useful
if ($Body)
{
$postBody['body'] = $Body
}
}
else
{
$description = "Creating pull request for issue $Issue in $RepositoryName"
$postBody['issue'] = $Issue
}
if ($MaintainerCanModify)
{
$postBody['maintainer_can_modify'] = $true
}
if ($Draft)
{
$postBody['draft'] = $true
$acceptHeader = 'application/vnd.github.shadow-cat-preview+json'
}
$restParams = @{
'UriFragment' = $uriFragment
'Method' = 'Post'
'Description' = $description
'Body' = ConvertTo-Json -InputObject $postBody -Compress
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
}
if ($acceptHeader)
{
$restParams['AcceptHeader'] = $acceptHeader
}
return Invoke-GHRestMethod @restParams
}