aboutsummaryrefslogtreecommitdiff
path: root/scripts/vimpatch.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-12-26 03:38:42 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-12-27 12:30:55 +0100
commit7773bbd0989d798b29486a669775a81cd4ec6d3b (patch)
treee3a514e9fd13623fcbb16e4806d73de2782df4fc /scripts/vimpatch.lua
parent903ed09a61b15a63c4909d4fad7b098fa2368d1d (diff)
downloadrneovim-7773bbd0989d798b29486a669775a81cd4ec6d3b.tar.gz
rneovim-7773bbd0989d798b29486a669775a81cd4ec6d3b.tar.bz2
rneovim-7773bbd0989d798b29486a669775a81cd4ec6d3b.zip
vimpatch.lua: automate version.c
Invoke it like this: VIM_SOURCE_DIR=~/neovim/.vim-src/ nvim -i NONE -u NONE --headless +'luafile ./scripts/vimpatch.lua' +q
Diffstat (limited to 'scripts/vimpatch.lua')
-rwxr-xr-xscripts/vimpatch.lua67
1 files changed, 67 insertions, 0 deletions
diff --git a/scripts/vimpatch.lua b/scripts/vimpatch.lua
new file mode 100755
index 0000000000..0924f3d718
--- /dev/null
+++ b/scripts/vimpatch.lua
@@ -0,0 +1,67 @@
+-- Updates version.c list of applied Vim patches.
+--
+-- Usage:
+-- VIM_SOURCE_DIR=~/neovim/.vim-src/ nvim -i NONE -u NONE --headless +'luafile ./scripts/vimpatch.lua' +q
+
+local nvim = vim.api
+
+local function pprint(o)
+ print(nvim.nvim_call_function('string', { o }))
+end
+
+local function systemlist(...)
+ local rv = nvim.nvim_call_function('systemlist', ...)
+ local err = nvim.nvim_get_vvar('shell_error')
+ local args_str = nvim.nvim_call_function('string', ...)
+ if 0 ~= err then
+ error('command failed: '..args_str)
+ end
+ return rv
+end
+
+local function vimpatch_sh_list_numbers()
+ return systemlist( { { 'bash', '-c', 'scripts/vim-patch.sh -M', } } )
+end
+
+-- Generates the lines to be inserted into the src/version.c
+-- `included_patches[]` definition.
+local function gen_version_c_lines()
+ -- Set of merged Vim 8.0.zzzz patch numbers.
+ local merged_patch_numbers = {}
+ local highest = 0
+ for _, n in ipairs(vimpatch_sh_list_numbers()) do
+ if n then
+ merged_patch_numbers[tonumber(n)] = true
+ highest = math.max(highest, n)
+ end
+ end
+
+ local lines = {}
+ for i = highest, 0, -1 do
+ local is_merged = (nil ~= merged_patch_numbers[i])
+ if is_merged then
+ table.insert(lines, string.format(' %s,', i))
+ else
+ table.insert(lines, string.format(' // %s,', i))
+ end
+ end
+
+ return lines
+end
+
+local function patch_version_c()
+ local lines = gen_version_c_lines()
+
+ nvim.nvim_command('silent noswapfile noautocmd edit src/nvim/version.c')
+ nvim.nvim_command('/static const int included_patches')
+ -- Delete the existing lines.
+ nvim.nvim_command('silent normal! j0d/};\rk')
+ -- Insert the lines.
+ nvim.nvim_call_function('append', {
+ nvim.nvim_eval('line(".")'),
+ lines,
+ })
+ nvim.nvim_command('silent write')
+end
+
+patch_version_c()