geet 0.3.15 → 0.3.16

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: 24fb5de6b678ccceae3bf6366beded7c208a6d44f75db7303063176436365a5d
4
- data.tar.gz: 4de89e5bfd5414e12cdbf74badf7ed36254f657dc9b8c3fe54c85d8af617b025
3
+ metadata.gz: 15603a9a3a61fd8b6c3a377bd8fb1f482c121078b153e0cb8f3bdf12609d01f2
4
+ data.tar.gz: cde2b52ebcc17f2af2e64466c5565a65fad846e946747d91dfd734e5ce108e2c
5
5
  SHA512:
6
- metadata.gz: f7631017c938ebf68f5c94e142fe00ab7a905cfa3c01383ed61296c0e1db29e76d743d7818c524732755cd7231d654316428bd2b23d2ae450dc83fac3856058e
7
- data.tar.gz: b6e366dd0e923d4b8a4e91781ba5820365a885b866b377907ad965d54f71ac2a9dd061900e8b011c1f54e5c7619bf87d58af7474039deb476d1f3322c745242b
6
+ metadata.gz: 5ea5d57a2f25a0f83910afe316194d335f11d04b4228324ab577845a74b62331705b3650b654cdb951e69c6fa76438441e1fa1caa3bf431e456acefc39f4457d
7
+ data.tar.gz: 06c954789d0e39cb723daa45de62c190817773cad1c29d1719524452c98731ded5f0cce8f72450f677c54688c38636b21538eca04226dafb45b00d16ab548806
@@ -5,6 +5,12 @@ rvm:
5
5
  - 2.4
6
6
  - 2.5
7
7
  - 2.6
8
+ - 2.7
9
+ - ruby-head
10
+ matrix:
11
+ fast_finish: true
12
+ allow_failures:
13
+ - rvm: ruby-head
8
14
  # API tokens are always required, but not used in testing, since no requests are actually made.
9
15
  env:
10
16
  - GITHUB_API_TOKEN=phony GITLAB_API_TOKEN=phony
data/bin/geet CHANGED
@@ -46,6 +46,13 @@ class GeetLauncher
46
46
  Services::ListIssues.new(repository).execute(options)
47
47
  when LABEL_LIST_COMMAND
48
48
  Services::ListLabels.new(repository).execute
49
+ when MILESTONE_CLOSE_COMMAND
50
+ # Don't support user selection. This requires extra complexity, specifically, matching by number
51
+ # while displaying the titles (see AttributesSelectionManager).
52
+ #
53
+ options = {numbers: Shared::Selection::MANUAL_LIST_SELECTION_FLAG}
54
+
55
+ Services::CloseMilestones.new(repository).execute(options)
49
56
  when MILESTONE_CREATE_COMMAND
50
57
  title = options.delete(:title)
51
58
 
@@ -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 = '2019-09-03'
13
+ s.date = '2020-11-16'
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'
@@ -8,6 +8,7 @@ module Geet
8
8
  LABEL_CREATE_COMMAND = 'label.create'
9
9
  ISSUE_LIST_COMMAND = 'issue.list'
10
10
  LABEL_LIST_COMMAND = 'label.list'
11
+ MILESTONE_CLOSE_COMMAND = 'milestone.close'
11
12
  MILESTONE_CREATE_COMMAND = 'milestone.create'
12
13
  MILESTONE_LIST_COMMAND = 'milestone.list'
13
14
  PR_COMMENT_COMMAND = 'pr.comment'
@@ -45,6 +45,10 @@ module Geet
45
45
  ['-u', '--upstream', 'List on the upstream repository'],
46
46
  ].freeze
47
47
 
48
+ MILESTONE_CLOSE_OPTIONS = [
49
+ long_help: 'Close milestones.'
50
+ ]
51
+
48
52
  MILESTONE_CREATE_OPTIONS = [
49
53
  'title',
50
54
  long_help: 'Create a milestone.'
@@ -109,6 +113,7 @@ module Geet
109
113
  'list' => LABEL_LIST_OPTIONS,
110
114
  },
111
115
  'milestone' => {
116
+ 'close' => MILESTONE_CLOSE_OPTIONS,
112
117
  'create' => MILESTONE_CREATE_OPTIONS,
113
118
  'list' => MILESTONE_LIST_OPTIONS,
114
119
  },
@@ -70,6 +70,10 @@ module Geet
70
70
  attempt_provider_call(:Milestone, :list, api_interface)
