From d7cc1f9f9d75c4e388845fc74bcbebbf254a0c07 Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Tue, 6 Apr 2021 17:50:46 +0200 Subject: [PATCH] Add plugin verification by version tag --- data/core/init.lua | 36 +++++++++++++++++++++++++++++++- data/plugins/autocomplete.lua | 1 + data/plugins/autoreload.lua | 1 + data/plugins/detectindent.lua | 1 + data/plugins/language_c.lua | 1 + data/plugins/language_css.lua | 1 + data/plugins/language_js.lua | 1 + data/plugins/language_lua.lua | 1 + data/plugins/language_md.lua | 1 + data/plugins/language_python.lua | 1 + data/plugins/language_xml.lua | 1 + data/plugins/macro.lua | 1 + data/plugins/projectsearch.lua | 1 + data/plugins/quote.lua | 1 + data/plugins/reflow.lua | 1 + data/plugins/tabularize.lua | 1 + data/plugins/toolbarview.lua | 1 + data/plugins/treeview.lua | 1 + data/plugins/trimwhitespace.lua | 1 + data/plugins/workspace.lua | 1 + 20 files changed, 54 insertions(+), 1 deletion(-) diff --git a/data/core/init.lua b/data/core/init.lua index d1118a4..59944c9 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -552,6 +552,35 @@ function core.restart() end +local function version_components(version) + local a, b, c = version:match('(%d+)%.(%d+)%.(%d+)') + if a then + return tonumber(a), tonumber(b), tonumber(c) + end + a, b = version:match('(%d+)%.(%d+)') + if a then + return tonumber(a), tonumber(b) + end +end + + +local function check_plugin_version(filename) + local f = io.open(filename, "r") + if not f then return false end + local version_match = false + for line in f:lines() do + local version = line:match('%-%-%s*lite%-xl%s*(%d+%.%d+)%s*$') + if not version then break end + local ver_major, ver_minor = version_components(version) + local ref_major, ref_minor = version_components(VERSION) + version_match = (ver_major == ref_major and ver_minor == ref_minor) + break + end + f:close() + return version_match +end + + function core.load_plugins() local no_errors = true for _, root_dir in ipairs {USERDIR, DATADIR} do @@ -559,7 +588,12 @@ function core.load_plugins() local files = system.list_dir(plugin_dir) for _, filename in ipairs(files or {}) do local basename = filename:match("(.-)%.lua$") or filename - if config[basename] ~= false then + local version_match = check_plugin_version(plugin_dir .. '/' .. filename) + if not version_match then + core.log_quiet("Version mismatch for plugin %q from %s", basename, plugin_dir) + no_errors = false + end + if version_match and config[basename] ~= false then local modname = "plugins." .. basename local ok = core.try(require, modname) if ok then core.log_quiet("Loaded plugin %q from %s", basename, plugin_dir) end diff --git a/data/plugins/autocomplete.lua b/data/plugins/autocomplete.lua index ee318a1..c0a3d36 100644 --- a/data/plugins/autocomplete.lua +++ b/data/plugins/autocomplete.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local common = require "core.common" local config = require "core.config" diff --git a/data/plugins/autoreload.lua b/data/plugins/autoreload.lua index a077b6d..cbef8a2 100644 --- a/data/plugins/autoreload.lua +++ b/data/plugins/autoreload.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local config = require "core.config" local Doc = require "core.doc" diff --git a/data/plugins/detectindent.lua b/data/plugins/detectindent.lua index 2a97e29..9ee171e 100644 --- a/data/plugins/detectindent.lua +++ b/data/plugins/detectindent.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local command = require "core.command" local common = require "core.common" diff --git a/data/plugins/language_c.lua b/data/plugins/language_c.lua index 8e8ee98..9bb074b 100644 --- a/data/plugins/language_c.lua +++ b/data/plugins/language_c.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_css.lua b/data/plugins/language_css.lua index 021c5d3..2f93455 100644 --- a/data/plugins/language_css.lua +++ b/data/plugins/language_css.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_js.lua b/data/plugins/language_js.lua index af65065..9f877ef 100644 --- a/data/plugins/language_js.lua +++ b/data/plugins/language_js.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_lua.lua b/data/plugins/language_lua.lua index 915d273..64b7847 100644 --- a/data/plugins/language_lua.lua +++ b/data/plugins/language_lua.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_md.lua b/data/plugins/language_md.lua index 9f0f14e..0998c11 100644 --- a/data/plugins/language_md.lua +++ b/data/plugins/language_md.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_python.lua b/data/plugins/language_python.lua index e6315c4..b9c07e4 100644 --- a/data/plugins/language_python.lua +++ b/data/plugins/language_python.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/language_xml.lua b/data/plugins/language_xml.lua index 5240bdc..8687ab6 100644 --- a/data/plugins/language_xml.lua +++ b/data/plugins/language_xml.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local syntax = require "core.syntax" syntax.add { diff --git a/data/plugins/macro.lua b/data/plugins/macro.lua index 3458977..c887310 100644 --- a/data/plugins/macro.lua +++ b/data/plugins/macro.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/data/plugins/projectsearch.lua b/data/plugins/projectsearch.lua index 22c16ef..c449933 100644 --- a/data/plugins/projectsearch.lua +++ b/data/plugins/projectsearch.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local common = require "core.common" local keymap = require "core.keymap" diff --git a/data/plugins/quote.lua b/data/plugins/quote.lua index b17407d..bca0797 100644 --- a/data/plugins/quote.lua +++ b/data/plugins/quote.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local command = require "core.command" local keymap = require "core.keymap" diff --git a/data/plugins/reflow.lua b/data/plugins/reflow.lua index 95090a6..9556e37 100644 --- a/data/plugins/reflow.lua +++ b/data/plugins/reflow.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local config = require "core.config" local command = require "core.command" diff --git a/data/plugins/tabularize.lua b/data/plugins/tabularize.lua index f4dda1f..3182152 100644 --- a/data/plugins/tabularize.lua +++ b/data/plugins/tabularize.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local command = require "core.command" local translate = require "core.doc.translate" diff --git a/data/plugins/toolbarview.lua b/data/plugins/toolbarview.lua index 65e782a..2edfa8b 100644 --- a/data/plugins/toolbarview.lua +++ b/data/plugins/toolbarview.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local common = require "core.common" local command = require "core.command" diff --git a/data/plugins/treeview.lua b/data/plugins/treeview.lua index 5e16ce5..44422b7 100644 --- a/data/plugins/treeview.lua +++ b/data/plugins/treeview.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local common = require "core.common" local command = require "core.command" diff --git a/data/plugins/trimwhitespace.lua b/data/plugins/trimwhitespace.lua index d4d25c8..5a43653 100644 --- a/data/plugins/trimwhitespace.lua +++ b/data/plugins/trimwhitespace.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local command = require "core.command" local Doc = require "core.doc" diff --git a/data/plugins/workspace.lua b/data/plugins/workspace.lua index 81d2207..c24358c 100644 --- a/data/plugins/workspace.lua +++ b/data/plugins/workspace.lua @@ -1,3 +1,4 @@ +-- lite-xl 1.16 local core = require "core" local common = require "core.common" local DocView = require "core.docview"