geet 0.4.1 → 0.5.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: 277ed0b36c021a28cc688fd768955c5639d0658885f60ff45f2a70c179a1e507
4
- data.tar.gz: f181e99e34416ebf216d4fb603fd213217a9d188060d38ac2e9770e02aa5befb
3
+ metadata.gz: 9eaf080841cb2553b6ab9efc64d9c50ff128bcb4955f183cc4a1a5932b687898
4
+ data.tar.gz: 7132c22bd53d293a352c7e87e30d81da99643948fe94d1dfd816557de930b2c2
5
5
  SHA512:
6
- metadata.gz: 1b5a73ec3c4ffb45daf21dba976f1c6330b0c4a4f2ee0ea3065674710026745834287586dc897b7ec3a1a645e1ed7a3d60f7ca580a46b5f47dc2ed25b6031ee7
7
- data.tar.gz: 0a4b834f9fcba3502c6f6408511001ab35fc08c5a5c4987b9c51ad5a4a16708ff714a7f47d993cdcd1decf0cf57dad75f4147deab2ac65363cad8cb6f37ee605
6
+ metadata.gz: 81479273b4e67be68a8af7546925eff70612ea4fe5fdeb1d48b906038ebe5d61aefbfddaf895cc249d32f8b7cb2ac08ee1e186438f752473e9cb635ada3c9772
7
+ data.tar.gz: e0d743736aefcba61d2b1d6cbff2fff949241378791246218bae10dbf410f1fe0ca0e48e1c1b462aa18d7e59061c12b3bdd216ef161a39f64cc533f56c7bb06b
data/bin/geet CHANGED
@@ -17,6 +17,7 @@ class GeetLauncher
17
17
  include Geet::Helpers::SummaryHelper
18
18
 
19
19
  SUMMARY_TEMPLATE = IO.read(File.expand_path('../lib/geet/resources/templates/edit_summary.md', __dir__))
20
+ SUMMARY_BACKUP = File.join(Dir.tmpdir, 'last_geet_edited_summary.md')
20
21
 
21
22
  def launch
22
23
  command, options = Commandline::Configuration.new.decode_argv || exit
@@ -88,21 +89,24 @@ class GeetLauncher
88
89
  private
89
90
 
90
91
  def edit_pr_summary(base: nil)
91
- base ||= 'master'
92
-
93
92
  # Tricky. It would be best to have Git logic exlusively inside the services,
94
93
  # but at the same time, the summary editing should be out.
95
94
  git = Utils::GitClient.new
96
- pr_commits = git.cherry(base)
95
+ pr_commits = git.cherry(base: base)
97
96
 
98
- if pr_commits.size == 1
99
- prepopulated_summary = git.show_description('HEAD')
100
- cancel_pr_help = "In order to cancel the PR creation, delete the description above.\n"
97
+ summary =
98
+ if pr_commits.size == 1
99
+ prepopulated_summary = git.show_description('HEAD')
100
+ cancel_pr_help = "In order to cancel the PR creation, delete the description above.\n"
101
101
 
102
- Commandline::Editor.new.edit_content(content: prepopulated_summary, help: SUMMARY_TEMPLATE + cancel_pr_help)
103
- else
104
- Commandline::Editor.new.edit_content(help: SUMMARY_TEMPLATE)
105
- end
102
+ Commandline::Editor.new.edit_content(content: prepopulated_summary, help: SUMMARY_TEMPLATE + cancel_pr_help)
103
+ else
104
+ Commandline::Editor.new.edit_content(help: SUMMARY_TEMPLATE)
105
+ end
106
+
107
+ IO.write(SUMMARY_BACKUP, summary)
108
+
109
+ summary
106
110
  end
107
111
 
108
112
  def default_to_manual_selection(options, *params)
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.3.0'
12
12
  s.authors = ['Saverio Miroddi']
13
- s.date = '2021-07-09'
13
+ s.date = '2022-01-04'
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'
@@ -96,6 +96,7 @@ module Geet
96
96
  ]
97
97
 
98
98
  PR_OPEN_OPTIONS = [
99
+ ['-u', '--upstream', 'List on the upstream repository'],
99
100
  long_help: 'Open in the browser the PR for the current branch'
100
101
  ]
101
102
 
@@ -22,6 +22,9 @@ module Geet
22
22
 
