- allows SSH Gitlab connection to have custom port - introduces temporary registers - fixes issue w/ quitting the popup on MR creation This is a #MINOR release
57 lines
1.7 KiB
Lua
57 lines
1.7 KiB
Lua
local u = require("gitlab.utils")
|
|
local Popup = require("nui.popup")
|
|
local state = require("gitlab.state")
|
|
local job = require("gitlab.job")
|
|
local reviewer = require("gitlab.reviewer")
|
|
local miscellaneous = require("gitlab.actions.miscellaneous")
|
|
|
|
local M = {}
|
|
|
|
local function create_squash_message_popup()
|
|
return Popup(u.create_popup_state("Squash Commit Message", state.settings.popup.squash_message))
|
|
end
|
|
|
|
---@class MergeOpts
|
|
---@field delete_branch boolean?
|
|
---@field squash boolean?
|
|
---@field squash_message string?
|
|
|
|
---@param opts MergeOpts
|
|
M.merge = function(opts)
|
|
local merge_body = { squash = state.INFO.squash, delete_branch = state.INFO.delete_branch }
|
|
if opts then
|
|
merge_body.squash = opts.squash ~= nil and opts.squash
|
|
merge_body.delete_branch = opts.delete_branch ~= nil and opts.delete_branch
|
|
end
|
|
|
|
if state.INFO.detailed_merge_status ~= "mergeable" then
|
|
u.notify(string.format("MR not mergeable, currently '%s'", state.INFO.detailed_merge_status), vim.log.levels.ERROR)
|
|
return
|
|
end
|
|
|
|
if merge_body.squash then
|
|
local squash_message_popup = create_squash_message_popup()
|
|
squash_message_popup:mount()
|
|
state.set_popup_keymaps(squash_message_popup, function(text)
|
|
M.confirm_merge(merge_body, text)
|
|
end, nil, miscellaneous.editable_popup_opts)
|
|
else
|
|
M.confirm_merge(merge_body)
|
|
end
|
|
end
|
|
|
|
---@param merge_body MergeOpts
|
|
---@param squash_message string?
|
|
M.confirm_merge = function(merge_body, squash_message)
|
|
if squash_message ~= nil then
|
|
merge_body.squash_message = squash_message
|
|
end
|
|
|
|
job.run_job("/mr/merge", "POST", merge_body, function(data)
|
|
reviewer.close()
|
|
u.notify(data.message, vim.log.levels.INFO)
|
|
end)
|
|
end
|
|
|
|
return M
|