git_helper 3.4.0 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f54fe4752a8c63fd35e668a15b6d0ed4c17e6646f1058de2d66056550305050
4
- data.tar.gz: 4dd91a7a425990aceb3012064bb64ad55d2501f2975d5e75668e9540722c8121
3
+ metadata.gz: e4cab8515ee7c8c8e345b477178e3352c600ff5db7bab81e8c3479c7db13bc7a
4
+ data.tar.gz: 53d031494e6e52826f7911c8f06337e82853f069e3cbfc18275d5f918886a443
5
5
  SHA512:
6
- metadata.gz: 8d618c4758a4f4f9387e58a2d5a41b85d052ae61afd8253ca2c3c718bba85791a03f85332a5ecb104ab49dee35e7a406ea3e25984301b0db4f18d8c51140c233
7
- data.tar.gz: 19ee42210fc4a308e927ef5bbf40512c73cfd5513be8d68a3b3754510b78a76701768eec2a8fd4ad9f2d48cfe168a1f817f9ab465040349068c7e7980322fba8
6
+ metadata.gz: 446213efbe6058b0ab790750b390a05dfb7b47793554667ceb20a1c2720a9140c10e2aa9368d2127b62dce538b60b19826c9a9b6380ca88ff7046194e4cf20b9
7
+ data.tar.gz: 9db27ee02e2cc0a5f343b4c0f32b022cc9cbab48e152bb03c38ce8c8360258d9ff68be8154955653fd14b5d3f0c2184ea778ce0fe820b955a3e0b16f00bb78ca
data/Gemfile.lock CHANGED
@@ -1,46 +1,55 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- git_helper (3.4.0)
5
- gitlab (~> 4.16)
6
- gli (~> 2.13)
7
- highline_wrapper (~> 1.1)
8
- octokit (~> 4.18)
9
- psych (< 4)
4
+ git_helper (3.5.1)
5
+ gitlab
6
+ gli
7
+ highline_wrapper
8
+ octokit
10
9
 
11
10
  GEM
12
11
  remote: https://rubygems.org/
13
12
  specs:
14
- addressable (2.7.0)
13
+ addressable (2.8.0)
15
14
  public_suffix (>= 2.0.2, < 5.0)
16
15
  ast (2.4.2)
17
16
  coderay (1.1.3)
18
- concurrent-ruby (1.1.8)
17
+ concurrent-ruby (1.1.9)
19
18
  diff-lcs (1.4.4)
20
- faker (2.17.0)
19
+ faker (2.19.0)
21
20
  i18n (>= 1.6, < 2)
22
- faraday (1.4.1)
21
+ faraday (1.8.0)
22
+ faraday-em_http (~> 1.0)
23
+ faraday-em_synchrony (~> 1.0)
23
24
  faraday-excon (~> 1.1)
25
+ faraday-httpclient (~> 1.0.1)
24
26
  faraday-net_http (~> 1.0)
25
27
  faraday-net_http_persistent (~> 1.1)
28
+ faraday-patron (~> 1.0)
29
+ faraday-rack (~> 1.0)
26
30
  multipart-post (>= 1.2, < 3)
27
31
  ruby2_keywords (>= 0.0.4)
32
+ faraday-em_http (1.0.0)
33
+ faraday-em_synchrony (1.0.0)
28
34
  faraday-excon (1.1.0)
35
+ faraday-httpclient (1.0.1)
29
36
  faraday-net_http (1.0.1)
30
- faraday-net_http_persistent (1.1.0)
31
- ffi (1.15.0)
32
- formatador (0.2.5)
37
+ faraday-net_http_persistent (1.2.0)
38
+ faraday-patron (1.0.0)
39
+ faraday-rack (1.0.0)
40
+ ffi (1.15.4)
41
+ formatador (0.3.0)
33
42
  gitlab (4.17.0)
34
43
  httparty (~> 0.18)
35
44
  terminal-table (~> 1.5, >= 1.5.1)
36
- gli (2.20.0)
37
- guard (2.16.2)
45
+ gli (2.20.1)
46
+ guard (2.18.0)
38
47
  formatador (>= 0.2.4)
39
48
  listen (>= 2.7, < 4.0)
40
49
  lumberjack (>= 1.0.12, < 2.0)
41
50
  nenv (~> 0.1)
42
51
  notiffany (~> 0.0)
43
- pry (>= 0.9.12)
52
+ pry (>= 0.13.0)
44
53
  shellany (~> 0.0)
