Feat: Remove Requirement for Dotfile (#84)
This MR removes the requirement for a dotfile (the dotfile is now optional and will override the configuration provided via environment variables). The requirement for providing a project ID is also eliminated, by parsing the namespace and project name from the SSH or HTTPS remote, and then using that to query Gitlab for a matching project.
This commit is contained in:
committed by
GitHub
parent
38df51bfbc
commit
80b597e56a
@@ -3,7 +3,6 @@
|
||||
local server = require("gitlab.server")
|
||||
local job = require("gitlab.job")
|
||||
local state = require("gitlab.state")
|
||||
local u = require("gitlab.utils")
|
||||
|
||||
local M = {}
|
||||
|
||||
@@ -48,9 +47,11 @@ M.sequence = function(dependencies, cb)
|
||||
local handler = async:new()
|
||||
handler:init(cb)
|
||||
|
||||
if not state.is_gitlab_project then
|
||||
u.notify("The gitlab.nvim state was not set. Do you have a .gitlab.nvim file configured?", vim.log.levels.ERROR)
|
||||
return
|
||||
-- Sets configuration for plugin, if not already set
|
||||
if not state.initialized then
|
||||
if not state.setPluginConfiguration() then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if state.go_server_running then
|
||||
|
||||
@@ -21,10 +21,7 @@ return {
|
||||
args = {}
|
||||
end
|
||||
server.build() -- Builds the Go binary if it doesn't exist
|
||||
state.setPluginConfiguration() -- Sets configuration from `.gitlab.nvim` file
|
||||
if not state.merge_settings(args) then -- Sets keymaps and other settings from setup function
|
||||
return
|
||||
end
|
||||
state.merge_settings(args) -- Sets keymaps and other settings from setup function
|
||||
require("gitlab.colors") -- Sets colors
|
||||
reviewer.init()
|
||||
end,
|
||||
|
||||
@@ -12,8 +12,6 @@ M.start = function(callback)
|
||||
local parsed_port = nil
|
||||
local callback_called = false
|
||||
local command = state.settings.bin
|
||||
.. " "
|
||||
.. state.settings.project_id
|
||||
.. " "
|
||||
.. state.settings.gitlab_url
|
||||
.. " "
|
||||
@@ -47,8 +45,6 @@ M.start = function(callback)
|
||||
if parsed_port ~= nil and not callback_called then
|
||||
callback()
|
||||
callback_called = true
|
||||
elseif not callback_called then
|
||||
u.notify("Failed to parse server port", vim.log.levels.ERROR)
|
||||
end
|
||||
end,
|
||||
on_stderr = function(_, errors)
|
||||
|
||||
@@ -92,40 +92,39 @@ M.print_settings = function()
|
||||
u.P(M.settings)
|
||||
end
|
||||
|
||||
-- Merges `.gitlab.nvim` settings into the state module
|
||||
-- First reads environment variables into the settings module,
|
||||
-- then attemps to read a `.gitlab.nvim` configuration file.
|
||||
-- If after doing this, any variables are missing, alerts the user.
|
||||
-- The `.gitlab.nvim` configuration file takes precedence.
|
||||
M.setPluginConfiguration = function()
|
||||
if M.initialized then
|
||||
return true
|
||||
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 false
|
||||
end
|
||||
|
||||
M.is_gitlab_project = true
|
||||
|
||||
local file = assert(io.open(config_file_path, "r"))
|
||||
local properties = {}
|
||||
for line in file:lines() do
|
||||
for key, value in string.gmatch(line, "(.-)=(.-)$") do
|
||||
properties[key] = value
|
||||
local file_properties = {}
|
||||
if config_file_content ~= nil then
|
||||
local file = assert(io.open(config_file_path, "r"))
|
||||
for line in file:lines() do
|
||||
for key, value in string.gmatch(line, "(.-)=(.-)$") do
|
||||
file_properties[key] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
M.settings.project_id = properties.project_id
|
||||
M.settings.auth_token = properties.auth_token or os.getenv("GITLAB_TOKEN")
|
||||
M.settings.gitlab_url = properties.gitlab_url or "https://gitlab.com"
|
||||
M.settings.auth_token = file_properties.auth_token or os.getenv("GITLAB_TOKEN")
|
||||
M.settings.gitlab_url = file_properties.gitlab_url or os.getenv("GITLAB_URL") or "https://gitlab.com"
|
||||
|
||||
if M.settings.auth_token == nil then
|
||||
error("Missing authentication token for Gitlab")
|
||||
end
|
||||
|
||||
if M.settings.project_id == nil then
|
||||
error("Missing project ID in .gitlab.nvim file.")
|
||||
end
|
||||
|
||||
if type(tonumber(M.settings.project_id)) ~= "number" then
|
||||
error("The .gitlab.nvim project file's 'project_id' must be number")
|
||||
vim.notify(
|
||||
"Missing authentication token for Gitlab, please provide it as an environment variable or in the .gitlab.nvim file",
|
||||
vim.log.levels.ERROR
|
||||
)
|
||||
return false
|
||||
end
|
||||
|
||||
M.initialized = true
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user