23
23
  # See https://developer.github.com/v3/issues/#list-issues-for-a-repository
24
24
  #
25
+ # This works both for Issues and PRs, however, when the `/pulls` API (path) is used, additional
26
+ # information is provided (e.g. `head`).
27
+ #
25
28
  def self.list(api_interface, milestone: nil, assignee: nil, &type_filter)
26
29
  api_path = 'issues'
27
30
 
@@ -32,14 +32,34 @@ module Geet
32
32
 
33
33
  if head
34
34
  api_path = 'pulls'
35
- request_params = { head: "#{owner}:#{head}" }
36
35
 
37
- response = api_interface.send_request(api_path, params: request_params, multipage: true)
36
+ # Technically, the upstream approach could be used for both, but it's actually good to have
37
+ # both of them as reference.
38
+ #
39
+ # For upstream pulls, the owner is the authenticated user, otherwise, the repository owner.
40
+ #
41
+ response = if api_interface.upstream?
42
+ unfiltered_response = api_interface.send_request(api_path, multipage: true)
43
+
44
+ # VERY weird. From the docs, it's not clear if the user/org is required in the `head` parameter,
45
+ # but:
46
+ #
47
+ # - if it isn't included (eg. `anything`), the parameter is ignored
48
+ # - if it's included (eg. `saveriomiroddi:local_branch_name`), an empty resultset is returned.
49
+ #
50
+ # For this reason, we can't use that param, and have to filter manually.
51
+ #
52
+ unfiltered_response.select { |pr_data| pr_data.fetch('head').fetch('label') == "#{owner}:#{head}" }
53
+ else
54
+ request_params = { head: "#{owner}:#{head}" }
55
+
56
+ api_interface.send_request(api_path, params: request_params, multipage: true)
57
+ end
38
58
 
39
- response.map do |issue_data|
40
- number = issue_data.fetch('number')
41
- title = issue_data.fetch('title')
42
- link = issue_data.fetch('html_url')
59
+ response.map do |pr_data|
60
+ number = pr_data.fetch('number')
61
+ title = pr_data.fetch('title')
62
+ link = pr_data.fetch('html_url')
43
63
 
44
64
  new(number, api_interface, title, link)
45
65
  end
@@ -9,17 +9,19 @@ module Geet
9
9
  # Helper for services common workflow, for example, find the merge head.
10
10
  #
11
11
  module ServicesWorkflowHelper
12
- # Requires: @git_client
13
- #
14
- def find_merge_head
15
- [@git_client.owner, @git_client.current_branch]
16
- end
17
-
18
12
  # Expect to find only one.
19
13
  #
20
14
  # Requires: @out, @repository.
21
15
  #
22
- def checked_find_branch_pr(owner, head)
16
+ def checked_find_branch_pr
17
+ owner = if @repository.upstream?
18
+ @repository.authenticated_user.username
19
+ else
20
+ @git_client.owner
21
+ end
22
+
23
+ head = @git_client.current_branch
24
+
23
25
  @out.puts "Finding PR with head (#{owner}:#{head})..."
24
26
 
25
27
  prs = @repository.prs(owner: owner, head: head)
@@ -12,22 +12,10 @@ module Geet
12
12
  class AbstractCreateIssue
13
13
  include Geet::Helpers::OsHelper
14
14
 
15
- SUMMARY_BACKUP_FILENAME = File.join(Dir.tmpdir, 'last_geet_edited_summary.md')
16
-
17
15
  def initialize(repository, out: $stdout)
18
16
  @repository = repository
19
17
  @out = out
20
18
  end
21
-
22
- private
23
-
24
- def save_summary(title, description)
25
- summary = "#{title}\n\n#{description}".strip + "\n"
26
-
27
- IO.write(SUMMARY_BACKUP_FILENAME, summary)
28
-
29
- @out.puts "Error! Saved summary to #{SUMMARY_BACKUP_FILENAME}"
30
- end
31
19
  end
32
20
  end
33
21
  end
@@ -20,8 +20,7 @@ module Geet
20
20
  end
21
21
 
22
22
  def execute(comment, no_open_pr: nil)
23
- merge_owner, merge_head = find_merge_head
24
- pr = checked_find_branch_pr(merge_owner, merge_head)
23
+ pr = checked_find_branch_pr
25
24
  pr.comment(comment)