71
71
  end
72
72
 
73
+ def close_milestone(number)
74
+ attempt_provider_call(:Milestone, :close, number, api_interface)
75
+ end
76
+
73
77
  def create_pr(title, description, head, base: nil)
74
78
  confirm(LOCAL_ACTION_ON_UPSTREAM_REPOSITORY_MESSAGE) if local_action_on_upstream_repository? && @warnings
75
79
  confirm(ACTION_ON_PROTECTED_REPOSITORY_MESSAGE) if action_on_protected_repository? && @warnings
@@ -7,6 +7,8 @@ module Geet
7
7
  class Milestone
8
8
  attr_reader :number, :title, :due_on
9
9
 
10
+ STATE_CLOSED = 'closed'
11
+
10
12
  class << self
11
13
  private
12
14
 
@@ -64,6 +66,17 @@ module Geet
64
66
  new(number, title, due_on, api_interface)
65
67
  end
66
68
  end
69
+
70
+ # See https://docs.github.com/en/free-pro-team@latest/rest/reference/issues#update-a-milestone
71
+ #
72
+ # This is a convenience method; the underlying operation is a generic update.
73
+ #
74
+ def self.close(number, api_interface)
75
+ api_path = "milestones/#{number}"
76
+ request_data = { state: STATE_CLOSED }
77
+
78
+ api_interface.send_request(api_path, data: request_data)
79
+ end
67
80
  end
68
81
  end
69
82
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../shared/selection'
4
+
5
+ module Geet
6
+ module Services
7
+ class CloseMilestones
8
+ include Geet::Shared::Selection
9
+
10
+ def initialize(repository, out: $stdout)
11
+ @repository = repository
12
+ @out = out
13
+ end
14
+
15
+ def execute(numbers: nil)
16
+ numbers = find_and_select_milestone_numbers(numbers)
17
+
18
+ close_milestone_threads = close_milestones(numbers)
19
+
20
+ close_milestone_threads.each(&:join)
21
+ end
22
+
23
+ private
24
+
25
+ def find_and_select_milestone_numbers(numbers)
26
+ selection_manager = Geet::Utils::AttributesSelectionManager.new(@repository, out: @out)
27
+
28
+ selection_manager.add_attribute(:milestones, 'milestone', numbers, SELECTION_MULTIPLE, name_method: :title)
29
+
30
+ milestones = selection_manager.select_attributes[0]
31
+
32
+ milestones.map(&:number)
33
+ end
34
+
35
+ def close_milestones(numbers)
36
+ @out.puts "Closing milestones #{numbers.join(', ')}..."
37
+
38
+ numbers.map do |number|
39
+ Thread.new do
40
+ @repository.close_milestone(number)
41
+ end
42
+ end
43
+ end
44
+ end # CloseMilestones
45
+ end # Services
46
+ end # Geet
@@ -2,11 +2,13 @@
2
2
 
3
3
  require_relative 'abstract_create_issue'
4
4
  require_relative '../shared/repo_permissions'
5
+ require_relative '../shared/selection'
5
6
 
6
7
  module Geet
7
8
  module Services
8
9
  class CreateIssue < AbstractCreateIssue
9
10
  include Geet::Shared::RepoPermissions
11
+ include Geet::Shared::Selection
10
12
 
11
13
  # options:
12
14
  # :labels
@@ -56,9 +58,9 @@ module Geet
56
58
  def find_and_select_attributes(labels, milestone, assignees)
57
59
  selection_manager = Geet::Utils::AttributesSelectionManager.new(@repository, out: @out)
58
60
 
59
- selection_manager.add_attribute(:labels, 'label', labels, :multiple, name_method: :name) if labels
60
- selection_manager.add_attribute(:milestones, 'milestone', milestone, :single, name_method: :title) if milestone
61
- selection_manager.add_attribute(:collaborators, 'assignee', assignees, :multiple, name_method: :username) if assignees
61
+ selection_manager.add_attribute(:labels, 'label', labels, SELECTION_MULTIPLE, name_method: :name) if labels
62
+ selection_manager.add_attribute(:milestones, 'milestone', milestone, SELECTION_SINGLE, name_method: :title) if milestone
63
+ selection_manager.add_attribute(:collaborators, 'assignee', assignees, SELECTION_MULTIPLE, name_method: :username) if assignees
62
64
 
63
65
  selection_manager.select_attributes