45
54
  thor (>= 0.18.1)
46
55
  guard-compat (1.2.1)
@@ -49,21 +58,21 @@ GEM
49
58
  guard-compat (~> 1.1)
50
59
  rspec (>= 2.99.0, < 4.0)
51
60
  highline (2.0.3)
52
- highline_wrapper (1.2.0)
61
+ highline_wrapper (1.3.0)
53
62
  highline (~> 2.0)
54
- httparty (0.18.1)
63
+ httparty (0.20.0)
55
64
  mime-types (~> 3.0)
56
65
  multi_xml (>= 0.5.2)
57
66
  i18n (1.8.10)
58
67
  concurrent-ruby (~> 1.0)
59
- listen (3.5.1)
68
+ listen (3.7.0)
60
69
  rb-fsevent (~> 0.10, >= 0.10.3)
61
70
  rb-inotify (~> 0.9, >= 0.9.10)
62
71
  lumberjack (1.2.8)
63
72
  method_source (1.0.0)
64
73
  mime-types (3.3.1)
65
74
  mime-types-data (~> 3.2015)
66
- mime-types-data (3.2021.0225)
75
+ mime-types-data (3.2021.0901)
67
76
  multi_xml (0.6.0)
68
77
  multipart-post (2.1.1)
69
78
  nenv (0.3.0)
@@ -73,17 +82,15 @@ GEM
73
82
  octokit (4.21.0)
74
83
  faraday (>= 0.9)
75
84
  sawyer (~> 0.8.0, >= 0.5.3)
76
- parallel (1.20.1)
77
- parser (3.0.1.1)
85
+ parallel (1.21.0)
86
+ parser (3.0.2.0)
78
87
  ast (~> 2.4.1)
79
88
  pry (0.14.1)
80
89
  coderay (~> 1.1)
81
90
  method_source (~> 1.0)
82
- psych (3.3.2)
83
91
  public_suffix (4.0.6)
84
92
  rainbow (3.0.0)
85
- rake (13.0.3)
86
- rb-fsevent (0.10.4)
93
+ rb-fsevent (0.11.0)
87
94
  rb-inotify (0.10.1)
88
95
  ffi (~> 1.0)
89
96
  regexp_parser (2.1.1)
@@ -101,40 +108,38 @@ GEM
101
108
  diff-lcs (>= 1.2.0, < 2.0)
102
109
  rspec-support (~> 3.10.0)
103
110
  rspec-support (3.10.2)
104
- rubocop (1.14.0)
111
+ rubocop (1.22.1)
105
112
  parallel (~> 1.10)
106
113
  parser (>= 3.0.0.0)
107
114
  rainbow (>= 2.2.2, < 4.0)
108
115
  regexp_parser (>= 1.8, < 3.0)
109
116
  rexml
110
- rubocop-ast (>= 1.5.0, < 2.0)
117
+ rubocop-ast (>= 1.12.0, < 2.0)
111
118
  ruby-progressbar (~> 1.7)
112
119
  unicode-display_width (>= 1.4.0, < 3.0)
113
- rubocop-ast (1.5.0)
120
+ rubocop-ast (1.12.0)
114
121
  parser (>= 3.0.1.1)
115
122
  ruby-progressbar (1.11.0)
116
- ruby2_keywords (0.0.4)
123
+ ruby2_keywords (0.0.5)
117
124
  sawyer (0.8.2)
118
125
  addressable (>= 2.3.5)
119
126
  faraday (> 0.8, < 2.0)
120
127
  shellany (0.0.1)
121
- terminal-table (1.8.0)
122
- unicode-display_width (~> 1.1, >= 1.1.1)
128
+ terminal-table (1.6.0)
123
129
  thor (1.1.0)
124
- unicode-display_width (1.7.0)
130
+ unicode-display_width (2.1.0)
125
131
 
126
132
  PLATFORMS
127
133
  x86_64-darwin-19
128
134
 
129
135
  DEPENDENCIES
130
- bundler (~> 2.2)
131
- faker (~> 2.15)
136
+ bundler
137
+ faker
132
138
  git_helper!
133
- guard-rspec (~> 4.3)
134
- pry (~> 0.13)
135
- rake (~> 13.0)
136
- rspec (~> 3.9)
137
- rubocop (~> 1.10)
139
+ guard-rspec
140
+ pry
141
+ rspec
142
+ rubocop
138
143
 
139
144
  BUNDLED WITH
