Post MR cleanup (better error handling, comments, etc)

This commit is contained in:
Harrison Cramer
2023-05-20 09:42:00 -07:00
parent 27ec4668c1
commit f5038656a9
3 changed files with 53 additions and 72 deletions

View File

@@ -1,103 +1,88 @@
local curl = require("plenary.curl")
local state = require("gitlab.state")
local notify = require("notify")
local discussions = require("gitlab.discussions")
local summary = require("gitlab.summary")
local keymaps = require("gitlab.keymaps")
local comment = require("gitlab.comment")
local job = require("gitlab.job")
local u = require("gitlab.utils")
local curl = require("plenary.curl")
local state = require("gitlab.state")
local notify = require("notify")
local discussions = require("gitlab.discussions")
local summary = require("gitlab.summary")
local keymaps = require("gitlab.keymaps")
local comment = require("gitlab.comment")
local job = require("gitlab.job")
local u = require("gitlab.utils")
-- Root Module Scope
local M = {}
M.summary = summary.summary
M.approve = job.approve
M.revoke = job.revoke
M.create_comment = comment.create_comment
M.list_discussions = discussions.list_discussions
M.edit_comment = comment.edit_comment
M.delete_comment = comment.delete_comment
M.reply = discussions.reply
local M = {}
M.summary = summary.summary
M.approve = job.approve
M.revoke = job.revoke
M.create_comment = comment.create_comment
M.list_discussions = discussions.list_discussions
M.edit_comment = comment.edit_comment
M.delete_comment = comment.delete_comment
M.reply = discussions.reply
-- Builds the Go binary, initializes the plugin, fetches MR info
M.build = function(args)
if args == nil then args = {} end
-- Builds the Go binary
local function build_binary()
local command = string.format("cd %s && make", state.BIN_PATH)
local installCode = os.execute(command .. "> /dev/null")
if installCode ~= 0 then
notify("Could not install gitlab.nvim!", "error")
return
else
M.setup(args, true)
return false
end
return true
end
M.setup = function(args, build_only)
local file_path = M.current_file_path()
local parent_dir = vim.fn.fnamemodify(file_path, ":h:h:h")
-- Setups up the binary (if not built), starts the Go server, and calls the /info endpoint,
-- which sets the Gitlab project's information in gitlab.nvim's state module
M.setup = function(args)
local file_path = u.current_file_path()
local parent_dir = vim.fn.fnamemodify(file_path, ":h:h:h:h")
state.BIN_PATH = parent_dir
state.BIN = parent_dir .. "/bin"
if args == nil then args = {} end
if args.dev == true then
M.build(args)
end
local binExists = io.open(state.BIN, "r")
if not binExists or args.dev == true then
local command = string.format("cd %s && make", state.BIN_PATH)
local installCode = os.execute(command .. "> /dev/null")
if installCode ~= 0 then
require("notify")("Could not install gitlab.nvim! Do you have Go installed?", "error")
return
end
end
local binary_exists = vim.loop.fs_stat(state.BIN)
if binary_exists == nil then
return -- Ensure build function completes before initializing plugin
build_binary()
end
if build_only then return end
local config_file_path = vim.fn.getcwd() .. "/.gitlab.nvim"
local config_file_content = u.read_file(config_file_path)
if config_file_content == nil then
return
end
args.project_id = config_file_content
if args.project_id == nil then
args.project_id = u.read_file(state.BIN_PATH .. "/.gitlab/project_id")
state.PROJECT_ID = config_file_content
if state.PROJECT_ID == nil then
error("No project ID provided!")
end
state.PROJECT_ID = args.project_id
if type(tonumber(state.PROJECT_ID)) ~= 'number' then
error("The .gitlab.nvim project file may only contain a project number")
end
if args.base_branch ~= nil then
state.BASE_BRANCH = args.base_branch
end
local error_message = "Failed to set up gitlab.nvim, could not get project information."
if u.is_gitlab_repo() then
state.PORT = args.port or 21036
vim.fn.jobstart(state.BIN .. " " .. state.PROJECT_ID .. " " .. state.PORT, {
on_stdout = function(job_id)
if job_id <= 0 then
notify(error_message, "error")
notify("Could not start gitlab.nvim binary", "error")
return
else
local response_ok, response = pcall(curl.get, "localhost:" .. state.PORT .. "/info",
{ timeout = 750 })
if response == nil or not response_ok then
notify(error_message, "error")
notify("The gitlab.nvim server did not respond", "error")
return
end
local body = response.body
local parsed_ok, data = pcall(vim.json.decode, body)
if parsed_ok ~= true then
notify(error_message, "error")
notify("The gitlab.nvim server returned an invalid response to the /info endpoint", "error")
return
end
state.INFO = data
@@ -109,9 +94,4 @@ M.setup = function(args, build_only)
end
end
M.current_file_path = function()
local path = debug.getinfo(1, 'S').source:sub(2)
return vim.fn.fnamemodify(path, ':p')
end
return M

View File

@@ -239,6 +239,12 @@ local split_diff_view_filename = function(filename)
return hash, path
end
local current_file_path = function()
local path = debug.getinfo(1, 'S').source:sub(2)
return vim.fn.fnamemodify(path, ':p')
end
M.get_relative_file_path = get_relative_file_path
M.get_current_line_number = get_current_line_number
M.get_buffer_text = get_buffer_text
@@ -259,5 +265,6 @@ M.exit = exit
M.read_file = read_file
M.split_diff_view_filename = split_diff_view_filename
M.branch_exists = branch_exists
M.current_file_path = current_file_path
M.P = P
return M