26
25
  open_file_with_default_application(pr.link) unless no_open_pr
27
26
  pr
@@ -46,9 +46,6 @@ module Geet
46
46
  end
47
47
 
48
48
  issue
49
- rescue => error
50
- save_summary(title, description) if title
51
- raise
52
49
  end
53
50
 
54
51
  private
@@ -37,7 +37,7 @@ module Geet
37
37
  selected_labels, selected_milestone, selected_reviewers = find_and_select_attributes(labels, milestone, reviewers)
38
38
  end
39
39
 
40
- sync_with_upstream_branch if automated_mode
40
+ sync_with_remote_branch if automated_mode
41
41
 
42
42
  pr = create_pr(title, description, base: base, draft: draft)
43
43
 
@@ -52,9 +52,6 @@ module Geet
52
52
  end
53
53
 
54
54
  pr
55
- rescue => error
56
- save_summary(title, description) if title
57
- raise
58
55
  end
59
56
 
60
57
  private
@@ -81,17 +78,17 @@ module Geet
81
78
  selection_manager.select_attributes
82
79
  end
83
80
 
84
- def sync_with_upstream_branch
85
- if @git_client.upstream_branch
86
- @out.puts "Pushing to upstream branch..."
81
+ def sync_with_remote_branch
82
+ if @git_client.remote_branch
83
+ @out.puts "Pushing to remote branch..."
87
84
 
88
85
  @git_client.push
89
86
  else
90
- upstream_branch = @git_client.current_branch
87
+ remote_branch = @git_client.current_branch
91
88
 
92
- @out.puts "Creating upstream branch #{upstream_branch.inspect}..."
89
+ @out.puts "Creating remote branch #{remote_branch.inspect}..."
93
90
 
94
- @git_client.push(upstream_branch: upstream_branch)
91
+ @git_client.push(remote_branch: remote_branch)
95
92
  end
96
93
  end
97
94
 
@@ -23,8 +23,9 @@ module Geet
23
23
  end
24
24
 
25
25
  def execute(delete_branch: false)
26
- merge_owner, merge_head = find_merge_head
27
- pr = checked_find_branch_pr(merge_owner, merge_head)
26
+ @git_client.push
27
+
28
+ pr = checked_find_branch_pr
28
29
 
29
30
  merge_pr(pr)
30
31
 
@@ -36,7 +37,7 @@ module Geet
36
37
 
37
38
  fetch_repository
38
39
 
39
- if upstream_branch_gone?
40
+ if @git_client.remote_branch_gone?
40
41
  pr_branch = @git_client.current_branch
41
42
  main_branch = @git_client.main_branch
42
43
 
@@ -72,10 +73,6 @@ module Geet
72
73
  @git_client.fetch
73
74
  end
74
75
 
75
- def upstream_branch_gone?
76
- @git_client.upstream_branch_gone?
77
- end
78
-
79
76
  def checkout_branch(branch)
80
77
  @out.puts "Checking out #{branch}..."
81
78
 
@@ -19,9 +19,8 @@ module Geet
19
19
  @git_client = git_client
20
20
  end
21
21
 
22
- def execute(delete_branch: false)
23
- merge_owner, merge_head = find_merge_head
24
- pr = checked_find_branch_pr(merge_owner, merge_head)
22
+ def execute(delete_branch: false, **)
23
+ pr = checked_find_branch_pr
25
24
  open_file_with_default_application(pr.link)
26
25
  pr
27
26
  end
@@ -4,6 +4,8 @@ module Geet
4
4
  module Shared
5
5
  module Selection
6
6
  MANUAL_LIST_SELECTION_FLAG = '-'.freeze
7
+ # Don't select anything; return the null value.
8
+ SKIP_LIST_SELECTION_FLAG = ''.freeze
7
9
 
8
10
  SELECTION_SINGLE = :single
9
11
  SELECTION_MULTIPLE = :multiple
@@ -76,8 +76,11 @@ module Geet
76
76
  # select_entry('milestone', all_milestones, '0.1.0', :title)
77
77
  #
78
78
  def select_entry(entry_type, entries, pattern, name_method)
