diff --git a/lua/snacks/picker/config/sources.lua b/lua/snacks/picker/config/sources.lua index 96718796..331b5704 100644 --- a/lua/snacks/picker/config/sources.lua +++ b/lua/snacks/picker/config/sources.lua @@ -333,7 +333,8 @@ M.git_status = { }, } ----@type snacks.picker.git.Config +---@class snacks.picker.git.diff.Config: snacks.picker.git.Config +---@field base? string base commit/branch/tag to diff against (default: HEAD) M.git_diff = { finder = "git_diff", format = "file", diff --git a/lua/snacks/picker/source/git.lua b/lua/snacks/picker/source/git.lua index 587a5554..7ea763de 100644 --- a/lua/snacks/picker/source/git.lua +++ b/lua/snacks/picker/source/git.lua @@ -253,11 +253,14 @@ function M.status(opts, ctx) }, ctx) end ----@param opts snacks.picker.git.Config +---@param opts snacks.picker.git.diff.Config ---@type snacks.picker.finder function M.diff(opts, ctx) local args = M.git("diff", "--no-color", "--no-ext-diff", { args = { "-c", "diff.noprefix=false", "--no-pager" } }, opts) + if opts.base then + vim.list_extend(args, { "--merge-base", opts.base }) + end local file, line ---@type string?, number? local header, hunk = {}, {} ---@type string[], string[] local header_len = 4