-
Notifications
You must be signed in to change notification settings - Fork 185
Expand file tree
/
Copy pathGitHubRepositoryMerge.ps1
More file actions
131 lines (102 loc) · 4.36 KB
/
GitHubRepositoryMerge.ps1
File metadata and controls
131 lines (102 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
function Merge-GitHubRepositoryBranch
{
<#
.SYNOPSIS
Merge the specified branch into another branch
.DESCRIPTION
Merge the specified branch into another branch
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 State
The state of the pull requests that should be returned back.
.PARAMETER Base
The name of the base branch that the head will be merged into.
.PARAMETER Head
The head to merge. This can be a branch name or a commit SHA1.
.PARAMETER CommitMessage
Commit message to use for the merge commit. If omitted, a default message will be used.
.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
.EXAMPLE
Merge-GitHubRepositoryBranch -OwnerName PowerShell -RepositoryName PowerShellForGitHub -Base 'master' -Head 'new_feature' -CommitMessage 'Merging branch new_feature into master'
#>
[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,
[Parameter(Mandatory)]
[string] $Base,
[Parameter(Mandatory)]
[string] $Head,
[string] $CommitMessage,
[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)
}
$hashBody = @{
'base'= $Base
'head' = $Head
}
if(-not $CommitMessage -eq $null)
{
$hashBody['commit_message'] = $CommitMessage
}
$params = @{
'UriFragment' = "repos/$OwnerName/$RepositoryName/merges"
'Body' = (ConvertTo-Json -InputObject $hashBody)
'Method' = 'Post'
'Description' = "Merging branch $Head to $Base in $RepositoryName"
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
}
try {
$result = Invoke-GHRestMethod @params -ExtendedResult
if ($result.statusCode -eq 204)
{
Write-Log -Message "Nothing to merge. The branch $Base already contains changes from $Head" -Level Warning
}
return $result.result
}
catch {
#TODO: Read the error message and find out the kind of issue
Write-Error $_.Exception
Write-Log -Message "Unable to merge. Either the branch $Base or branch $Head does not exist or there is a conflict" -Level Warning
}
}