[Bug] Providing git rev shows changes beyond revision
Description
From the README.
You can also provide any valid git rev to view only changes for that rev.
From reading this, providing a git revision such as a SHA1 should only show changes provided by that change and that change only. However I'm seeing that it shows the difference against the HEAD, which if you go far back makes the diff seem huge.
I did a quick initial triage and it seems to be because in the function diffview_open, the right parameter is always set to LOCAL when only the SHA1 is given.
Expected behavior
No response
Actual behavior
Providing the valid git rev, SHA1 in this case, should show only the changes that occurred for that revision.
Steps to reproduce
- Clone down a git repo of your choosing
- Pick any commit that isn't the most recent commit (preferably an older one)
- run
nvim -u mini.luawith the provided minimal config below - Run DiffviewOpen <SHA1>
- Compare the diffview with what git said was changed in the commit.
- Confirm that they're different
Health check
Output of :checkhealth diffview
diffview: require("diffview.health").check()
Checking plugin dependencies ~
- OK nvim-web-devicons installed.
Checking VCS tools ~
- The plugin requires at least one of the supported VCS tools to be valid.
- OK Git found.
- OK Git is up-to-date. (2.39.3)
- WARNING Configured `hg_cmd` is not executable: 'hg'
Log info
Relevant info from :DiffviewLog
############################
### PUT LOG CONTENT HERE ###
############################
Neovim version
NVIM v0.10.0-dev-2849+g4946489e2
Build type: RelWithDebInfo
LuaJIT 2.1.1710088188
Run "nvim -V1 -v" for more info
Operating system and version
Darwin 23.5.0 arm64
Minimal config
-- #######################################
-- ### USAGE: nvim --clean -u mini.lua ###
-- #######################################
local root = vim.fn.stdpath("run") .. "/nvim/diffview.nvim"
local plugin_dir = root .. "/plugins"
vim.fn.mkdir(plugin_dir, "p")
for _, name in ipairs({ "config", "data", "state", "cache" }) do
vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end
local plugins = {
{ "nvim-web-devicons", url = "https://github.com/nvim-tree/nvim-web-devicons.git" },
{ "diffview.nvim", url = "https://github.com/sindrets/diffview.nvim.git" },
-- ##################################################################
-- ### ADD PLUGINS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE ###
-- ##################################################################
}
for _, spec in ipairs(plugins) do
local install_path = plugin_dir .. "/" .. spec[1]
if vim.fn.isdirectory(install_path) ~= 1 then
if spec.url then
print(string.format("Installing '%s'...", spec[1]))
vim.fn.system({ "git", "clone", "--depth=1", spec.url, install_path })
end
end
vim.opt.runtimepath:append(spec.path or install_path)
end
require("diffview").setup({
-- ##############################################################################
-- ### ADD DIFFVIEW.NVIM CONFIG THAT IS _NECESSARY_ FOR REPRODUCING THE ISSUE ###
-- ##############################################################################
})
vim.opt.termguicolors = true
vim.cmd("colorscheme " .. (vim.fn.has("nvim-0.8") == 1 and "habamax" or "slate"))
-- ############################################################################
-- ### ADD INIT.LUA SETTINGS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE ###
-- ############################################################################
print("Ready!")
Easy workaround in the meantime is to just use command DiffviewOpen <SHA1>~1..<SHA1>. Thank you for the plugin! I think it's pretty great.
I find this a little annoying as well. commit^! or <SHA1>~1..<SHA1> just don't feel very ergonomic, and the former isn't very common imo. I'm guessing they are replicating the behavior of git diff as opposed to git show in this case. With that said, this probably isn't a bug, but the docs could be clarified.