140
- 2.2.17
145
+ 2.2.29
data/Guardfile CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  guard :rspec, cmd: 'bundle exec rspec', all_on_start: true do
4
4
  watch(%r{^spec/.+_spec\.rb$})
5
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
5
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
6
6
  watch('spec/spec_helper.rb') { 'spec' }
7
7
  end
data/LICENSE.md ADDED
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause "New" or "Revised" License
2
+
3
+ Copyright (c) 2020 Emma Sax.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions, and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions, and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Git Helper [![Main](https://github.com/emmahsax/git_helper/actions/workflows/main.yml/badge.svg)](https://github.com/emmahsax/git_helper/actions/workflows/main.yml)
1
+ # Git Helper
2
2
 
3
3
  ## Gem Usage
4
4
 
@@ -115,7 +115,7 @@ git-helper clean-branches
115
115
 
116
116
  ### `code-request`
117
117
 
118
- This command can be used to handily make new GitHub/GitLab pull/merge requests from the command-line. The command uses either the [`Octokit::Client`](https://octokit.github.io/octokit.rb/Octokit/Client.html) or [`Gitlab` client](https://github.com/NARKOZ/gitlab) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage).
118
+ This command can be used to handily make new GitHub/GitLab pull/merge requests from the command-line. The command uses either the [GitHub REST API](https://docs.github.com/en/rest) or [GitLab API](https://docs.gitlab.com/ee/api/) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage). Furthermore, this project will use [JSON](https://www.npmjs.com/package/json), [YAML](https://www.cloudbees.com/blog/yaml-tutorial-everything-you-need-get-started), and [cURL](https://developer.zendesk.com/documentation/developer-tools/getting-started/installing-and-using-curl/).
119
119
 
120
120
  After setup is complete, you can call the command like this:
121
121
 
@@ -149,7 +149,7 @@ git-helper forget-local-commits
149
149
 
150
150
  ### `merge-code-request`
151
151
 
152
- This command can be used to merge pull/merge requests from the command-line. The command uses either the [`Octokit::Client`](https://octokit.github.io/octokit.rb/Octokit/Client.html) or [`Gitlab` client](https://github.com/NARKOZ/gitlab) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage).
152
+ This command can be used to merge pull/merge requests from the command-line. The command uses either the [GitHub REST API](https://docs.github.com/en/rest) or [GitLab API](https://docs.gitlab.com/ee/api/) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage). Furthermore, this project will use [JSON](https://www.npmjs.com/package/json), [YAML](https://www.cloudbees.com/blog/yaml-tutorial-everything-you-need-get-started), and [cURL](https://developer.zendesk.com/documentation/developer-tools/getting-started/installing-and-using-curl/).
153
153
 
154
154
  After setup is complete, you can call the proper command like this:
155
155
 
@@ -176,15 +176,27 @@ git-helper new-branch NEW_BRANCH_NAME
176
176
 
177
177
  The command either accepts a branch name right away or it will ask you for the name of your new branch. Make sure your input does not contain any spaces or special characters.
178
178
 
179
- ## Contributing
179
+ ---
180
180
 
181
- To submit a feature request, bug ticket, etc, please submit an official [GitHub Issue](https://github.com/emmahsax/git_helper/issues/new).
181
+ ### Contributing
182
182
 
183
- To report any security vulnerabilities, please view this project's [Security Policy](https://github.com/emmahsax/git_helper/security/policy).
183
+ To submit a feature request, bug ticket, etc, please submit an official [GitHub issue](https://github.com/emmahsax/git_helper/issues/new). To copy or make changes, please [fork this repository](https://github.com/emmahsax/git_helper/fork). When/if you'd like to contribute back to this upstream, please create a pull request on this repository.
184
+
185
+ Please follow included Issue Template(s) and Pull Request Template(s) when creating issues or pull requests.
186
+
187
+ ### Security Policy
188
+
189
+ To report any security vulnerabilities, please view this repository's [Security Policy](https://github.com/emmahsax/git_helper/security/policy).
190
+
191
+ ### Licensing
192
+
193
+ For information on licensing, please see [LICENSE.md](https://github.com/emmahsax/git_helper/blob/main/LICENSE.md).
194
+
195
+ ### Code of Conduct
184
196
 
185
197
  When interacting with this repository, please follow [Contributor Covenant's Code of Conduct](https://contributor-covenant.org).
186
198
 
187
- ## Releasing
199
+ ### Releasing
188
200
 
189
201
  To make a new release of this gem:
190
202
 
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GitHelper
4
+ class GitHubClient
5
+ def repository(repo_name)
6
+ run(repo_name.split('/').first, nil, "/repos/#{repo_name}")
7
+ end
8
+
9
+ def pull_request(repo_name, pull_request_id)
10
+ run(repo_name.split('/').first, nil, "/repos/#{repo_name}/pulls/#{pull_request_id}")
11
+ end
12
+
13
+ def create_pull_request(repo_name, options)
14
+ opts_as_string = format_options(options)
15
+ run(
16
+ repo_name.split('/').first,
17
+ 'POST',
18
+ "/repos/#{repo_name}/pulls",
19
+ opts_as_string
20
+ )
21
+ end
22
+
23
+ def merge_pull_request(repo_name, pull_request_id, options)
24
+ opts_as_string = format_options(options)
25
+ run(
26
+ repo_name.split('/').first,
27
+ 'PUT',
28
+ "/repos/#{repo_name}/pulls/#{pull_request_id}/merge",
29
+ opts_as_string
30
+ )
31
+ end
32
+
33
+ private def format_options(options)
34
+ opts_as_string = ''.dup
35
+ options.each do |key, value|
36
+ next if value == ''
37
+
38
+ opts_as_string << "#{key.to_json}:#{value.to_json.gsub("'", "'\\\\''")},"
39
+ end
40
+ opts_as_string = opts_as_string.reverse.sub(',', '').reverse
41
+ opts_as_string.empty? ? '' : "{#{opts_as_string}}"
42
+ end
43
+
44
+ # rubocop:disable Layout/LineLength
45
+ private def run(username, request_type, curl_url, options = '')
46
+ OpenStruct.new(
47
+ JSON.parse(
48
+ if request_type
49
+ `curl -s -u #{username}:#{github_token} -H "Accept: application/vnd.github.v3+json" -X #{request_type} -d '#{options}' "#{github_endpoint}#{curl_url}"`
50
+ else
51
+ `curl -s -u #{username}:#{github_token} -H "Accept: application/vnd.github.v3+json" "#{github_endpoint}#{curl_url}"`
52
+ end
53
+ )
54
+ )
55
+ end
56
+ # rubocop:enable Layout/LineLength
57
+
58
+ private def github_token
59
+ git_config_reader.github_token
60
+ end
61
+
62
+ private def git_config_reader
63
+ @git_config_reader ||= GitHelper::GitConfigReader.new
64
+ end
65
+
66
+ private def github_endpoint
67
+ 'https://api.github.com'
68
+ end
69
+ end
70
+ end
@@ -2,8 +2,52 @@
2
2
 
3
3
  module GitHelper
4
4
  class GitLabClient
5
- def client
6
- Gitlab.client(endpoint: gitlab_endpoint, private_token: git_config_reader.gitlab_token)
5
+ def project(project_name)
6
+ run('GET', "/projects/#{url_encode(project_name)}")
7
+ end
8
+
9
+ def merge_request(project_name, merge_request_id)
10
+ run('GET', "/projects/#{url_encode(project_name)}/merge_requests/#{merge_request_id}")
11
+ end
12
+
13
+ def create_merge_request(project_name, options)
14
+ opts_as_string = format_options(options)
15
+ run('POST', "/projects/#{url_encode(project_name)}/merge_requests#{opts_as_string}")
16
+ end
17
+
18
+ def accept_merge_request(project_name, merge_request_id, options)
19
+ opts_as_string = format_options(options)
20
+ run(
21
+ 'PUT',
22
+ "/projects/#{url_encode(project_name)}/merge_requests/#{merge_request_id}/merge#{opts_as_string}"
23
+ )
24
+ end
25
+
26
+ private def format_options(options)
27
+ opts_as_string = ''.dup
28
+ options.each do |key, value|
29
+ next if value == ''
30
+
31
+ opts_as_string << "#{key}=#{url_encode(value.to_s)}&"
32
+ end
33
+ opts_as_string = opts_as_string.reverse.sub('&', '').reverse
34
+ opts_as_string.empty? ? '' : "?#{opts_as_string}"
35
+ end
36
+
37
+ private def run(request_type, curl_url)
38
+ OpenStruct.new(
39
+ JSON.parse(
40
+ `curl -s -X #{request_type} -H "PRIVATE-TOKEN: #{gitlab_token}" "#{gitlab_endpoint}#{curl_url}"`
41
+ )
42
+ )
43
+ end
44
+
45
+ private def url_encode(string)
46
+ string.b.gsub(/[^a-zA-Z0-9_\-.~]/n) { |m| format('%%%<val>02X', val: m.unpack1('C')) }
47
+ end
48
+
49
+ private def gitlab_token
50
+ git_config_reader.gitlab_token
7
51
  end
8
52
 
9
53
  private def git_config_reader
@@ -22,23 +22,28 @@ module GitHelper
22
22
  target_branch: base_branch,
23
23
  squash: squash_merge_request,
24
24
  remove_source_branch: remove_source_branch,
25
- description: new_mr_body
25
+ description: new_mr_body,
26
+ title: new_mr_title
26
27
  }
27
28
 
28
29
  puts "Creating merge request: #{new_mr_title}"
29
- mr = gitlab_client.create_merge_request(local_project, new_mr_title, options)
30
+ mr = gitlab_client.create_merge_request(local_project, options)
30
31
 
31
- if mr.diff_refs.base_sha == mr.diff_refs.head_sha
32
+ raise StandardError, mr.message if mr.diff_refs.nil? || mr.web_url.nil?
33
+
34
+ if mr.diff_refs['base_sha'] == mr.diff_refs['head_sha']
32
35
  puts "Merge request was created, but no commits have been pushed to GitLab: #{mr.web_url}"
33
36
  else
34
37
  puts "Merge request successfully created: #{mr.web_url}"
35
38
  end
36
- rescue Gitlab::Error::Conflict
37
- puts 'Could not create merge request:'
38
- puts ' A merge request already exists for this branch'
39
39
  rescue StandardError => e
40
40
  puts 'Could not create merge request:'
41
- puts e.message
41
+
42
+ if e.message.include?('Another open merge request already exists')
43
+ puts ' A merge request already exists for this branch'
44
+ else
45
+ puts " #{e.message}"
46
+ end
42
47
  end
43
48
  # rubocop:enable Metrics/AbcSize
44
49
  # rubocop:enable Metrics/MethodLength
@@ -61,21 +66,19 @@ module GitHelper
61
66
  merge = gitlab_client.accept_merge_request(local_project, mr_id, options)
62
67
  end
63
68
 
64
- if merge.merge_commit_sha.nil?
65
- puts 'Could not merge merge request:'
66
- puts " #{merge.merge_error}"
67
- else
68
- puts "Merge request successfully merged: #{merge.merge_commit_sha}"
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}"
69
+ raise StandardError, merge.message if merge.merge_commit_sha.nil?
70
+
71
+ puts "Merge request successfully merged: #{merge.merge_commit_sha}"
76
72
  rescue StandardError => e
77
73
  puts 'Could not merge merge request:'
78
- puts e.message
74
+
75
+ if e.message.include?('404 Not found')
76
+ puts ' Could not a locate a merge request to merge with given ID'
77
+ elsif e.message.include?('405 Method Not Allowed')
78
+ puts ' The merge request is not mergeable'
79
+ else
80
+ puts " #{e.message}"
81
+ end
79
82
  end
80
83
  # rubocop:enable Metrics/AbcSize
81
84
  # rubocop:enable Metrics/MethodLength
@@ -121,20 +124,21 @@ module GitHelper
121
124
  end
122
125
 
123
126
  private def mr_id
124
- @mr_id ||= highline.ask('Merge Request ID?')
127
+ @mr_id ||= highline.ask('Merge Request ID?', { required: true })
125
128
  end
126
129
 
127
130
  private def squash_merge_request
128
131
  return @squash_merge_request if @squash_merge_request
129
132
 
130
- case existing_project.squash_option
131
- when 'always', 'default_on'
132
- @squash_merge_request = true
133
- when 'never'
134
- @squash_merge_request = false
135
- else # 'default_off' or anything else
136
- @squash_merge_request = highline.ask_yes_no('Squash merge request? (y/n)')
137
- end
133
+ @squash_merge_request =
134
+ case existing_project.squash_option
135
+ when 'always', 'default_on'
136
+ true
137
+ when 'never'
138
+ false
139
+ else # 'default_off' or anything else
140
+ highline.ask_yes_no('Squash merge request? (y/n)')
141
+ end
138
142
  end
139
143
 
140
144
  private def remove_source_branch
@@ -153,7 +157,7 @@ module GitHelper
153
157
  end
154
158
 
155
159
  private def gitlab_client
156
- @gitlab_client ||= GitHelper::GitLabClient.new.client
160
+ @gitlab_client ||= GitHelper::GitLabClient.new
157
161
  end
158
162
  end
159
163
  end
@@ -17,29 +17,29 @@ module GitHelper
17
17
  @base_branch = options[:base_branch]
18
18
  @new_pr_title = options[:new_title]
19
19
 
20
- new_pr_body
20
+ options = {
21
+ head: local_branch,
22
+ base: base_branch,
23
+ body: new_pr_body,
24
+ title: new_pr_title
25
+ }
21
26
 
22
27
  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
- )
28
+ pr = github_client.create_pull_request(local_repo, options)
29
+
30
+ raise StandardError, pr.errors.first['message'] if pr.html_url.nil?
31
+
30
32
  puts "Pull request successfully created: #{pr.html_url}"
31
- rescue Octokit::UnprocessableEntity => e
33
+ rescue StandardError => e
32
34
  puts 'Could not create pull request:'
33
- if e.message.include?('pull request already exists')
35
+
36
+ if e.message.include?('A pull request already exists')
34
37
  puts ' A pull request already exists for this branch'
35
38
  elsif e.message.include?('No commits between')
36
39
  puts ' No commits have been pushed to GitHub'
37
40
  else
38
- puts e.message
41
+ puts " #{e.message}"
39
42
  end
40
- rescue StandardError => e
41
- puts 'Could not create pull request:'
42
- puts e.message
43
43
  end
44
44
  # rubocop:enable Metrics/AbcSize
45
45
  # rubocop:enable Metrics/MethodLength
@@ -48,39 +48,26 @@ module GitHelper
48
48
  # rubocop:disable Metrics/AbcSize
49
49
  def merge
50
50
  pr_id
51
- merge_method
51
+
52
+ options = {
53
+ merge_method: merge_method,
54
+ commit_title: existing_pr.title
55
+ }
52
56
 
53
57
  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
- )
58
+ merge = github_client.merge_pull_request(local_repo, pr_id, options)
59
+
60
+ raise StandardError, merge.message if merge.sha.nil?
61
+
60
62
  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
63
+ rescue StandardError => e
65
64
  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'
65
+
66
+ if e.message.include?('Not found')
67
+ puts ' Could not a locate a pull request to merge with given ID'
78
68
  else
79
- puts e.message
69
+ puts " #{e.message}"
80
70
  end
81
- rescue StandardError => e
82
- puts 'Could not merge pull request:'
83
- puts e.message
84
71
  end
85
72
  # rubocop:enable Metrics/AbcSize
86
73
  # rubocop:enable Metrics/MethodLength
@@ -126,7 +113,7 @@ module GitHelper
126
113
  end
127
114
 
128
115
  private def pr_id
129
- @pr_id ||= highline.ask('Pull Request ID?')
116
+ @pr_id ||= highline.ask('Pull Request ID?', { required: true })
130
117
  end
131
118
 
132
119
  private def merge_method
@@ -149,15 +136,15 @@ module GitHelper
149
136
  end
150
137
 
151
138
  private def existing_project
152
- @existing_project ||= octokit_client.repository(local_repo)
139
+ @existing_project ||= github_client.repository(local_repo)
153
140
  end
154
141
 
155
142
  private def existing_pr
156
- @existing_pr ||= octokit_client.pull_request(local_repo, pr_id)
143
+ @existing_pr ||= github_client.pull_request(local_repo, pr_id)
157
144
  end
158
145
 
159
- private def octokit_client
160
- @octokit_client ||= GitHelper::OctokitClient.new.client
146
+ private def github_client
147
+ @github_client ||= GitHelper::GitHubClient.new
161
148
  end
162
149
  end
163
150
  end
@@ -33,7 +33,7 @@ module GitHelper
33
33
 
34
34
  create_or_update_plugin_files
35
35
  puts "\nNow add this line to your ~/.bash_profile:\n" \
36
- ' export PATH=/path/to/computer/home/.git_helper/plugins:$PATH'
36
+ ' export PATH=/path/to/computer/home/.git_helper/plugins:$PATH'
37
37
  puts "\nDone!"
38
38
  end
39
39
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GitHelper
4
- VERSION = '3.4.0'
4
+ VERSION = '3.6.0'
5
5
  end
data/lib/git_helper.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
- require 'gitlab'
4
+ require 'json'
5
5
  require 'highline_wrapper'
6
- require 'octokit'
7
6
 
8
7
  files = "#{File.expand_path(File.join(File.dirname(File.absolute_path(__FILE__)), 'git_helper'))}/**/*.rb"
9
8