local M = {} local function merge_base() return vim.fn.system("git merge-base origin/main HEAD"):gsub("%s+", "") end function M.files() local base = merge_base() require("fzf-lua").fzf_exec("git diff --name-only " .. base .. "...HEAD", { prompt = "MR files> ", actions = { ["default"] = function(selected) vim.cmd("edit " .. selected[1]) require("gitsigns").diffthis(base) end, }, }) end function M.commits() local base = merge_base() require("fzf-lua").fzf_exec("git log --oneline " .. base .. "..HEAD", { prompt = "MR commits> ", actions = { ["default"] = function(selected) local sha = selected[1]:match("^(%S+)") require("fzf-lua").fzf_exec("git diff --name-only " .. sha .. "~1.." .. sha, { prompt = sha:sub(1, 7) .. " files> ", actions = { ["default"] = function(files) vim.cmd("edit " .. files[1]) require("gitsigns").diffthis(sha .. "~1") end, }, }) end, }, }) end vim.api.nvim_create_user_command("MRFiles", M.files, {}) vim.api.nvim_create_user_command("MRCommits", M.commits, {}) return M