From 52b74557415eb757ad4b7481b0aec8a3f98dd58d Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Sun, 10 Oct 2021 21:07:41 +0200 Subject: feat: add an independent lvim namespace (#1699) --- lua/lvim/bootstrap.lua | 196 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 lua/lvim/bootstrap.lua (limited to 'lua/lvim/bootstrap.lua') diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua new file mode 100644 index 00000000..46c044ae --- /dev/null +++ b/lua/lvim/bootstrap.lua @@ -0,0 +1,196 @@ +local M = {} + +package.loaded["lvim.utils.hooks"] = nil +local _, hooks = pcall(require, "lvim.utils.hooks") + +---Join path segments that were passed as input +---@return string +function _G.join_paths(...) + local uv = vim.loop + local path_sep = uv.os_uname().version:match "Windows" and "\\" or "/" + local result = table.concat({ ... }, path_sep) + return result +end + +---Get the full path to `$LUNARVIM_RUNTIME_DIR` +---@return string +function _G.get_runtime_dir() + local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" + if not lvim_runtime_dir then + -- when nvim is used directly + return vim.fn.stdpath "config" + end + return lvim_runtime_dir +end + +---Get the full path to `$LUNARVIM_CONFIG_DIR` +---@return string +function _G.get_config_dir() + local lvim_config_dir = os.getenv "LUNARVIM_CONFIG_DIR" + if not lvim_config_dir then + return vim.fn.stdpath "config" + end + return lvim_config_dir +end + +---Get the full path to `$LUNARVIM_CACHE_DIR` +---@return string +function _G.get_cache_dir() + local lvim_cache_dir = os.getenv "LUNARVIM_CACHE_DIR" + if not lvim_cache_dir then + return vim.fn.stdpath "cache" + end + return lvim_cache_dir +end + +---Get the full path to the currently installed lunarvim repo +---@return string +local function get_install_path() + local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" + if not lvim_runtime_dir then + -- when nvim is used directly + return vim.fn.stdpath "config" + end + return join_paths(lvim_runtime_dir, "lvim") +end + +---Get currently installed version of LunarVim +---@param type string can be "short" +---@return string +function _G.get_version(type) + type = type or "" + local lvim_full_ver = vim.fn.system("git -C " .. get_install_path() .. " describe --tags") + + if string.match(lvim_full_ver, "%d") == nil then + return nil + end + if type == "short" then + return vim.fn.split(lvim_full_ver, "-")[1] + else + return string.sub(lvim_full_ver, 1, #lvim_full_ver - 1) + end +end + +---Initialize the `&runtimepath` variables and prepare for startup +---@return table +function M:init() + self.runtime_dir = get_runtime_dir() + self.config_dir = get_config_dir() + self.cache_path = get_cache_dir() + self.install_path = get_install_path() + + self.pack_dir = join_paths(self.runtime_dir, "site", "pack") + self.packer_install_dir = join_paths(self.runtime_dir, "site", "pack", "packer", "start", "packer.nvim") + self.packer_cache_path = join_paths(self.config_dir, "plugin", "packer_compiled.lua") + + if os.getenv "LUNARVIM_RUNTIME_DIR" then + vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site")) + vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site", "after")) + vim.opt.rtp:prepend(join_paths(self.runtime_dir, "site")) + vim.opt.rtp:append(join_paths(self.runtime_dir, "site", "after")) + + vim.opt.rtp:remove(vim.fn.stdpath "config") + vim.opt.rtp:remove(join_paths(vim.fn.stdpath "config", "after")) + vim.opt.rtp:prepend(self.config_dir) + vim.opt.rtp:append(join_paths(self.config_dir, "after")) + -- TODO: we need something like this: vim.opt.packpath = vim.opt.rtp + + vim.cmd [[let &packpath = &runtimepath]] + vim.cmd("set spellfile=" .. join_paths(self.config_dir, "spell", "en.utf-8.add")) + end + + vim.fn.mkdir(get_cache_dir(), "p") + + -- FIXME: currently unreliable in unit-tests + if not os.getenv "LVIM_TEST_ENV" then + require("lvim.impatient").setup { + path = vim.fn.stdpath "cache" .. "/lvim_cache", + enable_profiling = true, + } + end + + require("lvim.config"):init { + config_dir = self.config_dir, + } + local config = require "lvim.config" + config:init { + user_config = join_paths(self.config_dir, "config.lua"), + } + + require("lvim.plugin-loader"):init { + package_root = self.pack_dir, + install_path = self.packer_install_dir, + } + + return self +end + +---Update LunarVim +---pulls the latest changes from github and, resets the startup cache +function M:update() + hooks.run_pre_update() + M:update_repo() + hooks.run_post_update() +end + +local function git_cmd(subcmd) + local Job = require "plenary.job" + local Log = require "lvim.core.log" + local args = { "-C", get_install_path() } + vim.list_extend(args, subcmd) + + local stderr = {} + local stdout, ret = Job + :new({ + command = "git", + args = args, + cwd = get_install_path(), + on_stderr = function(_, data) + table.insert(stderr, data) + end, + }) + :sync() + + if not vim.tbl_isempty(stderr) then + Log:debug(stderr) + end + + if not vim.tbl_isempty(stdout) then + Log:debug(stdout) + end + + return ret +end + +---pulls the latest changes from github +function M:update_repo() + local Log = require "lvim.core.log" + local sub_commands = { + fetch = { "fetch" }, + diff = { "diff", "--quiet", "@{upstream}" }, + merge = { "merge", "--ff-only", "--progress" }, + } + Log:info "Checking for updates" + + local ret = git_cmd(sub_commands.fetch) + if ret ~= 0 then + Log:error "Update failed! Check the log for further information" + return + end + + ret = git_cmd(sub_commands.diff) + + if ret == 0 then + Log:info "LunarVim is already up-to-date" + return + end + + ret = git_cmd(sub_commands.merge) + + if ret ~= 0 then + Log:error "Update failed! Please pull the changes manually instead." + return + end +end + +return M -- cgit v1.2.3 From 5deb0e57ce083fa836762b34e36ff48fbd3a535c Mon Sep 17 00:00:00 2001 From: James Walmsley Date: Tue, 12 Oct 2021 16:12:55 +0100 Subject: bugfix: Ensure lvim table is valid before calling Log:warn() (#1742) Co-authored-by: kylo252 <59826753+kylo252@users.noreply.github.com> --- lua/lvim/bootstrap.lua | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'lua/lvim/bootstrap.lua') diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua index 46c044ae..ab29bca2 100644 --- a/lua/lvim/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -109,13 +109,7 @@ function M:init() } end - require("lvim.config"):init { - config_dir = self.config_dir, - } - local config = require "lvim.config" - config:init { - user_config = join_paths(self.config_dir, "config.lua"), - } + require("lvim.config"):init() require("lvim.plugin-loader"):init { package_root = self.pack_dir, -- cgit v1.2.3 From 4b0ce90a953735b18e0e059d99505519c5d344de Mon Sep 17 00:00:00 2001 From: Chase Colman <5411+chase@users.noreply.github.com> Date: Thu, 14 Oct 2021 13:03:54 +0800 Subject: fix(plenary): restore impatient caching for plenary (#1768) --- lua/lvim/bootstrap.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'lua/lvim/bootstrap.lua') diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua index ab29bca2..b1ecdf1c 100644 --- a/lua/lvim/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -103,6 +103,7 @@ function M:init() -- FIXME: currently unreliable in unit-tests if not os.getenv "LVIM_TEST_ENV" then + _G.PLENARY_DEBUG = false require("lvim.impatient").setup { path = vim.fn.stdpath "cache" .. "/lvim_cache", enable_profiling = true, -- cgit v1.2.3 From 5cf8c07ee921f8dfed03415fe5b8322754ea8615 Mon Sep 17 00:00:00 2001 From: Sergio Mendez Date: Wed, 20 Oct 2021 12:05:18 -0400 Subject: fix(bootstrap): support for using default neovim config and data directories (#1777) Co-authored-by: kylo252 <59826753+kylo252@users.noreply.github.com> Co-authored-by: James Walmsley --- lua/lvim/bootstrap.lua | 82 +++++++++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) (limited to 'lua/lvim/bootstrap.lua') diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua index b1ecdf1c..fbb362ce 100644 --- a/lua/lvim/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -3,11 +3,12 @@ local M = {} package.loaded["lvim.utils.hooks"] = nil local _, hooks = pcall(require, "lvim.utils.hooks") +local uv = vim.loop +local path_sep = uv.os_uname().version:match "Windows" and "\\" or "/" + ---Join path segments that were passed as input ---@return string function _G.join_paths(...) - local uv = vim.loop - local path_sep = uv.os_uname().version:match "Windows" and "\\" or "/" local result = table.concat({ ... }, path_sep) return result end @@ -18,7 +19,7 @@ function _G.get_runtime_dir() local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" if not lvim_runtime_dir then -- when nvim is used directly - return vim.fn.stdpath "config" + return vim.fn.stdpath "data" end return lvim_runtime_dir end @@ -43,47 +44,24 @@ function _G.get_cache_dir() return lvim_cache_dir end ----Get the full path to the currently installed lunarvim repo ----@return string -local function get_install_path() - local lvim_runtime_dir = os.getenv "LUNARVIM_RUNTIME_DIR" - if not lvim_runtime_dir then - -- when nvim is used directly - return vim.fn.stdpath "config" - end - return join_paths(lvim_runtime_dir, "lvim") -end - ----Get currently installed version of LunarVim ----@param type string can be "short" ----@return string -function _G.get_version(type) - type = type or "" - local lvim_full_ver = vim.fn.system("git -C " .. get_install_path() .. " describe --tags") - - if string.match(lvim_full_ver, "%d") == nil then - return nil - end - if type == "short" then - return vim.fn.split(lvim_full_ver, "-")[1] - else - return string.sub(lvim_full_ver, 1, #lvim_full_ver - 1) - end -end - ---Initialize the `&runtimepath` variables and prepare for startup ---@return table -function M:init() +function M:init(base_dir) self.runtime_dir = get_runtime_dir() self.config_dir = get_config_dir() self.cache_path = get_cache_dir() - self.install_path = get_install_path() - self.pack_dir = join_paths(self.runtime_dir, "site", "pack") self.packer_install_dir = join_paths(self.runtime_dir, "site", "pack", "packer", "start", "packer.nvim") self.packer_cache_path = join_paths(self.config_dir, "plugin", "packer_compiled.lua") + ---Get the full path to LunarVim's base directory + ---@return string + function _G.get_lvim_base_dir() + return base_dir + end + if os.getenv "LUNARVIM_RUNTIME_DIR" then + -- vim.opt.rtp:append(os.getenv "LUNARVIM_RUNTIME_DIR" .. path_sep .. "lvim") vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site")) vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site", "after")) vim.opt.rtp:prepend(join_paths(self.runtime_dir, "site")) @@ -128,10 +106,10 @@ function M:update() hooks.run_post_update() end -local function git_cmd(subcmd) +local function git_cmd(subcmd, opts) local Job = require "plenary.job" local Log = require "lvim.core.log" - local args = { "-C", get_install_path() } + local args = { "-C", opts.cwd } vim.list_extend(args, subcmd) local stderr = {} @@ -139,7 +117,7 @@ local function git_cmd(subcmd) :new({ command = "git", args = args, - cwd = get_install_path(), + cwd = opts.cwd, on_stderr = function(_, data) table.insert(stderr, data) end, @@ -154,7 +132,7 @@ local function git_cmd(subcmd) Log:debug(stdout) end - return ret + return ret, stdout end ---pulls the latest changes from github @@ -165,22 +143,25 @@ function M:update_repo() diff = { "diff", "--quiet", "@{upstream}" }, merge = { "merge", "--ff-only", "--progress" }, } + local opts = { + cwd = get_lvim_base_dir(), + } Log:info "Checking for updates" - local ret = git_cmd(sub_commands.fetch) + local ret = git_cmd(sub_commands.fetch, opts) if ret ~= 0 then Log:error "Update failed! Check the log for further information" return end - ret = git_cmd(sub_commands.diff) + ret = git_cmd(sub_commands.diff, opts) if ret == 0 then Log:info "LunarVim is already up-to-date" return end - ret = git_cmd(sub_commands.merge) + ret = git_cmd(sub_commands.merge, opts) if ret ~= 0 then Log:error "Update failed! Please pull the changes manually instead." @@ -188,4 +169,23 @@ function M:update_repo() end end +---Get currently installed version of LunarVim +---@param type string can be "short" +---@return string +function M:get_version(type) + type = type or "" + local opts = { cwd = get_lvim_base_dir() } + local status_ok, results = git_cmd({ "describe", "--tags" }, opts) + local lvim_full_ver = results[1] or "" + + if not status_ok or string.match(lvim_full_ver, "%d") == nil then + return nil + end + if type == "short" then + return vim.fn.split(lvim_full_ver, "-")[1] + else + return string.sub(lvim_full_ver, 1, #lvim_full_ver - 1) + end +end + return M -- cgit v1.2.3