| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | 
							- local M = {}
 
- local Log = require "lvim.core.log"
 
- local if_nil = vim.F.if_nil
 
- local function git_cmd(opts)
 
-   local plenary_loaded, Job = pcall(require, "plenary.job")
 
-   if not plenary_loaded then
 
-     return 1, { "" }
 
-   end
 
-   opts = opts or {}
 
-   opts.cwd = opts.cwd or get_lvim_base_dir()
 
-   local stderr = {}
 
-   local stdout, ret = Job
 
-     :new({
 
-       command = "git",
 
-       args = opts.args,
 
-       cwd = opts.cwd,
 
-       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, stdout
 
- end
 
- local function safe_deep_fetch()
 
-   local ret, result = git_cmd { args = { "rev-parse", "--is-shallow-repository" } }
 
-   if ret ~= 0 then
 
-     Log:error "Git fetch failed! Check the log for further information"
 
-     return
 
-   end
 
-   -- git fetch --unshallow will cause an error on a 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! Check the log for further information"
 
-     return
 
-   end
 
-   return true
 
- end
 
- ---pulls the latest changes from github
 
- function M.update_base_lvim()
 
-   Log:info "Checking for updates"
 
-   local ret = git_cmd { args = { "fetch" } }
 
-   if ret ~= 0 then
 
-     Log:error "Update failed! Check the log for further information"
 
-     return
 
-   end
 
-   ret = git_cmd { args = { "diff", "--quiet", "@{upstream}" } }
 
-   if ret == 0 then
 
-     Log:info "LunarVim is already up-to-date"
 
-     return
 
-   end
 
-   ret = git_cmd { args = { "merge", "--ff-only", "--progress" } }
 
-   if ret ~= 0 then
 
-     Log:error "Update failed! Please pull the changes manually instead."
 
-     return
 
-   end
 
-   return true
 
- end
 
- ---Switch Lunarvim to the specified development branch
 
- ---@param branch string
 
- function M.switch_lvim_branch(branch)
 
-   if not safe_deep_fetch() then
 
-     return
 
-   end
 
-   local args = { "switch", branch }
 
-   if branch:match "^[0-9]" then
 
-     -- avoids producing an error for tags
 
-     vim.list_extend(args, { "--detach" })
 
-   end
 
-   local ret = git_cmd { args = args }
 
-   if ret ~= 0 then
 
-     Log:error "Unable to switch branches! Check the log for further information"
 
-     return
 
-   end
 
-   return true
 
- end
 
- ---Get the current Lunarvim development branch
 
- ---@return string|nil
 
- function M.get_lvim_branch()
 
-   local _, results = git_cmd { args = { "rev-parse", "--abbrev-ref", "HEAD" } }
 
-   local branch = if_nil(results[1], "")
 
-   return branch
 
- end
 
- ---Get currently checked-out tag of Lunarvim
 
- ---@return string
 
- function M.get_lvim_tag()
 
-   local args = { "describe", "--tags", "--abbrev=0" }
 
-   local _, results = git_cmd { args = args }
 
-   local tag = if_nil(results[1], "")
 
-   return tag
 
- end
 
- ---Get the commit hash of currently checked-out commit of Lunarvim
 
- ---@return string|nil
 
- function M.get_lvim_current_sha()
 
-   local _, log_results = git_cmd { args = { "log", "--pretty=format:%h", "-1" } }
 
-   local abbrev_version = if_nil(log_results[1], "")
 
-   return abbrev_version
 
- end
 
- return M
 
 
  |