64
66
  end
@@ -2,11 +2,13 @@
2
2
 
3
3
  require_relative 'abstract_create_issue'
4
4
  require_relative '../shared/repo_permissions'
5
+ require_relative '../shared/selection'
5
6
 
6
7
  module Geet
7
8
  module Services
8
9
  class CreatePr < AbstractCreateIssue
9
10
  include Geet::Shared::RepoPermissions
11
+ include Geet::Shared::Selection
10
12
 
11
13
  DEFAULT_GIT_CLIENT = Geet::Utils::GitClient.new
12
14
 
@@ -66,11 +68,11 @@ module Geet
66
68
  def find_and_select_attributes(labels, milestone, reviewers)
67
69
  selection_manager = Geet::Utils::AttributesSelectionManager.new(@repository, out: @out)
68
70
 
69
- selection_manager.add_attribute(:labels, 'label', labels, :multiple, name_method: :name) if labels
70
- selection_manager.add_attribute(:milestones, 'milestone', milestone, :single, name_method: :title) if milestone
71
+ selection_manager.add_attribute(:labels, 'label', labels, SELECTION_MULTIPLE, name_method: :name) if labels
72
+ selection_manager.add_attribute(:milestones, 'milestone', milestone, SELECTION_SINGLE, name_method: :title) if milestone
71
73
 
72
74
  if reviewers
73
- selection_manager.add_attribute(:collaborators, 'reviewer', reviewers, :multiple, name_method: :username) do |all_reviewers|
75
+ selection_manager.add_attribute(:collaborators, 'reviewer', reviewers, SELECTION_MULTIPLE, name_method: :username) do |all_reviewers|
74
76
  authenticated_user = @repository.authenticated_user
75
77
  all_reviewers.delete_if { |reviewer| reviewer.username == authenticated_user.username }
76
78
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../utils/attributes_selection_manager'
4
+ require_relative '../shared/selection'
4
5
 
5
6
  module Geet
6
7
  module Services
7
8
  class ListIssues
9
+ include Geet::Shared::Selection
10
+
8
11
  def initialize(repository, out: $stdout)
9
12
  @repository = repository
10
13
  @out = out
@@ -25,7 +28,7 @@ module Geet
25
28
  def find_and_select_attributes(assignee)
26
29
  selection_manager = Geet::Utils::AttributesSelectionManager.new(@repository, out: @out)
27
30
 
28
- selection_manager.add_attribute(:collaborators, 'assignee', assignee, :single, name_method: :username)
31
+ selection_manager.add_attribute(:collaborators, 'assignee', assignee, SELECTION_SINGLE, name_method: :username)
29
32
 
30
33
  selection_manager.select_attributes[0]
31
34
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../helpers/services_workflow_helper'
4
+ require_relative '../shared/branches'
4
5
 
5
6
  module Geet
6
7
  module Services
@@ -12,6 +13,7 @@ module Geet
12
13
  #
13
14
  class MergePr
14
15
  include Geet::Helpers::ServicesWorkflowHelper
16
+ include Geet::Shared::Branches
15
17
 
16
18
  DEFAULT_GIT_CLIENT = Geet::Utils::GitClient.new
17
19
 
@@ -24,8 +26,29 @@ module Geet
24
26
  def execute(delete_branch: false)
25
27
  merge_owner, merge_head = find_merge_head
26
28
  pr = checked_find_branch_pr(merge_owner, merge_head)
29
+
27
30
  merge_pr(pr)
28
- do_delete_branch if delete_branch
31
+
32
+ if delete_branch
33
+ branch = @git_client.current_branch
34
+
35
+ delete_remote_branch(branch)
36
+ end
37
+
38
+ fetch_repository
39
+
40
+ if upstream_branch_gone?
41
+ pr_branch = @git_client.current_branch
42
+
43
+ # The rebase could also be placed after the branch deletion. There are pros/cons;
44
+ # currently, it's not important.
45
+ #
46
+ checkout_branch(MAIN_BRANCH)
47
+ rebase
48
+
49
+ delete_local_branch(pr_branch)
50
+ end
51
+
29
52
  pr
30
53
  end
31
54
 
@@ -37,10 +60,38 @@ module Geet
37
60
  pr.merge
38
61
  end
39
62
 