79
- if pattern == MANUAL_LIST_SELECTION_FLAG
79
+ case pattern
80
+ when MANUAL_LIST_SELECTION_FLAG
80
81
  Geet::Utils::ManualListSelection.new.select_entry(entry_type, entries, name_method: name_method)
82
+ when SKIP_LIST_SELECTION_FLAG
83
+ nil
81
84
  else
82
85
  Geet::Utils::StringMatchingSelection.new.select_entry(entry_type, entries, pattern, name_method: name_method)
83
86
  end
@@ -95,8 +98,11 @@ module Geet
95
98
  #
96
99
  pattern = pattern.join(',') if pattern.is_a?(Array)
97
100
 
98
- if pattern == MANUAL_LIST_SELECTION_FLAG
101
+ case pattern
102
+ when MANUAL_LIST_SELECTION_FLAG
99
103
  Geet::Utils::ManualListSelection.new.select_entries(entry_type, entries, name_method: name_method)
104
+ when SKIP_LIST_SELECTION_FLAG
105
+ []
100
106
  else
101
107
  Geet::Utils::StringMatchingSelection.new.select_entries(entry_type, entries, pattern, name_method: name_method)
102
108
  end
@@ -34,7 +34,7 @@ module Geet
34
34
  \Z
35
35
  }x
36
36
 
37
- UPSTREAM_BRANCH_REGEX = %r{\A[^/]+/([^/]+)\Z}
37
+ REMOTE_BRANCH_REGEX = %r{\A[^/]+/(.+)\Z}
38
38
 
39
39
  MAIN_BRANCH_CONFIG_ENTRY = 'custom.development-branch'
40
40
 
@@ -48,11 +48,13 @@ module Geet
48
48
  # BRANCH/TREE APIS
49
49
  ##########################################################################
50
50
 
51
- # Return the commit shas between HEAD and `limit`, excluding the already applied commits
51
+ # Return the commit SHAs between HEAD and `base`, excluding the already applied commits
52
52
  # (which start with `-`)
53
53
  #
54
- def cherry(limit)
55
- raw_commits = execute_git_command("cherry #{limit.shellescape}")
54
+ def cherry(base: nil)
55
+ base ||= main_branch
56
+
57
+ raw_commits = execute_git_command("cherry #{base.shellescape}")
56
58
 
57
59
  raw_commits.split("\n").grep(/^\+/).map { |line| line[3..-1] }
58
60
  end
@@ -65,25 +67,23 @@ module Geet
65
67
  branch
66
68
  end
67
69
 
68
- # Not to be confused with `upstream` repository!
69
- #
70
70
  # This API doesn't reveal if the remote branch is gone.
71
71
  #
72
- # return: nil, if the upstream branch is not configured.
72
+ # return: nil, if the remote branch is not configured.
73
73
  #
74
- def upstream_branch
74
+ def remote_branch
75
75
  head_symbolic_ref = execute_git_command("symbolic-ref -q HEAD")
76
76
 
