class Gl::MergeRequests
Public Instance Methods
approve(iid = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 44 def approve(iid = nil) iid ||= merge_request_dialogue begin Gitlab.approve_merge_request(Gl.current_project, iid) rescue Gitlab::Error::Unauthorized TTY::Prompt.new.error('Unable to approve merge request') end end
label(label)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 59 def label(label) label_action(label) end
list(project = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 7 def list(project = nil) if options[:i] id = merge_request_dialogue(project) mr = merge_requests.select { |merge_request| merge_request.iid == id.to_i }.first box = TTY::Box.frame( width: TTY::Screen.width, height: mr.description.lines.count + 4, padding: 1, title: { top_center: mr.title[0..TTY::Screen.width - 3], bottom_left: "State: #{mr.state}", bottom_right: "by #{mr.author.name}" } ) do mr.description end puts box choice = TTY::Prompt.new(interrupt: :exit).select('What to do next?') do |menu| menu.choice :open menu.choice :merge menu.choice :approve menu.choice :exit end case choice.to_sym when :open then open_mr_in_browser(mr.iid) when :merge then merge(mr.iid) when :approve then approve(mr.iid) when :exit then exit end else table = TTY::Table.new(%w[IID Author Title], merge_requests_list(project)) puts table.render(:ascii, padding: [0, 1]) end end
merge(iid = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 71 def merge(iid = nil) iid ||= merge_request_dialogue.split(' - ')[0] Gitlab.accept_merge_request(Gl.current_project, iid, squash: options['squash'], should_remove_source_branch: options['delete-branch']) rescue Gitlab::Error::MethodNotAllowed => e TTY::Prompt.new.error( case e.response_status when 405 'Unable to accept merge request ' \ '(ie: Work in Progress, Closed, Pipeline Pending Completion, ' \ 'or Failed while requiring Success)' else "Could not merge due to unknown error: #{e.response_status}" end ) end
open(iid = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 54 def open(iid = nil) open_mr_in_browser(iid) end
unlabel(label)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 64 def unlabel(label) label_action(label) end
Private Instance Methods
label_action(label)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 96 def label_action(label) id = merge_request_dialogue action = caller_locations(1, 1)[0].label begin Gitlab.create_merge_request_note(Gl.current_project, id, "/#{action} ~\"#{label}\"") rescue Gitlab::Error::BadRequest true end end
merge_request_dialogue(project = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 109 def merge_request_dialogue(project = nil) prompt = TTY::Prompt.new(interrupt: :exit) prompt.select('Select a merge request', filter: true) do |menu| merge_requests_list(project).each do |merge_request| menu.choice merge_request.join(' - '), merge_request[0] end end end
merge_requests(project = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 126 def merge_requests(project = nil) @merge_requests ||= begin Gitlab.merge_requests(Gl.current_project(project), state: :opened).auto_paginate end end
merge_requests_list(project = nil)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 118 def merge_requests_list(project = nil) @merge_requests_list ||= begin merge_requests(project).map do |mr| [mr.iid, mr.author.name, mr.title] end end end
open_mr_in_browser(iid)
click to toggle source
# File lib/gl/cli/merge_requests.rb, line 92 def open_mr_in_browser(iid) Gl.open_in_browser("#{Gl.current_project}/merge_requests/#{iid}") end