40
- def do_delete_branch
41
- @out.puts "Deleting branch #{@git_client.current_branch}..."
63
+ def delete_remote_branch(branch)
64
+ @out.puts "Deleting remote branch #{branch}..."
65
+
66
+ @repository.delete_branch(branch)
67
+ end
68
+
69
+ def fetch_repository
70
+ @out.puts "Fetching repository..."
71
+
72
+ @git_client.fetch
73
+ end
74
+
75
+ def upstream_branch_gone?
76
+ @git_client.upstream_branch_gone?
77
+ end
78
+
79
+ def checkout_branch(branch)
80
+ @out.puts "Checking out #{branch}..."
81
+
82
+ @git_client.checkout(branch)
83
+ end
84
+
85
+ def rebase
86
+ @out.puts "Rebasing..."
87
+
88
+ @git_client.rebase
89
+ end
90
+
91
+ def delete_local_branch(branch)
92
+ @out.puts "Deleting local branch #{branch}..."
42
93
 
43
- @repository.delete_branch(@git_client.current_branch)
94
+ @git_client.delete_branch(branch)
44
95
  end
45
96
  end
46
97
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geet
4
+ module Shared
5
+ module Branches
6
+ MAIN_BRANCH = 'master'
7
+ end
8
+ end
9
+ end
@@ -4,6 +4,9 @@ module Geet
4
4
  module Shared
5
5
  module Selection
6
6
  MANUAL_LIST_SELECTION_FLAG = '-'.freeze
7
+
8
+ SELECTION_SINGLE = :single
9
+ SELECTION_MULTIPLE = :multiple
7
10
  end
8
11
  end
9
12
  end
@@ -30,8 +30,10 @@ module Geet
30
30
  @selections_data = []
31
31
  end
32
32
 
33
+ # selection_type: SELECTION_SINGLE or SELECTION_MULTIPLE
34
+ #
33
35
  def add_attribute(repository_call, description, pattern, selection_type, name_method: nil, &pre_selection_hook)
34
- raise "Unrecognized selection type #{selection_type.inspect}" if ![:single, :multiple].include?(selection_type)
36
+ raise "Unrecognized selection type #{selection_type.inspect}" if ![SELECTION_SINGLE, SELECTION_MULTIPLE].include?(selection_type)
35
37
 
36
38
  finder_thread = find_attribute_entries(repository_call)
37
39
 
@@ -47,9 +49,9 @@ module Geet
47
49
  entries = pre_selection_hook.(entries) if pre_selection_hook
48
50
 
49
51
  case selection_type
50
- when :single
52
+ when SELECTION_SINGLE
51
53
  select_entry(description, entries, pattern, name_method)
52
- when :multiple
54
+ when SELECTION_MULTIPLE
53
55
  select_entries(description, entries, pattern, name_method)
54
56
  end
55
57
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'English'
3
4
  require 'shellwords'
4
5
  require_relative '../helpers/os_helper'
5
6
 
@@ -38,13 +39,13 @@ module Geet
38
39
  # (which start with `-`)
39
40
  #
40
41
  def cherry(limit)
41
- raw_commits = execute_command("git #{gitdir_option} cherry #{limit.shellescape}")
42
+ raw_commits = execute_git_command("cherry #{limit.shellescape}")
42
43
 
43
44
  raw_commits.split("\n").grep(/^\+/).map { |line| line[3..-1] }
44
45
  end
45
46
 
46
47
  def current_branch
47
- branch = execute_command("git #{gitdir_option} rev-parse --abbrev-ref HEAD")
48
+ branch = execute_git_command("rev-parse --abbrev-ref HEAD")
48
49
 
49
50
  raise "Couldn't find current branch" if branch == 'HEAD'
50
51
 
@@ -53,12 +54,14 @@ module Geet
53
54
 
54
55
  # Not to be confused with `upstream` repository!
55
56
  #
57
+ # This API doesn't reveal if the remote branch is gone.
58
+ #
56
59
  # return: nil, if the upstream branch is not configured.
57
60
  #
58
61
  def upstream_branch
59
- head_symbolic_ref = execute_command("git #{gitdir_option} symbolic-ref -q HEAD")
62
+ head_symbolic_ref = execute_git_command("symbolic-ref -q HEAD")
60
63
 
