diff options
| author | kylo252 <[email protected]> | 2022-10-17 17:29:15 +0200 | 
|---|---|---|
| committer | kylo252 <[email protected]> | 2022-10-17 17:29:15 +0200 | 
| commit | 4ef07315003f723bb8e97d5a91b2bde3773ec1b8 (patch) | |
| tree | e9889a492f76e3f9573228343aaba647dfd48136 /lua/lvim/utils | |
| parent | e4a5fe97abe500bbbe78fb137d57a59f558da05a (diff) | |
| parent | 6f6cbc394d2a7e64964b6067a2f42d2e6a07824e (diff) | |
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lvim/utils')
| -rw-r--r-- | lua/lvim/utils/functions.lua | 13 | ||||
| -rw-r--r-- | lua/lvim/utils/git.lua | 17 | ||||
| -rw-r--r-- | lua/lvim/utils/hooks.lua | 15 | ||||
| -rw-r--r-- | lua/lvim/utils/modules.lua | 98 | 
4 files changed, 132 insertions, 11 deletions
| diff --git a/lua/lvim/utils/functions.lua b/lua/lvim/utils/functions.lua index de46bc8a..1cb8ec8e 100644 --- a/lua/lvim/utils/functions.lua +++ b/lua/lvim/utils/functions.lua @@ -16,4 +16,17 @@ function M.smart_quit()    end  end +function M.isempty(s) +  return s == nil or s == "" +end + +function M.get_buf_option(opt) +  local status_ok, buf_option = pcall(vim.api.nvim_buf_get_option, 0, opt) +  if not status_ok then +    return nil +  else +    return buf_option +  end +end +  return M diff --git a/lua/lvim/utils/git.lua b/lua/lvim/utils/git.lua index 99c178f3..c1bdca1b 100644 --- a/lua/lvim/utils/git.lua +++ b/lua/lvim/utils/git.lua @@ -1,6 +1,7 @@  local M = {}  local Log = require "lvim.core.log" +local fmt = string.format  local if_nil = vim.F.if_nil  local function git_cmd(opts) @@ -39,13 +40,20 @@ local function safe_deep_fetch()      Log:error(vim.inspect(error))      return    end -  -- git fetch --unshallow will cause an error on a a complete clone +  -- git fetch --unshallow will cause an error on a complete clone    local fetch_mode = result[1] == "true" and "--unshallow" or "--all"    ret = git_cmd { args = { "fetch", fetch_mode } }    if ret ~= 0 then -    Log:error("Git fetch failed! Please pull the changes manually in " .. get_lvim_base_dir()) +    Log:error(fmt "Git fetch %s failed! Please pull the changes manually in %s", fetch_mode, get_lvim_base_dir())      return    end +  if fetch_mode == "--unshallow" then +    ret = git_cmd { args = { "remote", "set-branches", "origin", "*" } } +    if ret ~= 0 then +      Log:error(fmt "Git fetch %s failed! Please pull the changes manually in %s", fetch_mode, get_lvim_base_dir()) +      return +    end +  end    return true  end @@ -53,6 +61,11 @@ end  function M.update_base_lvim()    Log:info "Checking for updates" +  if not vim.loop.fs_access(get_lvim_base_dir(), "w") then +    Log:warn(fmt("Lunarvim update aborted! cannot write to %s", get_lvim_base_dir())) +    return +  end +    if not safe_deep_fetch() then      return    end diff --git a/lua/lvim/utils/hooks.lua b/lua/lvim/utils/hooks.lua index f15f6729..bf0dac60 100644 --- a/lua/lvim/utils/hooks.lua +++ b/lua/lvim/utils/hooks.lua @@ -19,7 +19,7 @@ function M.run_on_packer_complete()    pcall(vim.cmd, "colorscheme " .. lvim.colorscheme)    if M._reload_triggered then -    Log:info "Reloaded configuration" +    Log:debug "Reloaded configuration"      M._reload_triggered = nil    end  end @@ -34,10 +34,7 @@ end  ---It also forces regenerating any template ftplugin files  ---Tip: Useful for clearing any outdated settings  function M.reset_cache() -  local impatient = _G.__luacache -  if impatient then -    impatient.clear_cache() -  end +  vim.cmd [[LuaCacheClear]]    local lvim_modules = {}    for module, _ in pairs(package.loaded) do      if module:match "lvim.core" or module:match "lvim.lsp" then @@ -52,8 +49,8 @@ end  function M.run_post_update()    Log:debug "Starting post-update hook" -  if vim.fn.has "nvim-0.7" ~= 1 then -    local compat_tag = "1.1.3" +  if vim.fn.has "nvim-0.8" ~= 1 then +    local compat_tag = "1.1.4"      vim.notify(        "Please upgrade your Neovim base installation. Newer version of Lunarvim requires v0.7+",        vim.log.levels.WARN @@ -61,9 +58,9 @@ function M.run_post_update()      vim.wait(1000, function()        return false      end) -    local ret = require_clean("lvim.utils.git").switch_lvim_branch(compat_tag) +    local ret = reload("lvim.utils.git").switch_lvim_branch(compat_tag)      if ret then -      vim.notify("Reverted to the last known compatibile version: " .. compat_tag, vim.log.levels.WARN) +      vim.notify("Reverted to the last known compatible version: " .. compat_tag, vim.log.levels.WARN)      end      return    end diff --git a/lua/lvim/utils/modules.lua b/lua/lvim/utils/modules.lua new file mode 100644 index 00000000..d5674483 --- /dev/null +++ b/lua/lvim/utils/modules.lua @@ -0,0 +1,98 @@ +local M = {} + +local Log = require "lvim.core.log" +-- revisit this +-- function prequire(package) +--   local status, lib = pcall(require, package) +--   if status then +--     return lib +--   else +--     vim.notify("Failed to require '" .. package .. "' from " .. debug.getinfo(2).source) +--     return nil +--   end +-- end + +local function _assign(old, new, k) +  local otype = type(old[k]) +  local ntype = type(new[k]) +  -- print("hi") +  if (otype == "thread" or otype == "userdata") or (ntype == "thread" or ntype == "userdata") then +    vim.notify(string.format("warning: old or new attr %s type be thread or userdata", k)) +  end +  old[k] = new[k] +end + +local function _replace(old, new, repeat_tbl) +  if repeat_tbl[old] then +    return +  end +  repeat_tbl[old] = true + +  local dellist = {} +  for k, _ in pairs(old) do +    if not new[k] then +      table.insert(dellist, k) +    end +  end +  for _, v in ipairs(dellist) do +    old[v] = nil +  end + +  for k, _ in pairs(new) do +    if not old[k] then +      old[k] = new[k] +    else +      if type(old[k]) ~= type(new[k]) then +        Log:debug( +          string.format("Reloader: mismatch between old [%s] and new [%s] type for [%s]", type(old[k]), type(new[k]), k) +        ) +        _assign(old, new, k) +      else +        if type(old[k]) == "table" then +          _replace(old[k], new[k], repeat_tbl) +        else +          _assign(old, new, k) +        end +      end +    end +  end +end + +M.require_clean = function(m) +  package.loaded[m] = nil +  _G[m] = nil +  local _, module = pcall(require, m) +  return module +end + +M.require_safe = function(mod) +  local status_ok, module = pcall(require, mod) +  if not status_ok then +    local trace = debug.getinfo(2, "SL") +    local shorter_src = trace.short_src +    local lineinfo = shorter_src .. ":" .. (trace.currentline or trace.linedefined) +    local msg = string.format("%s : skipped loading [%s]", lineinfo, mod) +    Log:debug(msg) +  end +  return module +end + +M.reload = function(mod) +  if not package.loaded[mod] then +    return M.require_safe(mod) +  end + +  local old = package.loaded[mod] +  package.loaded[mod] = nil +  local new = M.require_safe(mod) + +  if type(old) == "table" and type(new) == "table" then +    local repeat_tbl = {} +    _replace(old, new, repeat_tbl) +  end + +  package.loaded[mod] = old +  return old +end + +return M | 
