commit d3bea4ace94a16e75f7dfe609fba0ae9e5775308
parent 89a72f11e5fe8c06a2b8e8ae994359d3316ee576
Author: Evgeni Chasnovski <evgeni.chasnovski@gmail.com>
Date: Sat, 2 Aug 2025 14:58:17 +0300
fix(pack): ensure consistent order of changelog during update
Problem: Left (`<` prefix) and right (`>` prefix) parts of update
changelog come in not fixed order: it can be left-right or right-left.
Solution: Ensure left-right order.
Diffstat:
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/runtime/lua/vim/pack.lua b/runtime/lua/vim/pack.lua
@@ -591,21 +591,23 @@ end
--- @async
--- @param p vim.pack.Plug
local function infer_update_details(p)
+ p.info.update_details = ''
infer_states(p)
local sha_head = assert(p.info.sha_head)
local sha_target = assert(p.info.sha_target)
-- Try showing log of changes (if any)
if sha_head ~= sha_target then
- -- `--topo-order` makes showing divergent branches nicer
- -- `--decorate-refs` shows only tags near commits (not `origin/main`, etc.)
- p.info.update_details = git_cmd({
- 'log',
- '--pretty=format:%m %h │ %s%d',
- '--topo-order',
- '--decorate-refs=refs/tags',
- sha_head .. '...' .. sha_target,
- }, p.path)
+ local range = sha_head .. '...' .. sha_target
+ local format = '--pretty=format:%m %h │ %s%d'
+ -- Show only tags near commits (not `origin/main`, etc.)
+ local decorate = '--decorate-refs=refs/tags'
+ -- `--topo-order` makes showing divergent branches nicer, but by itself
+ -- doesn't ensure that reverted ("left", shown with `<`) and added
+ -- ("right", shown with `>`) commits have fixed order.
+ local l = git_cmd({ 'log', format, '--topo-order', '--left-only', decorate, range }, p.path)
+ local r = git_cmd({ 'log', format, '--topo-order', '--right-only', decorate, range }, p.path)
+ p.info.update_details = l == '' and r or (r == '' and l or (l .. '\n' .. r))
return
end