From 899e04082e9c8773dce745744e60bd5440b1bc52 Mon Sep 17 00:00:00 2001 From: "Harrison (Harry) Cramer" <32515581+harrisoncramer@users.noreply.github.com> Date: Sat, 22 Apr 2023 13:53:58 -0400 Subject: [PATCH] Develop (#3) Moves build script into separate function and sets up instructions for Packer installs. --- README.md | 29 ++++++++++++++--- lua/gitlab/init.lua | 78 +++++++++++++++++++++++++++++---------------- 2 files changed, 75 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 48fd971..e90abe8 100644 --- a/README.md +++ b/README.md @@ -37,9 +37,30 @@ return { "MunifTanjim/nui.nvim", "nvim-lua/plenary.nvim" }, + build = function () require("gitlab").build() end, -- Builds the Go binary config = function() - local gitlab = require("gitlab") - gitlab.setup({ project_id = 3 }) -- This can be found under the project details section of your Gitlab repository. + vim.opt.termguicolors = true -- This is required if you aren't already initializing notify + require("notify").setup({ background_colour = "#000000" }) -- This is required if you aren't already initializing notify + require("gitlab").setup({ project_id = 3 }) -- This can be found under the project details section of your Gitlab repository. + end, +} +``` + +And with Packer: + +```lua +use { + 'harrisoncramer/gitlab.nvim', + requires = { + "rcarriga/nvim-notify", + "MunifTanjim/nui.nvim", + "nvim-lua/plenary.nvim" + }, + run = function() require("gitlab").build() end, + config = function() + vim.opt.termguicolors = true -- This is required if you aren't already initializing notify + require("notify").setup({ background_colour = "#000000" }) -- This is required if you aren't already initializing notify + require("gitlab").setup({ project_id = 3 }) -- This can be found under the project details section of your Gitlab repository. end, } ``` @@ -50,11 +71,9 @@ By default, the tool will look for and interact with MRs against a "main" branch require('gitlab').setup({ project_id = 3, base_branch = 'master' }) ``` -The first time you call the setup function the Go binary will be built. - ## Usage -First, check out the branch that you want to review locally. +First, check out the branch that you want to review locally. Then open Neovim and the reviewer will be initialized. The `project_id` you specify in your configuration must match the project_id of the Gitlab project your terminal is inside of. The `summary` command will pull down the MR description into a buffer so that you can read it: diff --git a/lua/gitlab/init.lua b/lua/gitlab/init.lua index c28e56e..ddd646e 100644 --- a/lua/gitlab/init.lua +++ b/lua/gitlab/init.lua @@ -1,52 +1,71 @@ -local Job = require("plenary.job") -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 approve = require("gitlab.approve") -local revoke = require("gitlab.revoke") -local u = require("gitlab.utils") +local Job = require("plenary.job") +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 approve = require("gitlab.approve") +local revoke = require("gitlab.revoke") +local u = require("gitlab.utils") -- Root Module Scope -local M = {} -M.summary = summary.summary -M.approve = approve.approve -M.revoke = revoke.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 = approve.approve +M.revoke = revoke.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 -local projectData = {} -local function current_file_path() - local path = debug.getinfo(1, 'S').source:sub(2) - return vim.fn.fnamemodify(path, ':p') +local projectData = {} + +M.build = function(args) + if args == nil then args = {} end + 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) + end end -M.setup = function(args) - local file_path = current_file_path() +M.setup = function(args, build_only) + local file_path = M.current_file_path() local parent_dir = vim.fn.fnamemodify(file_path, ":h:h:h") - state.BIN_PATH = parent_dir state.BIN = parent_dir .. "/bin" + 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 - notify("Could not install gitlab.nvim! Do you have Go installed?", "error") + 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 + end + + if build_only then return end + if args.project_id == nil then error("No project ID provided!") end + state.PROJECT_ID = args.project_id if args.base_branch ~= nil then @@ -77,4 +96,9 @@ M.setup = function(args) keymaps.set_keymap_keys(args.keymaps) end +M.current_file_path = function() + local path = debug.getinfo(1, 'S').source:sub(2) + return vim.fn.fnamemodify(path, ':p') +end + return M