Skip to content

Adding Get Repository.Contents functionality #143

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions GitHubContents.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
function Get-GitHubContent {
<#
.SYNOPSIS
Retrieve the contents of a file or directory in a repository on GitHub.
.DESCRIPTION
Retrieve content from files 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 Path
The file path for which to retrieve contents
.PARAMETER MediaType
The format in which the API will return the body of the issue.
Raw - Use the Raw media type to retrieve the contents of the file.
Html - For markup files such as Markdown or AsciiDoc, you can retrieve the rendered HTML using the Html media type.
.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-GitHubContent -OwnerName microsoft -RepositoryName PowerShellForGitHub -Path README.md -MediaType Html

Get the Html output for the README.md file

.EXAMPLE
Get-GitHubContent -OwnerName microsoft -RepositoryName PowerShellForGitHub -Path LICENSE

Get the Binary file output for the LICENSE file

.EXAMPLE
Get-GitHubContent -OwnerName microsoft -RepositoryName PowerShellForGitHub -Path Tests

List the files within the "Tests" path of the 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(Mandatory, ParameterSetName = 'Elements')]
[string] $OwnerName,

[Parameter(Mandatory, ParameterSetName = 'Elements')]
[string] $RepositoryName,

[string] $Path,

[ValidateSet('Raw', 'Html')]
[string] $MediaType = 'Raw',

[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)
'Path' = $PSBoundParameters.ContainsKey('Path')
}

$uriFragment = [String]::Empty
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no value gained with this initialization given that you then go and explicitly set it to a new value at line 68 right after this in the same scope.

$description = [String]::Empty

$uriFragment = "/repos/$OwnerName/$RepositoryName/contents"

if ($PSBoundParameters.ContainsKey('Path')) {
$Path = $Path.TrimStart("\\", "/")
$uriFragment += "/$Path"
$description = "Getting content for $Path in $RepositoryName"
}
else {
$description = "Getting all content for in $RepositoryName"
}

$params = @{
'UriFragment' = $uriFragment
'Description' = $description
'AcceptHeader' = (Get-ContentMediaType -MediaType $MediaType)
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
}

$result = Invoke-GHRestMethodMultipleResult @params

return $result
}
31 changes: 31 additions & 0 deletions GitHubCore.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -973,3 +973,34 @@ function Get-MediaAcceptHeader

return ($acceptHeaders -join ',')
}

function Get-ContentMediaType
{
<#
.DESCRIPTION
Returns a formatted AcceptHeader based on the requested MediaType for working with GitHub Content,

The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub

.PARAMETER MediaType
The format in which the API will return the body of the comment or issue.

Raw - Return the raw contents of a file. This is the default if you do not pass any specific media type.
Html - For markup files such as Markdown or AsciiDoc, you can retrieve the rendered HTML using the Html media type.

.PARAMETER AcceptHeader
The accept header that should be included with the MediaType accept header.

.EXAMPLE
Get-ContentMediaType -MediaType Raw

Returns a formatted AcceptHeader for v3 of the response object
#>
[CmdletBinding()]
param(
[ValidateSet('Raw', 'Html')]
[string] $MediaType = 'Raw'
)

return "application/vnd.github.$mediaTypeVersion.$($MediaType.ToLower())"
}
4 changes: 3 additions & 1 deletion PowerShellForGitHub.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
'GitHubBranches.ps1',
'GitHubCore.ps1',
'GitHubComments.ps1',
'GitHubContents.ps1',
'GitHubEvents.ps1',
'GitHubIssues.ps1',
'GitHubLabels.ps1',
Expand Down Expand Up @@ -53,8 +54,9 @@
'Get-GitHubAssignee',
'Get-GitHubCloneTraffic',
'Get-GitHubCodeOfConduct',
'Get-GitHubComment',
'Get-GitHubComment',
'Get-GitHubConfiguration',
'Get-GitHubContent',
'Get-GitHubEmoji',
'Get-GitHubEvent',
'Get-GitHubGitIgnore',
Expand Down