mirror of
https://github.com/LazyVim/LazyVim.git
synced 2026-07-25 14:01:06 +00:00
improve ssh remote url supported
This commit is contained in:
parent
12818a6cb4
commit
f9e040cc09
1 changed files with 47 additions and 4 deletions
|
|
@ -186,15 +186,58 @@ function M.browse()
|
||||||
local lines = require("lazy.manage.process").exec({ "git", "remote", "-v" })
|
local lines = require("lazy.manage.process").exec({ "git", "remote", "-v" })
|
||||||
local remotes = {} ---@type {name:string, url:string}[]
|
local remotes = {} ---@type {name:string, url:string}[]
|
||||||
|
|
||||||
|
--- @param url string
|
||||||
|
local function getRemoteURLFromSSH(url)
|
||||||
|
local SSHConfigPath = vim.env.HOME .. "/.ssh/config"
|
||||||
|
|
||||||
|
-- Return the original URL if SSH config is not found or not readable
|
||||||
|
if not vim.uv.fs_access(SSHConfigPath, "R") then
|
||||||
|
return url
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle SSH config remotes
|
||||||
|
local file = io.open(SSHConfigPath, "r")
|
||||||
|
|
||||||
|
-- Return the original URL if unable to read SSH config file
|
||||||
|
if not file then
|
||||||
|
return url
|
||||||
|
end
|
||||||
|
|
||||||
|
local currentHost, hostGroup = "", {}
|
||||||
|
for line in file:lines() do
|
||||||
|
line = line:match("^%s*(.-)%s*$")
|
||||||
|
|
||||||
|
if line ~= "" and not line:match("^#") then
|
||||||
|
local key, value = line:match("^(%S+)%s+(.+)$")
|
||||||
|
|
||||||
|
if key:lower() == "host" then
|
||||||
|
-- process url before parse next group of host if match we could close file and early return
|
||||||
|
if currentHost ~= "" and currentHost ~= value and url:match(currentHost .. ":") then
|
||||||
|
file:close()
|
||||||
|
-- If the username is specified, we do not need to replace it; otherwise, replace the username with "git".
|
||||||
|
local searchString = hostGroup[currentHost].User and currentHost .. ":" or "git@" .. currentHost .. ":"
|
||||||
|
local destinationURL = string.format("https://%s/", hostGroup[currentHost].HostName)
|
||||||
|
return url:gsub(searchString, destinationURL):gsub("%.git$", "")
|
||||||
|
end
|
||||||
|
-- Setup group of host
|
||||||
|
currentHost = value
|
||||||
|
hostGroup[currentHost] = {}
|
||||||
|
elseif currentHost then
|
||||||
|
hostGroup[currentHost][key] = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
|
||||||
for _, line in ipairs(lines) do
|
for _, line in ipairs(lines) do
|
||||||
local name, remote = line:match("(%S+)%s+(%S+)%s+%(fetch%)")
|
local name, remote = line:match("(%S+)%s+(%S+)%s+%(fetch%)")
|
||||||
if name and remote then
|
if name and remote then
|
||||||
local url = M.get_url(remote)
|
local url = M.get_url(remote)
|
||||||
if url then
|
if url then
|
||||||
table.insert(remotes, {
|
table.insert(remotes, { name = name, url = url })
|
||||||
name = name,
|
else
|
||||||
url = url,
|
table.insert(remotes, { name = name, url = getRemoteURLFromSSH(remote) })
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue