geet 0.18.0 → 0.21.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1de41cf090832ac128f258dd82f5545c68bae2517942822aa26fd827d457693
4
- data.tar.gz: 7a5d9217809a4e014629eef8a4e2466870849e727012b66e8d925777ab91ac72
3
+ metadata.gz: 553ba26732cdeab337b64fd735017cbb2e3746e2cfe9558fd6cbcac2ed1e56ae
4
+ data.tar.gz: 2c3d92f60356d1b5664990cdc15b3ea8782c33e5e48d5c22b6938ebee10a8d71
5
5
  SHA512:
6
- metadata.gz: 06bfe2fc70359f98cfc6c9fcf4f1bab9be4c00991791902f67a4a1825d62f92a75d20d558951be3f65be6b52238417954e22276e32e77ec09518acdf652b16ca
7
- data.tar.gz: 3e16adb89ecbcfea3197d26359cf64bbb83585c0f5bd0889325330d6422c1fe15c460faf0795c86a47b2c254026fe9b08eb7c35ce62832814c7418f8ceb29ff3
6
+ metadata.gz: c3d20437f87b87cc0e3787383e3fdb1739a5447e9743dc11d790eb76b7241c5802333c37724a428882826c4446b7dc701dc3f4698ca968cf0f4836b994d22921
7
+ data.tar.gz: 6cee56626453e242679c187a61087322f904427529262fcaf66b2b679a2391430a962809e5809b7a46c4e29075221e1a9a388edc46bf2ba8bd9334d4aeb7b475
data/Gemfile CHANGED
@@ -15,7 +15,7 @@ group :development do
15
15
  end
16
16
 
17
17
  group :test do
18
- gem 'rspec', '~> 3.7.0'
18
+ gem 'rspec', '~> 3.13.0'
19
19
  gem 'vcr', '~> 6.1.0'
20
20
  gem 'webmock', '~> 3.1.1'
21
21
  end
data/bin/geet CHANGED
@@ -65,7 +65,7 @@ class GeetLauncher
65
65
 
66
66
  Services::CommentPr.new(repository).execute(comment, **options)
67
67
  when PR_CREATE_COMMAND
68
- summary = options[:summary] || edit_pr_summary(base: options[:base])
68
+ summary = options[:summary] || edit_pr_summary(**options.slice(:base))
69
69
  title, description = split_summary(summary)
70
70
 
71
71
  options = default_to_manual_selection(options, :labels, :milestone, :reviewers)
@@ -90,11 +90,11 @@ class GeetLauncher
90
90
 
91
91
  private
92
92
 
93
- def edit_pr_summary(base: nil)
93
+ def edit_pr_summary(base: :main_branch)
94
94
  # Tricky. It would be best to have Git logic exlusively inside the services,
95
95
  # but at the same time, the summary editing should be out.
96
96
  git = Utils::GitClient.new
97
- pr_commits = git.cherry(base: base)
97
+ pr_commits = git.cherry(base)
98
98
 
99
99
  cancel_pr_help = "In order to cancel the PR creation, delete the description above.\n"
100
100
 
data/geet.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.required_ruby_version = '>= 2.7.0'
12
12
  s.authors = ['Saverio Miroddi']
13
- s.date = '2023-04-20'
13
+ s.date = '2024-08-23'
14
14
  s.email = ['saverio.pub2@gmail.com']
15
15
  s.homepage = 'https://github.com/saveriomiroddi/geet'
16
16
  s.summary = 'Commandline interface for performing SCM host operations, eg. create a PR on GitHub'
@@ -93,6 +93,7 @@ module Geet
93
93
  # rubocop:disable Style/MutableConstant
94
94
  PR_MERGE_OPTIONS = [
95
95
  ['-d', '--delete-branch', 'Delete the branch after merging'],
96
+ ['-s', '--squash', 'Squash merge'],
96
97
  ['-u', '--upstream', 'List on the upstream repository'],
97
98
  long_help: 'Merge the PR for the current branch'
98
99
  ]
@@ -72,10 +72,11 @@ module Geet
72
72
 
73
73
  # See https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
74
74
  #
75
- def merge
75
+ def merge(merge_method: nil)
76
76
  api_path = "pulls/#{number}/merge"
77
+ request_data = { merge_method: } if merge_method
77
78
 
78
- @api_interface.send_request(api_path, http_method: :put)
79
+ @api_interface.send_request(api_path, http_method: :put, data: request_data)
79
80
  end
80
81
 
81
82
  def request_review(reviewers)
@@ -22,12 +22,18 @@ module Geet
22
22
  @git_client = git_client
23
23
  end
24
24
 
