neogit prevents using or shows incorrect highlighting of `git commit -S`
Nobody has claimed this yet.
- Dominant language
- Lua
- Stars
- 5.6k
- Forks
- 357
- Avg merge
- 15h 47m
- Merged PRs (30d)
- 2
Description
Description
I do use per-path per-user configs in ~/.gitconfig like
[user]
email = MYMAIL
name = MyName
signingkey = MYKEY
[core]
editor = vim
[credential]
helper = cache --timeout=3600
[log]
decorate = true
[pull]
rebase = false
[core]
autocrlf = false
and git commit -v -S picks up automatically the hash of the correct key unless in neovim TTY shell for which I have a hack/workaround
function fixGpg -d "fix gpg tty via stopping, starting and updating startup tty"
set -e GPG_TTY
set -e SSH_AUTH_SOCK
gpgconf --kill gpg-agent
gpgconf --launch "gpg-agent"
set -gx GPG_TTY "$(tty)"
set -gx SSH_AUTH_SOCK $(gpgconf --list-dirs agent-ssh-socket)
gpg-connect-agent updatestartuptty /bye >/dev/null
end
Neovim version
NVIM v0.11.0-dev-1386+g8ef41f5902
Build type: RelWithDebInfo
LuaJIT 2.1.1734355927
Operating system and version
Linux pc 6.12.4-arch1-1
Steps to reproduce
- prepare staged changes
- press
c - press
-S - press enter to just get
-Sflag appended togit commit -Sbehavior
Expected behavior
-S should be colored as active flag
Actual behavior
-S is not colored as active flag
Pressing c only shows:
Arguments
-a Stage all modified and deleted files (--all)
-e Allow empty commit (--allow-empty)
-v Show diff of changes to be committed (--verbose)
-h Disable hooks (--no-verify)
-R Claim authorship and reset author date (--reset-author)
-A Override the author (--author=)
-s Add Signed-off-by line (--signoff)
-S Sign using gpg (--gpg-sign=y)
-C Reuse commit message (--reuse-message=)
and pressing -S yields gpg-sign= which I do not want to fill instead of providing a toggle like -s to just use
-S.
Minimal config
-- NOTE: See the end of this file if you are reporting an issue, etc. Ignore all the "scary" functions up top, those are
-- used for setup and other operations.
local M = {}
local base_root_path = vim.fn.fnamemodify(debug.getinfo(1, "S").source:sub(2), ":p:h") .. "/.min"
function M.root(path)
return base_root_path .. "/" .. (path or "")
end
function M.load_plugin(plugin_name, plugin_url)
local package_root = M.root("plugins/")
local install_destination = package_root .. plugin_name
vim.opt.runtimepath:append(install_destination)
if not vim.loop.fs_stat(package_root) then
vim.fn.mkdir(package_root, "p")
end
if not vim.loop.fs_stat(install_destination) then
print(string.format("> Downloading plugin '%s' to '%s'", plugin_name, install_destination))
vim.fn.system({
"git",
"clone",
"--depth=1",
plugin_url,
install_destination,
})
if vim.v.shell_error > 0 then
error(string.format("> Failed to clone plugin: '%s' in '%s'!", plugin_name, install_destination),
vim.log.levels.ERROR)
end
end
end
---@alias PluginName string The plugin name, will be used as part of the git clone destination
---@alias PluginUrl string The git url at which a plugin is located, can be a path. See https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols for details
---@alias MinPlugins table<PluginName, PluginUrl>
---Do the initial setup. Downloads plugins, ensures the minimal init does not pollute the filesystem by keeping
---everything self contained to the CWD of the minimal init file. Run prior to running tests, reproducing issues, etc.
---@param plugins? table<PluginName, PluginUrl>
function M.setup(plugins)
vim.opt.packpath = {} -- Empty the package path so we use only the plugins specified
vim.opt.runtimepath:append(M.root(".min")) -- Ensure the runtime detects the root min dir
-- Install required plugins
if plugins ~= nil then
for plugin_name, plugin_url in pairs(plugins) do
M.load_plugin(plugin_name, plugin_url)
end
end
vim.env.XDG_CONFIG_HOME = M.root("xdg/config")
vim.env.XDG_DATA_HOME = M.root("xdg/data")
vim.env.XDG_STATE_HOME = M.root("xdg/state")
vim.env.XDG_CACHE_HOME = M.root("xdg/cache")
-- NOTE: Cleanup the xdg cache on exit so new runs of the minimal init doesn't share any previous state, e.g. shada
vim.api.nvim_create_autocmd("VimLeave", {
callback = function()
vim.fn.system({
"rm",
"-r",
"-f",
M.root("xdg")
})
end
})
end
-- NOTE: If you have additional plugins you need to install to reproduce your issue, include them in the plugins
-- table within the setup call below.
M.setup({
plenary = "https://github.com/nvim-lua/plenary.nvim.git",
telescope = "https://github.com/nvim-telescope/telescope.nvim",
diffview = "https://github.com/sindrets/diffview.nvim",
neogit = "https://github.com/NeogitOrg/neogit"
})
-- WARN: Do all plugin setup, test runs, reproductions, etc. AFTER calling setup with a list of plugins!
-- Basically, do all that stuff AFTER this line.
require("neogit").setup({}) -- For instance, setup Neogit
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Use the provided minimal Lua configuration to reproduce the issue, then start at Neogit's commit prompt opened with c and inspect how the -s and -S arguments are represented. Run the listed reproduction steps; done means -S is shown as an active toggle and pressing it adds -S without requiring a signing key.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, lua, neovim
- Domain
- cli, developer-experience
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100