From 65cd28e613a7b7208a3b1e61f5effc581c7b0247 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 5 Dec 2022 20:49:23 +0100 Subject: [PATCH] feat(ui): added update checker --- lua/lazy/core/config.lua | 10 +++++++ lua/lazy/core/plugin.lua | 1 + lua/lazy/manage/checker.lua | 51 ++++++++++++++++++++++++++++++++++++ lua/lazy/manage/task/git.lua | 1 + lua/lazy/view/init.lua | 2 +- 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 lua/lazy/manage/checker.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1fc1936..20611b9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -50,6 +50,13 @@ M.defaults = { }, throttle = 20, -- how frequently should the ui process render events }, + checker = { + -- lazy can automatically check for updates + enabled = false, + concurrency = 10, -- set to 1 to very slowly check for updates + notify = true, -- get a notification if new updates are found + frequency = 3600, -- every hour + }, performance = { ---@type LazyCacheConfig cache = nil, @@ -102,6 +109,9 @@ function M.setup(spec, opts) require("lazy.core.cache").autosave() require("lazy.view").setup() require("lazy.manage.reloader").enable() + if M.options.checker.enabled then + require("lazy.manage.checker").start() + end end, }) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 0a94fa4..ddbdb72 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -16,6 +16,7 @@ local M = {} ---@field dirty? boolean ---@field updated? {from:string, to:string} ---@field is_local boolean +---@field has_updates? boolean ---@field cloned? boolean ---@field dep? boolean True if this plugin is only in the spec as a dependency diff --git a/lua/lazy/manage/checker.lua b/lua/lazy/manage/checker.lua new file mode 100644 index 0000000..ee0dabd --- /dev/null +++ b/lua/lazy/manage/checker.lua @@ -0,0 +1,51 @@ +local Config = require("lazy.core.config") +local Manage = require("lazy.manage") +local Util = require("lazy.util") +local Git = require("lazy.manage.git") + +local M = {} + +M.running = false +M.updated = {} + +function M.start() + M.fast_check() + M.check() +end + +function M.fast_check() + for _, plugin in pairs(Config.plugins) do + local info = Git.info(plugin.dir) + local target = Git.get_target(plugin) + if info and target and info.commit ~= target.commit then + plugin._.has_updates = true + end + end + M.report() +end + +function M.check() + Manage.check({ + show = false, + concurrency = Config.options.checker.concurrency, + }):wait(function() + M.report() + vim.defer_fn(M.check, Config.options.checker.frequency * 1000) + end) +end + +function M.report() + local lines = {} + for _, plugin in pairs(Config.plugins) do + if plugin._.has_updates and not vim.tbl_contains(M.updated, plugin.name) then + table.insert(lines, "- **" .. plugin.name .. "**") + table.insert(M.updated, plugin.name) + end + end + if #lines > 0 and Config.options.checker.notify then + table.insert(lines, 1, "# Plugin Updates") + Util.info(lines) + end +end + +return M diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index c9e3051..d7a3992 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -31,6 +31,7 @@ M.log = { local info = assert(Git.info(self.plugin.dir)) local target = assert(Git.get_target(self.plugin)) assert(target.commit, self.plugin.name .. " " .. target.branch) + self.plugin._.has_updates = target.commit ~= info.commit table.insert(args, info.commit .. ".." .. target.commit) else vim.list_extend(args, opts.args or Config.options.git.log) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 9df76da..e9fd17b 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -42,7 +42,7 @@ function M.show(mode) require("lazy.view.colors").setup() if M._buf and vim.api.nvim_buf_is_valid(M._buf) then - vim.api.nvim_win_set_cursor(M._win, { 1, 0 }) + -- vim.api.nvim_win_set_cursor(M._win, { 1, 0 }) vim.cmd([[do User LazyRender]]) return end