25
- def execute(delete_branch: false, **)
25
+ def execute(delete_branch: false, squash: false, **)
26
+ merge_method = 'squash' if squash
27
+
28
+ @git_client.fetch
29
+
26
30
  @git_client.push
27
31
 
32
+ check_no_missing_upstream_commits
33
+
28
34
  pr = checked_find_branch_pr
29
35
 
30
- merge_pr(pr)
36
+ merge_pr(pr, merge_method:)
31
37
 
32
38
  if delete_branch
33
39
  branch = @git_client.current_branch
@@ -47,7 +53,10 @@ module Geet
47
53
  checkout_branch(main_branch)
48
54
  rebase
49
55
 
50
- delete_local_branch(pr_branch)
56
+ # When squashing, we need to force delete, since Git doesn't recognize that the branch has
57
+ # been merged.
58
+ #
59
+ delete_local_branch(pr_branch, force: squash)
51
60
  end
52
61
 
53
62
  pr
@@ -55,10 +64,16 @@ module Geet
55
64
 
56
65
  private
57
66
 
58
- def merge_pr(pr)
67
+ def check_no_missing_upstream_commits
68
+ missing_upstream_commits = @git_client.cherry('HEAD', head: :main_branch)
69
+
70
+ raise "Found #{missing_upstream_commits.size} missing upstream commits!" if missing_upstream_commits.any?
71
+ end
72
+
73
+ def merge_pr(pr, merge_method: nil)
59
74
  @out.puts "Merging PR ##{pr.number}..."
60
75
 
61
- pr.merge
76
+ pr.merge(merge_method:)
62
77
  end
63
78
 
64
79
  def delete_remote_branch(branch)
@@ -85,10 +100,10 @@ module Geet
85
100
  @git_client.rebase
86
101
  end
87
102
 
88
- def delete_local_branch(branch)
103
+ def delete_local_branch(branch, force:)
89
104
  @out.puts "Deleting local branch #{branch}..."
90
105
 
91
- @git_client.delete_branch(branch)
106
+ @git_client.delete_branch(branch, force:)
92
107
  end
93
108
  end
94
109
  end
@@ -48,13 +48,19 @@ module Geet
48
48
  # BRANCH/TREE APIS
49
49
  ##########################################################################
50
50
 
51
- # Return the commit SHAs between HEAD and `base`, excluding the already applied commits
51
+ # Return the commit SHAs between :head and :upstream, excluding the already applied commits
52
52
  # (which start with `-`)
53
53
  #
54
- def cherry(base: nil)
55
- base ||= main_branch
54
+ # - upstream: String; pass :main_branch to use the main branch
55
+ # - head: String (optional); pass :main_branch to use the main branch
56
+ #
57
+ def cherry(upstream, head: nil)
58
+ upstream = main_branch if upstream == :main_branch
59
+ head = main_branch if head == :main_branch
60
+
61
+ git_params = [upstream, head].compact.map(&:shellescape)
56
62
 
57
- raw_commits = execute_git_command("cherry #{base.shellescape}")
63
+ raw_commits = execute_git_command("cherry #{git_params.join(' ')}")
58
64
 
59
65
  raw_commits.split("\n").grep(/^\+/).map { |line| line[3..-1] }
60
66
  end
@@ -226,10 +232,10 @@ module Geet
226
232
  execute_git_command("checkout #{branch.shellescape}")
227
233
  end
228
234
 
229
- # Unforced deletion.
230
- #
231
- def delete_branch(branch)
232
- execute_git_command("branch --delete #{branch.shellescape}")
235
+ def delete_branch(branch, force:)
236
+ force_option = "--force" if force
237
+
238
+ execute_git_command("branch --delete #{force_option} #{branch.shellescape}")
233
239
  end
234
240
 
235
241
  def rebase
data/lib/geet/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Geet
4
- VERSION = '0.18.0'
4
+ VERSION = '0.21.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saverio Miroddi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-20 00:00:00.000000000 Z
11
+ date: 2024-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_scripting
@@ -175,7 +175,7 @@ homepage: https://github.com/saveriomiroddi/geet
175
175
  licenses:
176
176
  - GPL-3.0
177
177
  metadata: {}
178
- post_install_message:
178
+ post_install_message:
179
179
  rdoc_options: []
180
180
  require_paths:
181
181
  - lib
@@ -190,8 +190,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
190
  - !ruby/object:Gem::Version
191
191
  version: '0'
192
192
  requirements: []
193
- rubygems_version: 3.4.12
194
- signing_key:
193
+ rubygems_version: 3.5.9
194
+ signing_key:
195
195
  specification_version: 4
196
196
  summary: Commandline interface for performing SCM host operations, eg. create a PR
197
197
  on GitHub