77
- raw_upstream_branch = execute_git_command("for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
77
+ raw_remote_branch = execute_git_command("for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
78
78
 
79
- if raw_upstream_branch != ''
80
- raw_upstream_branch[UPSTREAM_BRANCH_REGEX, 1] || raise("Unexpected upstream format: #{raw_upstream_branch}")
79
+ if raw_remote_branch != ''
80
+ raw_remote_branch[REMOTE_BRANCH_REGEX, 1] || raise("Unexpected remote branch format: #{raw_remote_branch}")
81
81
  else
82
82
  nil
83
83
  end
84
84
  end
85
85
 
86
- # TODO: May be merged with :upstream_branch, although it would require designing how a gone
86
+ # TODO: May be merged with :remote_branch, although it would require designing how a gone
87
87
  # remote branch is expressed.
88
88
  #
89
89
  # Sample command output:
@@ -91,7 +91,7 @@ module Geet
91
91
  # ## add_milestone_closing...origin/add_milestone_closing [gone]
92
92
  # M spec/integration/merge_pr_spec.rb
93
93
  #
94
- def upstream_branch_gone?
94
+ def remote_branch_gone?
95
95
  git_command = "status -b --porcelain"
96
96
  status_output = execute_git_command(git_command)
97
97
 
@@ -216,12 +216,12 @@ module Geet
216
216
  execute_git_command("rebase")
217
217
  end
218
218
 
219
- # upstream_branch: create an upstream branch.
219
+ # remote_branch: create an upstream branch.
220
220
  #
221
- def push(upstream_branch: nil)
222
- upstream_branch_option = "-u #{ORIGIN_NAME} #{upstream_branch.shellescape}" if upstream_branch
221
+ def push(remote_branch: nil, force: false)
222
+ remote_branch_option = "-u #{ORIGIN_NAME} #{remote_branch.shellescape}" if remote_branch
223
223
 
224
- execute_git_command("push #{upstream_branch_option}")
224
+ execute_git_command("push #{"--force" if force} #{remote_branch_option}")
225
225
  end
226
226
 
227
227
  # Performs pruning.
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.4.1'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -117,10 +117,6 @@ describe Geet::Services::CreatePr do
117
117
  allow(git_client).to receive(:working_tree_clean?).and_return(false)
118
118
  allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
119
119
 
120
- expected_output = <<~STR
121
- Error! Saved summary to /tmp/last_geet_edited_summary.md
122
- STR
123
-
124
120
  actual_output = StringIO.new
125
121
 
126
122
  operation = -> do
@@ -129,21 +125,20 @@ describe Geet::Services::CreatePr do
129
125
  end
130
126
 
131
127
  expect(operation).to raise_error(RuntimeError, 'The working tree is not clean!')
132
-
133
- expect(actual_output.string).to eql(expected_output)
128
+ expect(actual_output.string).to be_empty
134
129
  end
135
130
 
136
- it 'should push to the upstream branch' do
131
+ it 'should push to the remote branch' do
137
132
  allow(git_client).to receive(:working_tree_clean?).and_return(true)
138
133
  allow(git_client).to receive(:current_branch).and_return('mybranch')
139
134
  allow(git_client).to receive(:main_branch).and_return('master')
140
- expect(git_client).to receive(:upstream_branch).and_return('mybranch')
135
+ expect(git_client).to receive(:remote_branch).and_return('mybranch')
141
136
  expect(git_client).to receive(:push)
142
137
 
143
138
  allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
144
139
 
145
140
  expected_output = <<~STR
146
- Pushing to upstream branch...
141
+ Pushing to remote branch...
147
142
  Creating PR...
148
143
  Assigning authenticated user...
149
144
  PR address: https://github.com/donaldduck/testrepo_f/pull/2
@@ -159,17 +154,17 @@ describe Geet::Services::CreatePr do
159
154
  expect(actual_output.string).to eql(expected_output)
160
155
  end
161
156
 
162
- it "should create an upstream branch, when there isn't one (is not tracked)" do
157
+ it "should create a remote branch, when there isn't one (is not tracked)" do
163
158
  allow(git_client).to receive(:working_tree_clean?).and_return(true)
164
159
  allow(git_client).to receive(:current_branch).and_return('mybranch')
165
160
  allow(git_client).to receive(:main_branch).and_return('master')
166
- expect(git_client).to receive(:upstream_branch).and_return(nil)
167
- expect(git_client).to receive(:push).with(upstream_branch: 'mybranch')
161
+ expect(git_client).to receive(:remote_branch).and_return(nil)
162
+ expect(git_client).to receive(:push).with(remote_branch: 'mybranch')
168
163
 
169
164
  allow(git_client).to receive(:remote).with(no_args).and_return('git@github.com:donaldduck/testrepo_f')
170
165
 
171
166
  expected_output = <<~STR
172
- Creating upstream branch "mybranch"...
167
+ Creating remote branch "mybranch"...
173
168
  Creating PR...
174
169
  Assigning authenticated user...
175
170
  PR address: https://github.com/donaldduck/testrepo_f/pull/4
@@ -7,7 +7,7 @@ require_relative '../../lib/geet/services/merge_pr'
7
7
 
8
8
  # Currently disabled: it requires updates following the addition of the automatic removal of the local
9
9
  # branch.
10
- # Specifically, `GitClient#upstream_branch_gone?` needs to be handled, since it returns the current
10
+ # Specifically, `GitClient#remote_branch_gone?` needs to be handled, since it returns the current
11
11
  # branch, while it's supposed to return
12
12
  #
13
13
  describe Geet::Services::MergePr do
@@ -19,7 +19,7 @@ describe Geet::Services::MergePr do
19
19
 
20
20
  before :each do
21
21
  expect(git_client).to receive(:fetch)
22
- expect(git_client).to receive(:upstream_branch_gone?).and_return(true)
22
+ expect(git_client).to receive(:remote_branch_gone?).and_return(true)
23
23
  expect(git_client).to receive(:checkout).with(main_branch)
24
24
  expect(git_client).to receive(:rebase)
25
25
  expect(git_client).to receive(:delete_branch).with('mybranch')
@@ -28,90 +28,93 @@ describe Geet::Services::MergePr do
28
28
  context 'with github.com' do
29
29
  let(:repository_name) { 'testrepo_upstream' }
30
30
 
31
- it 'should merge the PR for the current branch' do
32
- allow(git_client).to receive(:current_branch).and_return(branch)
33
- allow(git_client).to receive(:main_branch).and_return(main_branch)
34
- allow(git_client).to receive(:remote).with(no_args).and_return("git@github.com:#{owner}/#{repository_name}")
35
-
36
- expected_pr_number = 1
37
- expected_output = <<~STR
38
- Finding PR with head (#{owner}:#{branch})...
39
- Merging PR ##{expected_pr_number}...
40
- Fetching repository...
41
- Checking out #{main_branch}...
42
- Rebasing...
43
- Deleting local branch mybranch...
44
- STR
45
-
46
- actual_output = StringIO.new
47
-
48
- service_result = VCR.use_cassette('github_com/merge_pr') do
49
- described_class.new(repository, out: actual_output, git_client: git_client).execute
50
- end
51
-
52
- actual_pr_number = service_result.number
53
-
54
- expect(actual_output.string).to eql(expected_output)
55
- expect(actual_pr_number).to eql(expected_pr_number)
56
- end
57
-
58
- it 'should merge the PR for the current branch, with branch deletion' do
59
- allow(git_client).to receive(:current_branch).and_return(branch)
60
- allow(git_client).to receive(:main_branch).and_return(main_branch)
61
- allow(git_client).to receive(:remote).with(no_args).and_return("git@github.com:#{owner}/#{repository_name}")
62
-
63
- expected_pr_number = 2
64
- expected_output = <<~STR
65
- Finding PR with head (#{owner}:#{branch})...
66
- Merging PR ##{expected_pr_number}...
67
- Deleting remote branch #{branch}...
68
- Fetching repository...
69
- Checking out #{main_branch}...
70
- Rebasing...
71
- Deleting local branch mybranch...
72
- STR
73
-
74
- actual_output = StringIO.new
75
-
76
- service_result = VCR.use_cassette('github_com/merge_pr_with_branch_deletion') do
77
- described_class.new(repository, out: actual_output, git_client: git_client).execute(delete_branch: true)
78
- end
79
-
80
- actual_pr_number = service_result.number
81
-
82
- expect(actual_output.string).to eql(expected_output)
83
- expect(actual_pr_number).to eql(expected_pr_number)
84
- end
31
+ it 'should merge the PR for the current branch'
32
+ # do
33
+ # allow(git_client).to receive(:current_branch).and_return(branch)
34
+ # allow(git_client).to receive(:main_branch).and_return(main_branch)
35
+ # allow(git_client).to receive(:remote).with(no_args).and_return("git@github.com:#{owner}/#{repository_name}")
36
+ #
37
+ # expected_pr_number = 1
38
+ # expected_output = <<~STR
39
+ # Finding PR with head (#{owner}:#{branch})...
40
+ # Merging PR ##{expected_pr_number}...
41
+ # Fetching repository...
42
+ # Checking out #{main_branch}...
43
+ # Rebasing...
44
+ # Deleting local branch mybranch...
45
+ # STR
46
+ #
47
+ # actual_output = StringIO.new
48
+ #
49
+ # service_result = VCR.use_cassette('github_com/merge_pr') do
50
+ # described_class.new(repository, out: actual_output, git_client: git_client).execute
51
+ # end
52
+ #
53
+ # actual_pr_number = service_result.number
54
+ #
55
+ # expect(actual_output.string).to eql(expected_output)
56
+ # expect(actual_pr_number).to eql(expected_pr_number)
57
+ # end
58
+
59
+ it 'should merge the PR for the current branch, with branch deletion'
60
+ # do
61
+ # allow(git_client).to receive(:current_branch).and_return(branch)
62
+ # allow(git_client).to receive(:main_branch).and_return(main_branch)
63
+ # allow(git_client).to receive(:remote).with(no_args).and_return("git@github.com:#{owner}/#{repository_name}")
64
+ #
65
+ # expected_pr_number = 2
66
+ # expected_output = <<~STR
67
+ # Finding PR with head (#{owner}:#{branch})...
68
+ # Merging PR ##{expected_pr_number}...
69
+ # Deleting remote branch #{branch}...
70
+ # Fetching repository...
71
+ # Checking out #{main_branch}...
72
+ # Rebasing...
73
+ # Deleting local branch mybranch...
74
+ # STR
75
+ #
76
+ # actual_output = StringIO.new
77
+ #
78
+ # service_result = VCR.use_cassette('github_com/merge_pr_with_branch_deletion') do
79
+ # described_class.new(repository, out: actual_output, git_client: git_client).execute(delete_branch: true)
80
+ # end
81
+ #
82
+ # actual_pr_number = service_result.number
83
+ #
84
+ # expect(actual_output.string).to eql(expected_output)
85
+ # expect(actual_pr_number).to eql(expected_pr_number)
86
+ # end
85
87
  end # context 'with github.com'
86
88
 
87
89
  context 'with gitlab.com' do
88
90
  let(:repository_name) { 'testproject' }
89
91
 
90
- it 'should merge the PR for the current branch' do
91
- allow(git_client).to receive(:current_branch).and_return(branch)
92
- allow(git_client).to receive(:main_branch).and_return(main_branch)
93
- allow(git_client).to receive(:remote).with(no_args).and_return("git@gitlab.com:#{owner}/#{repository_name}")
94
-
95
- expected_pr_number = 4
96
- expected_output = <<~STR
97
- Finding PR with head (#{owner}:#{branch})...
98
- Merging PR ##{expected_pr_number}...
99
- Fetching repository...
100
- Checking out #{main_branch}...
101
- Rebasing...
102
- Deleting local branch mybranch...
103
- STR
104
-
105
- actual_output = StringIO.new
106
-
107
- service_result = VCR.use_cassette('gitlab_com/merge_pr') do
108
- described_class.new(repository, out: actual_output, git_client: git_client).execute
109
- end
110
-
111
- actual_pr_number = service_result.number
112
-
113
- expect(actual_output.string).to eql(expected_output)
114
- expect(actual_pr_number).to eql(expected_pr_number)
115
- end
92
+ it 'should merge the PR for the current branch'
93
+ # do
94
+ # allow(git_client).to receive(:current_branch).and_return(branch)
95
+ # allow(git_client).to receive(:main_branch).and_return(main_branch)
96
+ # allow(git_client).to receive(:remote).with(no_args).and_return("git@gitlab.com:#{owner}/#{repository_name}")
97
+ #
98
+ # expected_pr_number = 4
99
+ # expected_output = <<~STR
100
+ # Finding PR with head (#{owner}:#{branch})...
101
+ # Merging PR ##{expected_pr_number}...
102
+ # Fetching repository...
103
+ # Checking out #{main_branch}...
104
+ # Rebasing...
105
+ # Deleting local branch mybranch...
106
+ # STR
107
+ #
108
+ # actual_output = StringIO.new
109
+ #
110
+ # service_result = VCR.use_cassette('gitlab_com/merge_pr') do
111
+ # described_class.new(repository, out: actual_output, git_client: git_client).execute
112
+ # end
113
+ #
114
+ # actual_pr_number = service_result.number
115
+ #
116
+ # expect(actual_output.string).to eql(expected_output)
117
+ # expect(actual_pr_number).to eql(expected_pr_number)
118
+ # end
116
119
  end # context 'with gitlab.com'
117
120
  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.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saverio Miroddi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-09 00:00:00.000000000 Z
11
+ date: 2022-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_scripting
@@ -190,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
190
  - !ruby/object:Gem::Version
191
191
  version: '0'
192
192
  requirements: []
193
- rubygems_version: 3.1.4
193
+ rubygems_version: 3.1.6
194
194
  signing_key:
195
195
  specification_version: 4
196
196
  summary: Commandline interface for performing SCM host operations, eg. create a PR