git_helper 3.3.1 → 3.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +32 -9
- data/Guardfile +3 -1
- data/README.md +4 -4
- data/Rakefile +2 -0
- data/bin/git-helper +18 -13
- data/lib/git_helper.rb +6 -2
- data/lib/git_helper/change_remote.rb +15 -6
- data/lib/git_helper/checkout_default.rb +2 -0
- data/lib/git_helper/clean_branches.rb +2 -0
- data/lib/git_helper/code_request.rb +33 -19
- data/lib/git_helper/empty_commit.rb +2 -0
- data/lib/git_helper/forget_local_commits.rb +2 -0
- data/lib/git_helper/git_config_reader.rb +3 -5
- data/lib/git_helper/gitlab_client.rb +2 -0
- data/lib/git_helper/local_code.rb +18 -8
- data/lib/git_helper/merge_request.rb +90 -70
- data/lib/git_helper/new_branch.rb +3 -1
- data/lib/git_helper/octokit_client.rb +2 -0
- data/lib/git_helper/pull_request.rb +97 -66
- data/lib/git_helper/setup.rb +52 -32
- data/lib/git_helper/version.rb +3 -1
- data/spec/git_helper/change_remote_spec.rb +24 -24
- data/spec/git_helper/checkout_default_spec.rb +2 -0
- data/spec/git_helper/clean_branches_spec.rb +2 -0
- data/spec/git_helper/code_request_spec.rb +30 -28
- data/spec/git_helper/empty_commit_spec.rb +2 -0
- data/spec/git_helper/forget_local_commits_spec.rb +2 -0
- data/spec/git_helper/git_config_reader_spec.rb +4 -2
- data/spec/git_helper/gitlab_client_spec.rb +2 -0
- data/spec/git_helper/local_code_spec.rb +2 -0
- data/spec/git_helper/merge_request_spec.rb +24 -23
- data/spec/git_helper/new_branch_spec.rb +10 -8
- data/spec/git_helper/octokit_client_spec.rb +2 -0
- data/spec/git_helper/pull_request_spec.rb +20 -18
- data/spec/git_helper/setup_spec.rb +34 -26
- data/spec/spec_helper.rb +4 -1
- metadata +34 -9
- data/lib/git_helper/highline_cli.rb +0 -33
- data/spec/git_helper/highline_cli_spec.rb +0 -51
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitHelper
|
2
4
|
class GitConfigReader
|
3
5
|
def gitlab_token
|
@@ -17,15 +19,11 @@ module GitHelper
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def git_config_file_path
|
20
|
-
Dir.pwd.scan(/\
|
22
|
+
"#{Dir.pwd.scan(%r{\A/\w*/\w*/}).first}.git_helper/config.yml"
|
21
23
|
end
|
22
24
|
|
23
25
|
private def config_file
|
24
26
|
YAML.load_file(git_config_file_path)
|
25
27
|
end
|
26
|
-
|
27
|
-
private def git_config_file
|
28
|
-
'.git_helper/config.yml'
|
29
|
-
end
|
30
28
|
end
|
31
29
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitHelper
|
2
4
|
class LocalCode
|
3
5
|
def checkout_default
|
@@ -44,20 +46,20 @@ module GitHelper
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def https_remote?(remote)
|
47
|
-
remote.scan(
|
49
|
+
remote.scan(%r{(https://)}).any?
|
48
50
|
end
|
49
51
|
|
50
52
|
def remote_project(remote)
|
51
53
|
if https_remote?(remote)
|
52
|
-
remote.scan(
|
54
|
+
remote.scan(%r{https://\S+/(\S*).git}).first.first
|
53
55
|
elsif ssh_remote?(remote)
|
54
|
-
remote.scan(
|
56
|
+
remote.scan(%r{/(\S*).git}).first.first
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
60
|
def remote_source(remote)
|
59
61
|
if https_remote?(remote)
|
60
|
-
remote.scan(
|
62
|
+
remote.scan(%r{https://([a-zA-z.]+)/}).first.first
|
61
63
|
elsif ssh_remote?(remote)
|
62
64
|
remote.scan(/git@([a-zA-z.]+):/).first.first
|
63
65
|
end
|
@@ -73,18 +75,20 @@ module GitHelper
|
|
73
75
|
|
74
76
|
def project_name
|
75
77
|
# Get the repo/project name by looking in the remote URLs for the full name
|
76
|
-
`git remote -v`.scan(/\S
|
78
|
+
`git remote -v`.scan(/\S\s*\S+.com\S{1}(\S*).git/).first.first
|
77
79
|
end
|
78
80
|
|
79
81
|
def branch
|
80
82
|
# Get the current branch by looking in the list of branches for the *
|
81
|
-
`git branch`.scan(/\*\s(
|
83
|
+
`git branch`.scan(/\*\s(\S*)/).first.first
|
82
84
|
end
|
83
85
|
|
84
86
|
def default_branch
|
85
87
|
`git symbolic-ref refs/remotes/origin/HEAD | sed "s@^refs/remotes/origin/@@" | tr -d "\n"`
|
86
88
|
end
|
87
89
|
|
90
|
+
# rubocop:disable Metrics/AbcSize
|
91
|
+
# rubocop:disable Metrics/MethodLength
|
88
92
|
def template_options(identifiers)
|
89
93
|
nested_templates = Dir.glob(
|
90
94
|
File.join("#{identifiers[:template_directory]}/#{identifiers[:nested_directory_name]}", '*.md'),
|
@@ -100,11 +104,15 @@ module GitHelper
|
|
100
104
|
)
|
101
105
|
nested_templates.concat(non_nested_templates).concat(root_templates).uniq
|
102
106
|
end
|
107
|
+
# rubocop:enable Metrics/MethodLength
|
108
|
+
# rubocop:enable Metrics/AbcSize
|
103
109
|
|
104
110
|
def read_template(file_name)
|
105
111
|
File.open(file_name).read
|
106
112
|
end
|
107
113
|
|
114
|
+
# rubocop:disable Metrics/AbcSize
|
115
|
+
# rubocop:disable Metrics/MethodLength
|
108
116
|
def generate_title(local_branch)
|
109
117
|
branch_arr = local_branch.split(local_branch.include?('_') ? '_' : '-')
|
110
118
|
|
@@ -112,11 +120,11 @@ module GitHelper
|
|
112
120
|
|
113
121
|
if branch_arr.length == 1
|
114
122
|
branch_arr.first.capitalize
|
115
|
-
elsif branch_arr[0].scan(/(
|
123
|
+
elsif branch_arr[0].scan(/(\w+)/).any? && branch_arr[1].scan(/(\d+)/).any? # branch includes jira_123 at beginning
|
116
124
|
issue = "#{branch_arr[0].upcase}-#{branch_arr[1]}"
|
117
125
|
description = branch_arr[2..-1].join(' ')
|
118
126
|
"#{issue} #{description.capitalize}"
|
119
|
-
elsif branch_arr[0].scan(/(
|
127
|
+
elsif branch_arr[0].scan(/(\w+-\d+)/).any? # branch includes string jira-123 at beginning
|
120
128
|
issue = branch_arr[0].upcase
|
121
129
|
description = branch_arr[1..-1].join(' ')
|
122
130
|
"#{issue} #{description.capitalize}"
|
@@ -124,5 +132,7 @@ module GitHelper
|
|
124
132
|
branch_arr[0..-1].join(' ').capitalize
|
125
133
|
end
|
126
134
|
end
|
135
|
+
# rubocop:enable Metrics/MethodLength
|
136
|
+
# rubocop:enable Metrics/AbcSize
|
127
137
|
end
|
128
138
|
end
|
@@ -1,78 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitHelper
|
2
4
|
class GitLabMergeRequest
|
3
|
-
attr_accessor :local_project, :local_branch, :local_code, :
|
5
|
+
attr_accessor :local_project, :local_branch, :local_code, :highline, :base_branch, :new_mr_title
|
4
6
|
|
5
7
|
def initialize(options)
|
6
8
|
@local_project = options[:local_project]
|
7
9
|
@local_branch = options[:local_branch]
|
8
10
|
@local_code = options[:local_code]
|
9
|
-
@
|
11
|
+
@highline = options[:highline]
|
10
12
|
end
|
11
13
|
|
14
|
+
# rubocop:disable Metrics/MethodLength
|
15
|
+
# rubocop:disable Metrics/AbcSize
|
12
16
|
def create(options)
|
13
17
|
@base_branch = options[:base_branch]
|
14
18
|
@new_mr_title = options[:new_title]
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
puts "Merge request successfully created: #{mr.web_url}"
|
32
|
-
end
|
33
|
-
rescue Gitlab::Error::Conflict => e
|
34
|
-
puts 'Could not create merge request:'
|
35
|
-
puts ' A merge request already exists for this branch'
|
36
|
-
rescue Exception => e
|
37
|
-
puts 'Could not create merge request:'
|
38
|
-
puts e.message
|
20
|
+
options = {
|
21
|
+
source_branch: local_branch,
|
22
|
+
target_branch: base_branch,
|
23
|
+
squash: squash_merge_request,
|
24
|
+
remove_source_branch: remove_source_branch,
|
25
|
+
description: new_mr_body
|
26
|
+
}
|
27
|
+
|
28
|
+
puts "Creating merge request: #{new_mr_title}"
|
29
|
+
mr = gitlab_client.create_merge_request(local_project, new_mr_title, options)
|
30
|
+
|
31
|
+
if mr.diff_refs.base_sha == mr.diff_refs.head_sha
|
32
|
+
puts "Merge request was created, but no commits have been pushed to GitLab: #{mr.web_url}"
|
33
|
+
else
|
34
|
+
puts "Merge request successfully created: #{mr.web_url}"
|
39
35
|
end
|
36
|
+
rescue Gitlab::Error::Conflict
|
37
|
+
puts 'Could not create merge request:'
|
38
|
+
puts ' A merge request already exists for this branch'
|
39
|
+
rescue StandardError => e
|
40
|
+
puts 'Could not create merge request:'
|
41
|
+
puts e.message
|
40
42
|
end
|
43
|
+
# rubocop:enable Metrics/AbcSize
|
44
|
+
# rubocop:enable Metrics/MethodLength
|
41
45
|
|
46
|
+
# rubocop:disable Metrics/MethodLength
|
47
|
+
# rubocop:disable Metrics/AbcSize
|
42
48
|
def merge
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
mr_id
|
50
|
+
options = {
|
51
|
+
should_remove_source_branch: existing_mr.should_remove_source_branch || existing_mr.force_remove_source_branch,
|
52
|
+
squash: existing_mr.squash,
|
53
|
+
squash_commit_message: existing_mr.title
|
54
|
+
}
|
55
|
+
|
56
|
+
puts "Merging merge request: #{mr_id}"
|
57
|
+
merge = gitlab_client.accept_merge_request(local_project, mr_id, options)
|
58
|
+
|
59
|
+
if merge.merge_commit_sha.nil?
|
60
|
+
options[:squash] = true
|
52
61
|
merge = gitlab_client.accept_merge_request(local_project, mr_id, options)
|
62
|
+
end
|
53
63
|
|
54
|
-
|
55
|
-
options[:squash] = true
|
56
|
-
merge = gitlab_client.accept_merge_request(local_project, mr_id, options)
|
57
|
-
end
|
58
|
-
|
59
|
-
if merge.merge_commit_sha.nil?
|
60
|
-
puts 'Could not merge merge request:'
|
61
|
-
puts " #{merge.merge_error}"
|
62
|
-
else
|
63
|
-
puts "Merge request successfully merged: #{merge.merge_commit_sha}"
|
64
|
-
end
|
65
|
-
rescue Gitlab::Error::MethodNotAllowed => e
|
66
|
-
puts 'Could not merge merge request:'
|
67
|
-
puts ' The merge request is not mergeable'
|
68
|
-
rescue Gitlab::Error::NotFound => e
|
64
|
+
if merge.merge_commit_sha.nil?
|
69
65
|
puts 'Could not merge merge request:'
|
70
|
-
puts "
|
71
|
-
|
72
|
-
puts
|
73
|
-
puts e.message
|
66
|
+
puts " #{merge.merge_error}"
|
67
|
+
else
|
68
|
+
puts "Merge request successfully merged: #{merge.merge_commit_sha}"
|
74
69
|
end
|
70
|
+
rescue Gitlab::Error::MethodNotAllowed
|
71
|
+
puts 'Could not merge merge request:'
|
72
|
+
puts ' The merge request is not mergeable'
|
73
|
+
rescue Gitlab::Error::NotFound
|
74
|
+
puts 'Could not merge merge request:'
|
75
|
+
puts " Could not a locate a merge request to merge with ID #{mr_id}"
|
76
|
+
rescue StandardError => e
|
77
|
+
puts 'Could not merge merge request:'
|
78
|
+
puts e.message
|
75
79
|
end
|
80
|
+
# rubocop:enable Metrics/AbcSize
|
81
|
+
# rubocop:enable Metrics/MethodLength
|
76
82
|
|
77
83
|
private def new_mr_body
|
78
84
|
@new_mr_body ||= template_name_to_apply ? local_code.read_template(template_name_to_apply) : ''
|
@@ -80,39 +86,53 @@ module GitHelper
|
|
80
86
|
|
81
87
|
private def template_name_to_apply
|
82
88
|
return @template_name_to_apply if @template_name_to_apply
|
89
|
+
|
83
90
|
@template_name_to_apply = nil
|
84
91
|
|
85
|
-
unless mr_template_options.empty?
|
86
|
-
if mr_template_options.count == 1
|
87
|
-
apply_single_template = cli.ask_yes_no("Apply the merge request template from #{mr_template_options.first}? (y/n)")
|
88
|
-
@template_name_to_apply = mr_template_options.first if apply_single_template
|
89
|
-
else
|
90
|
-
response = cli.ask_options("Which merge request template should be applied?", mr_template_options << 'None')
|
91
|
-
@template_name_to_apply = response unless response == 'None'
|
92
|
-
end
|
93
|
-
end
|
92
|
+
determine_template unless mr_template_options.empty?
|
94
93
|
|
95
94
|
@template_name_to_apply
|
96
95
|
end
|
97
96
|
|
97
|
+
# rubocop:disable Metrics/MethodLength
|
98
|
+
private def determine_template
|
99
|
+
if mr_template_options.count == 1
|
100
|
+
apply_single_template = highline.ask_yes_no(
|
101
|
+
"Apply the merge request template from #{mr_template_options.first}? (y/n)"
|
102
|
+
)
|
103
|
+
@template_name_to_apply = mr_template_options.first if apply_single_template
|
104
|
+
else
|
105
|
+
response = highline.ask_options(
|
106
|
+
'Which merge request template should be applied?', mr_template_options << 'None'
|
107
|
+
)
|
108
|
+
@template_name_to_apply = response unless response == 'None'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
# rubocop:enable Metrics/MethodLength
|
112
|
+
|
98
113
|
private def mr_template_options
|
99
|
-
@mr_template_options ||= local_code.template_options(
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
114
|
+
@mr_template_options ||= local_code.template_options(
|
115
|
+
{
|
116
|
+
template_directory: '.gitlab',
|
117
|
+
nested_directory_name: 'merge_request_templates',
|
118
|
+
non_nested_file_name: 'merge_request_template'
|
119
|
+
}
|
120
|
+
)
|
104
121
|
end
|
105
122
|
|
106
123
|
private def mr_id
|
107
|
-
@mr_id ||=
|
124
|
+
@mr_id ||= highline.ask('Merge Request ID?')
|
108
125
|
end
|
109
126
|
|
110
127
|
private def squash_merge_request
|
111
|
-
@squash_merge_request ||=
|
128
|
+
@squash_merge_request ||= highline.ask_yes_no('Squash merge request? (y/n)')
|
112
129
|
end
|
113
130
|
|
114
131
|
private def remove_source_branch
|
115
|
-
@remove_source_branch ||=
|
132
|
+
@remove_source_branch ||=
|
133
|
+
existing_project.remove_source_branch_after_merge || highline.ask_yes_no(
|
134
|
+
'Remove source branch after merging? (y/n)'
|
135
|
+
)
|
116
136
|
end
|
117
137
|
|
118
138
|
private def existing_project
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitHelper
|
2
4
|
class NewBranch
|
3
5
|
def execute(new_branch_name = nil)
|
4
|
-
branch_name = new_branch_name ||
|
6
|
+
branch_name = new_branch_name || HighlineWrapper.new.ask('New branch name?', { required: true })
|
5
7
|
puts "Attempting to create a new branch: #{branch_name}"
|
6
8
|
GitHelper::LocalCode.new.new_branch(branch_name)
|
7
9
|
end
|
@@ -1,75 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GitHelper
|
2
4
|
class GitHubPullRequest
|
3
|
-
attr_accessor :local_repo, :local_branch, :local_code, :
|
5
|
+
attr_accessor :local_repo, :local_branch, :local_code, :highline, :base_branch, :new_pr_title
|
4
6
|
|
5
7
|
def initialize(options)
|
6
8
|
@local_repo = options[:local_project]
|
7
9
|
@local_branch = options[:local_branch]
|
8
10
|
@local_code = options[:local_code]
|
9
|
-
@
|
11
|
+
@highline = options[:highline]
|
10
12
|
end
|
11
13
|
|
14
|
+
# rubocop:disable Metrics/MethodLength
|
15
|
+
# rubocop:disable Metrics/AbcSize
|
12
16
|
def create(options)
|
13
17
|
@base_branch = options[:base_branch]
|
14
18
|
@new_pr_title = options[:new_title]
|
15
19
|
|
16
|
-
|
17
|
-
new_pr_body
|
20
|
+
new_pr_body
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
22
|
+
puts "Creating pull request: #{new_pr_title}"
|
23
|
+
pr = octokit_client.create_pull_request(
|
24
|
+
local_repo,
|
25
|
+
base_branch,
|
26
|
+
local_branch,
|
27
|
+
new_pr_title,
|
28
|
+
new_pr_body
|
29
|
+
)
|
30
|
+
puts "Pull request successfully created: #{pr.html_url}"
|
31
|
+
rescue Octokit::UnprocessableEntity => e
|
32
|
+
puts 'Could not create pull request:'
|
33
|
+
if e.message.include?('pull request already exists')
|
34
|
+
puts ' A pull request already exists for this branch'
|
35
|
+
elsif e.message.include?('No commits between')
|
36
|
+
puts ' No commits have been pushed to GitHub'
|
37
|
+
else
|
33
38
|
puts e.message
|
34
39
|
end
|
40
|
+
rescue StandardError => e
|
41
|
+
puts 'Could not create pull request:'
|
42
|
+
puts e.message
|
35
43
|
end
|
44
|
+
# rubocop:enable Metrics/AbcSize
|
45
|
+
# rubocop:enable Metrics/MethodLength
|
36
46
|
|
47
|
+
# rubocop:disable Metrics/MethodLength
|
48
|
+
# rubocop:disable Metrics/AbcSize
|
37
49
|
def merge
|
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
|
-
end
|
68
|
-
rescue Exception => e
|
69
|
-
puts 'Could not merge pull request:'
|
50
|
+
pr_id
|
51
|
+
merge_method
|
52
|
+
|
53
|
+
puts "Merging pull request: #{pr_id}"
|
54
|
+
merge = octokit_client.merge_pull_request(
|
55
|
+
local_repo,
|
56
|
+
pr_id,
|
57
|
+
existing_pr.title,
|
58
|
+
{ merge_method: merge_method }
|
59
|
+
)
|
60
|
+
puts "Pull request successfully merged: #{merge.sha}"
|
61
|
+
rescue Octokit::NotFound
|
62
|
+
puts 'Could not merge pull request:'
|
63
|
+
puts " Could not a locate a pull request to merge with ID #{pr_id}"
|
64
|
+
rescue Octokit::MethodNotAllowed => e
|
65
|
+
puts 'Could not merge pull request:'
|
66
|
+
if e.message.include?('405 - Required status check')
|
67
|
+
puts ' A required status check has not passed'
|
68
|
+
elsif e.message.include?('405 - Base branch was modified')
|
69
|
+
puts ' The base branch has been modified'
|
70
|
+
elsif e.message.include?('405 - Pull Request is not mergeable')
|
71
|
+
puts ' The pull request is not mergeable'
|
72
|
+
elsif e.message.include?('405 - Rebase merges are not allowed on this repository')
|
73
|
+
puts ' Rebase merges are not allowed on this repository'
|
74
|
+
elsif e.message.include?('405 - Merge commits are not allowed on this repository')
|
75
|
+
puts ' Merge commits are not allowed on this repository'
|
76
|
+
elsif e.message.include?('405 - Squash commits are not allowed on this repository')
|
77
|
+
puts ' Squash merges are not allowed on this repository'
|
78
|
+
else
|
70
79
|
puts e.message
|
71
80
|
end
|
81
|
+
rescue StandardError => e
|
82
|
+
puts 'Could not merge pull request:'
|
83
|
+
puts e.message
|
72
84
|
end
|
85
|
+
# rubocop:enable Metrics/AbcSize
|
86
|
+
# rubocop:enable Metrics/MethodLength
|
73
87
|
|
74
88
|
private def new_pr_body
|
75
89
|
@new_pr_body ||= template_name_to_apply ? local_code.read_template(template_name_to_apply) : ''
|
@@ -77,39 +91,56 @@ module GitHelper
|
|
77
91
|
|
78
92
|
private def template_name_to_apply
|
79
93
|
return @template_name_to_apply if @template_name_to_apply
|
94
|
+
|
80
95
|
@template_name_to_apply = nil
|
81
96
|
|
82
|
-
unless pr_template_options.empty?
|
83
|
-
if pr_template_options.count == 1
|
84
|
-
apply_single_template = cli.ask_yes_no("Apply the pull request template from #{pr_template_options.first}? (y/n)")
|
85
|
-
@template_name_to_apply = pr_template_options.first if apply_single_template
|
86
|
-
else
|
87
|
-
response = cli.ask_options("Which pull request template should be applied?", pr_template_options << 'None')
|
88
|
-
@template_name_to_apply = response unless response == 'None'
|
89
|
-
end
|
90
|
-
end
|
97
|
+
determine_template unless pr_template_options.empty?
|
91
98
|
|
92
99
|
@template_name_to_apply
|
93
100
|
end
|
94
101
|
|
102
|
+
# rubocop:disable Metrics/MethodLength
|
103
|
+
private def determine_template
|
104
|
+
if pr_template_options.count == 1
|
105
|
+
apply_single_template = highline.ask_yes_no(
|
106
|
+
"Apply the pull request template from #{pr_template_options.first}? (y/n)"
|
107
|
+
)
|
108
|
+
@template_name_to_apply = pr_template_options.first if apply_single_template
|
109
|
+
else
|
110
|
+
response = highline.ask_options(
|
111
|
+
'Which pull request template should be applied?', pr_template_options << 'None'
|
112
|
+
)
|
113
|
+
@template_name_to_apply = response unless response == 'None'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
# rubocop:enable Metrics/MethodLength
|
117
|
+
|
95
118
|
private def pr_template_options
|
96
|
-
@pr_template_options ||= local_code.template_options(
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
119
|
+
@pr_template_options ||= local_code.template_options(
|
120
|
+
{
|
121
|
+
template_directory: '.github',
|
122
|
+
nested_directory_name: 'PULL_REQUEST_TEMPLATE',
|
123
|
+
non_nested_file_name: 'pull_request_template'
|
124
|
+
}
|
125
|
+
)
|
101
126
|
end
|
102
127
|
|
103
128
|
private def pr_id
|
104
|
-
@pr_id ||=
|
129
|
+
@pr_id ||= highline.ask('Pull Request ID?')
|
105
130
|
end
|
106
131
|
|
107
132
|
private def merge_method
|
108
|
-
@merge_method ||=
|
133
|
+
@merge_method ||=
|
134
|
+
if merge_options.length == 1
|
135
|
+
merge_options.first
|
136
|
+
else
|
137
|
+
highline.ask_options('Merge method?', merge_options)
|
138
|
+
end
|
109
139
|
end
|
110
140
|
|
111
141
|
private def merge_options
|
112
142
|
return @merge_options if @merge_options
|
143
|
+
|
113
144
|
merge_options = []
|
114
145
|
merge_options << 'merge' if existing_project.allow_merge_commit
|
115
146
|
merge_options << 'squash' if existing_project.allow_squash_merge
|