61
- raw_upstream_branch = execute_command("git #{gitdir_option} for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
64
+ raw_upstream_branch = execute_git_command("for-each-ref --format='%(upstream:short)' #{head_symbolic_ref.shellescape}").strip
62
65
 
63
66
  if raw_upstream_branch != ''
64
67
  raw_upstream_branch[UPSTREAM_BRANCH_REGEX, 1] || raise("Unexpected upstream format: #{raw_upstream_branch}")
@@ -67,8 +70,30 @@ module Geet
67
70
  end
68
71
  end
69
72
 
73
+ # TODO: May be merged with :upstream_branch, although it would require designing how a gone
74
+ # remote branch is expressed.
75
+ #
76
+ # Sample command output:
77
+ #
78
+ # ## add_milestone_closing...origin/add_milestone_closing [gone]
79
+ # M spec/integration/merge_pr_spec.rb
80
+ #
81
+ def upstream_branch_gone?
82
+ git_command = "status -b --porcelain"
83
+ status_output = execute_git_command(git_command)
84
+
85
+ # Simplified branch naming pattern. The exact one (see https://stackoverflow.com/a/3651867)
86
+ # is not worth implementing.
87
+ #
88
+ if status_output =~ %r(^## .+\.\.\..+?( \[gone\])?$)
89
+ !!$LAST_MATCH_INFO[1]
90
+ else
91
+ raise "Unexpected git command #{git_command.inspect} output: #{status_output}"
92
+ end
93
+ end
94
+
70
95
  def working_tree_clean?
71
- git_message = execute_command("git #{gitdir_option} status")
96
+ git_message = execute_git_command("status")
72
97
 
73
98
  !!(git_message =~ CLEAN_TREE_MESSAGE_REGEX)
74
99
  end
@@ -80,7 +105,7 @@ module Geet
80
105
  # Show the description ("<subject>\n\n<body>") for the given git object.
81
106
  #
82
107
  def show_description(object)
83
- execute_command("git #{gitdir_option} show --quiet --format='%s\n\n%b' #{object.shellescape}")
108
+ execute_git_command("show --quiet --format='%s\n\n%b' #{object.shellescape}")
84
109
  end
85
110
 
86
111
  ##########################################################################
@@ -117,7 +142,7 @@ module Geet
117
142
  # The result is in the format `git@github.com:donaldduck/geet.git`
118
143
  #
119
144
  def remote(name)
120
- remote_url = execute_command("git #{gitdir_option} ls-remote --get-url #{name}")
145
+ remote_url = execute_git_command("ls-remote --get-url #{name}")
121
146
 
122
147
  if remote_url == name
123
148
  raise "Remote #{name.inspect} not found!"
@@ -132,7 +157,7 @@ module Geet
132
157
  # purposes, any any action that needs to work with the remote, uses #remote.
133
158
  #
134
159
  def remote_defined?(name)
135
- remote_url = execute_command("git #{gitdir_option} ls-remote --get-url #{name}")
160
+ remote_url = execute_git_command("ls-remote --get-url #{name}")
136
161
 
137
162
  # If the remote is not define, `git ls-remote` will return the passed value.
138
163
  remote_url != name
@@ -142,12 +167,32 @@ module Geet
142
167
  # OPERATION APIS
143
168
  ##########################################################################
144
169
 
170
+ def checkout(branch)
171
+ execute_git_command("checkout #{branch.shellescape}")
172
+ end
173
+
174
+ # Unforced deletion.
175
+ #
176
+ def delete_branch(branch)
177
+ execute_git_command("branch --delete #{branch.shellescape}")
178
+ end
179
+
180
+ def rebase
181
+ execute_git_command("rebase")
182
+ end
183
+
145
184
  # upstream_branch: create an upstream branch.
146
185
  #
147
186
  def push(upstream_branch: nil)
148
187
  upstream_branch_option = "-u origin #{upstream_branch.shellescape}" if upstream_branch
149
188
 
150
- execute_command("git #{gitdir_option} push #{upstream_branch_option}")
189
+ execute_git_command("push #{upstream_branch_option}")
190
+ end
191
+
192
+ # Performs pruning.
193
+ #
194
+ def fetch
195
+ execute_git_command("fetch --prune")
151
196
  end
152
197
 
153
198
  ##########################################################################
@@ -156,8 +201,13 @@ module Geet
156
201
 
157
202
  private
158
203
 
159
- def gitdir_option
160
- "-C #{@location.shellescape}" if @location
204
+ # If executing a git command without calling this API, don't forget to split `gitdir_option`
205
+ # and use it!
206
+ #
207
+ def execute_git_command(command)
208
+ gitdir_option = "-C #{@location.shellescape}" if @location
209
+
210
+ execute_command("git #{gitdir_option} #{command}")
161
211
  end
162
212
  end
163
213
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Geet
4
- VERSION = '0.3.15'
4
+ VERSION = '0.3.16'
5
5
  end
@@ -5,12 +5,25 @@ require 'spec_helper'
5
5
  require_relative '../../lib/geet/git/repository'
6
6
  require_relative '../../lib/geet/services/merge_pr'
7
7
 
8
+ # Currently disabled: it requires updates following the addition of the automatic removal of the local
9
+ # branch.
10
+ # Specifically, `GitClient#upstream_branch_gone?` needs to be handled, since it returns the current
11
+ # branch, while it's supposed to return
12
+ #
8
13
  describe Geet::Services::MergePr do
9
14
  let(:git_client) { Geet::Utils::GitClient.new }
10
15
  let(:repository) { Geet::Git::Repository.new(git_client: git_client) }
11
16
  let(:owner) { 'donaldduck' }
12
17
  let(:branch) { 'mybranch' }
13
18
 
19
+ before :each do
20
+ expect(git_client).to receive(:fetch)
21
+ expect(git_client).to receive(:upstream_branch_gone?).and_return(true)
22
+ expect(git_client).to receive(:checkout).with('master')
23
+ expect(git_client).to receive(:rebase)
24
+ expect(git_client).to receive(:delete_branch).with('mybranch')
25
+ end
26
+
14
27
  context 'with github.com' do
15
28
  let(:repository_name) { 'testrepo_upstream' }
16
29
 
@@ -22,6 +35,10 @@ describe Geet::Services::MergePr do
22
35
  expected_output = <<~STR
23
36
  Finding PR with head (#{owner}:#{branch})...
24
37
  Merging PR ##{expected_pr_number}...
38
+ Fetching repository...
39
+ Checking out master...
40
+ Rebasing...
41
+ Deleting local branch mybranch...
25
42
  STR
26
43
 
27
44
  actual_output = StringIO.new
@@ -44,7 +61,11 @@ describe Geet::Services::MergePr do
44
61
  expected_output = <<~STR
45
62
  Finding PR with head (#{owner}:#{branch})...
46
63
  Merging PR ##{expected_pr_number}...
47
- Deleting branch #{branch}...
64
+ Deleting remote branch #{branch}...
65
+ Fetching repository...
66
+ Checking out master...
67
+ Rebasing...
68
+ Deleting local branch mybranch...
48
69
  STR
49
70
 
50
71
  actual_output = StringIO.new
@@ -71,6 +92,10 @@ describe Geet::Services::MergePr do
71
92
  expected_output = <<~STR
72
93
  Finding PR with head (#{owner}:#{branch})...
73
94
  Merging PR ##{expected_pr_number}...
95
+ Fetching repository...
96
+ Checking out master...
97
+ Rebasing...
98
+ Deleting local branch mybranch...
74
99
  STR
75
100
 
76
101
  actual_output = StringIO.new
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.3.15
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saverio Miroddi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-03 00:00:00.000000000 Z
11
+ date: 2020-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_scripting
@@ -101,6 +101,7 @@ files:
101
101
  - lib/geet/helpers/summary_helper.rb
102
102
  - lib/geet/resources/templates/edit_summary.md
103
103
  - lib/geet/services/abstract_create_issue.rb
104
+ - lib/geet/services/close_milestones.rb
104
105
  - lib/geet/services/comment_pr.rb
105
106
  - lib/geet/services/create_gist.rb
106
107
  - lib/geet/services/create_issue.rb
@@ -113,6 +114,7 @@ files:
113
114
  - lib/geet/services/list_prs.rb
114
115
  - lib/geet/services/merge_pr.rb
115
116
  - lib/geet/services/open_pr.rb
117
+ - lib/geet/shared/branches.rb
116
118
  - lib/geet/shared/http_error.rb
117
119
  - lib/geet/shared/repo_permissions.rb
118
120
  - lib/geet/shared/selection.rb
@@ -185,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
187
  - !ruby/object:Gem::Version
186
188
  version: '0'
187
189
  requirements: []
188
- rubygems_version: 3.0.6
190
+ rubygems_version: 3.0.8
189
191
  signing_key:
190
192
  specification_version: 4
191
193
  summary: Commandline interface for performing SCM host operations, eg. create a PR