openingh.nvim/lua/openingh/init.lua

132 lines
3.6 KiB
Lua
Raw Normal View History

2024-10-21 15:18:22 +01:00
local remote_format_file = "%s/blob/%s%s"
local bb_remote_format_file = "%s/src/%s%s"
local forgejo_remote_format_file = "%s/src/%s%s"
local remote_format_branch = "%s/tree/%s"
local bb_remote_format_branch = "%s/branch/%s"
local bb_remote_format_commit = "%s/commits/%s"
local forgejo_remote_format_branch = "%s/src/branch/%s"
local forgejo_remote_format_commit = "%s/commit/%s"
local utils = require("openingh.utils")
local M = {}
2022-09-25 23:53:23 +03:00
function M.setup()
-- get the current working directory and set the url
2023-12-15 17:30:24 +01:00
local current_buffer = vim.fn.expand("%:p:h"):gsub("%[", "\\["):gsub("%]", "\\]")
2022-10-10 01:16:44 +03:00
local repo_url = vim.fn.system("git -C " .. current_buffer .. " config --get remote.origin.url")
if repo_url:len() == 0 then
M.is_no_git_origin = true
vim.g.openingh = false
return
end
2024-10-21 14:45:37 +01:00
local remote = utils.parse_remote(repo_url)
if remote == nil then
print("Error parsing remote URL")
vim.g.openingh = false
return
end
2024-10-21 14:45:37 +01:00
M.repo_url = string.format("http://%s/%s/%s", remote.host, remote.user_or_org, remote.reponame)
2024-10-21 15:18:22 +01:00
if string.find(M.repo_url, "bitbucket") then
M.remote = M.remotes.BB
M.format_file = bb_remote_format_file
M.format_branch = bb_remote_format_branch
M.format_commit = bb_remote_format_commit
elseif string.find(M.repo_url, "forgejo") or string.find(M.repo_url, "gitea") then
M.remote = M.remotes.FORGEJO
M.format_file = forgejo_remote_format_file
M.format_branch = forgejo_remote_format_branch
M.format_commit = forgejo_remote_format_commit
else
M.remote = M.remotes.GH
M.format_file = remote_format_file
M.format_branch = remote_format_branch
M.format_commit = remote_format_branch
end
end
2023-12-29 18:11:14 -06:00
M.priority = { BRANCH = 1, COMMIT = 2 }
2024-10-21 15:18:22 +01:00
M.remotes = { GH = 1, BB = 2, FORGEJO = 3 }
2023-06-18 06:48:17 +09:00
local function get_current_branch_or_commit_with_priority(priority)
if priority == M.priority.BRANCH then
return utils.get_current_branch_or_commit()
2023-06-18 06:48:17 +09:00
elseif priority == M.priority.COMMIT then
return utils.get_current_commit_or_branch()
else
return utils.get_current_branch_or_commit()
end
end
function M.get_file_url(
priority,
--[[optional]]
2023-12-29 18:11:14 -06:00
branch,
--[[optional]]
range_start,
--[[optional]]
range_end
)
-- make sure to update the current directory
M.setup()
if M.is_no_git_origin then
utils.print_no_remote_message()
return
end
local file_path = utils.get_current_relative_file_path()
-- if there is no buffer opened
if file_path == "/" then
utils.notify("There is no active file to open!", vim.log.levels.ERROR)
return
end
2023-12-29 18:11:14 -06:00
local rev = get_current_branch_or_commit_with_priority(priority)
if branch ~= nil then
rev = branch
end
2024-10-21 15:18:22 +01:00
local file_page_url = string.format(M.format_file, M.repo_url, rev, file_path)
if range_start and not range_end then
file_page_url = file_page_url .. "#L" .. range_start
end
if range_start and range_end then
file_page_url = file_page_url .. "#L" .. range_start .. "-L" .. range_end
end
2024-10-21 15:04:27 +01:00
print(string.format("Opening: %s", file_page_url))
return file_page_url
end
function M.get_repo_url(priority)
-- make sure to update the current directory
M.setup()
if M.is_no_git_origin then
utils.print_no_remote_message()
return
end
2024-10-21 15:18:22 +01:00
local url = ""
if priority == M.priority.BRANCH then
url = string.format(M.format_branch, M.repo_url, get_current_branch_or_commit_with_priority(priority))
else
url = string.format(M.format_commit, M.repo_url, get_current_branch_or_commit_with_priority(priority))
end
return url
end
function M.open_url(url)
if not utils.open_url(url) then
utils.notify("Could not open the built URL " .. url, vim.log.levels.ERROR)
2022-09-25 23:53:23 +03:00
end
end
2022-09-25 23:53:23 +03:00
return M