| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- local completed = 0
 
- local collection = {}
 
- local active_jobs = {}
 
- local fmt = string.format
 
- local core_plugins = require "lvim.plugins"
 
- local default_snapshot_path = join_paths(get_lvim_base_dir(), "snapshots", "default.json")
 
- local fd = io.open(default_snapshot_path, "rb")
 
- local content
 
- if fd then
 
-   content = fd:read "*a"
 
- end
 
- local default_sha1 = vim.json.decode(content)
 
- local get_short_name = function(spec)
 
-   return spec[1]:match "/(%S*)"
 
- end
 
- local get_default_sha1 = function(spec)
 
-   local short_name, _ = get_short_name(spec)
 
-   assert(default_sha1[short_name])
 
-   return default_sha1[short_name].commit
 
- end
 
- local is_directory = require("lvim.utils").is_directory
 
- -- see packer.init()
 
- local packdir = join_paths(get_runtime_dir(), "site", "pack", "packer")
 
- local packer_config = { opt_dir = join_paths(packdir, "opt"), start_dir = join_paths(packdir, "start") }
 
- local is_optional = function(spec)
 
-   return spec.opt or spec.event or spec.cmd or spec.module
 
- end
 
- local get_install_path = function(spec)
 
-   local prefix = is_optional(spec) and packer_config.opt_dir or packer_config.start_dir
 
-   local path = join_paths(prefix, get_short_name(spec))
 
-   return is_directory(path) and path
 
- end
 
- local function call_proc(process, opts, cb)
 
-   local output, error_output = "", ""
 
-   local handle_stdout = function(err, chunk)
 
-     assert(not err, err)
 
-     if chunk then
 
-       output = output .. chunk
 
-     end
 
-   end
 
-   local handle_stderr = function(err, chunk)
 
-     assert(not err, err)
 
-     if chunk then
 
-       error_output = error_output .. chunk
 
-     end
 
-   end
 
-   local uv = vim.loop
 
-   local handle
 
-   local stdout = uv.new_pipe(false)
 
-   local stderr = uv.new_pipe(false)
 
-   local stdio = { nil, stdout, stderr }
 
-   handle = uv.spawn(
 
-     process,
 
-     { args = opts.args, cwd = opts.cwd or uv.cwd(), stdio = stdio },
 
-     vim.schedule_wrap(function(code)
 
-       if code ~= 0 then
 
-         stdout:read_stop()
 
-         stderr:read_stop()
 
-       end
 
-       local check = uv.new_check()
 
-       check:start(function()
 
-         for _, pipe in ipairs(stdio) do
 
-           if pipe and not pipe:is_closing() then
 
-             return
 
-           end
 
-         end
 
-         check:stop()
 
-         handle:close()
 
-         cb(code, output, error_output)
 
-       end)
 
-     end)
 
-   )
 
-   uv.read_start(stdout, handle_stdout)
 
-   uv.read_start(stderr, handle_stderr)
 
-   return handle
 
- end
 
- local function verify_core_plugins(verbose)
 
-   for _, spec in pairs(core_plugins) do
 
-     local path = get_install_path(spec)
 
-     if not spec.disable and path then
 
-       table.insert(collection, {
 
-         name = get_short_name(spec),
 
-         commit = get_default_sha1(spec),
 
-         path = path,
 
-       })
 
-     end
 
-   end
 
-   for _, entry in pairs(collection) do
 
-     local on_done = function(code, result, errors)
 
-       completed = completed + 1
 
-       if code ~= 0 then
 
-         io.write(errors .. "\n")
 
-         -- os.exit(code)
 
-       else
 
-         if verbose then
 
-           io.write(fmt("verified [%s]\n", entry.name))
 
-         end
 
-       end
 
-       local current_commit = result:gsub("\n", ""):gsub([[']], [[]]):sub(1, 7)
 
-       -- just in case there are some extra qutoes or it's a longer commit hash
 
-       if current_commit ~= entry.commit then
 
-         io.write(fmt("mismatch at [%s]: expected [%s], got [%s]\n", entry.name, entry.commit, current_commit))
 
-         os.exit(1)
 
-       end
 
-     end
 
-     local handle = call_proc("git", { args = { "rev-parse", "--short", "HEAD" }, cwd = entry.path }, on_done)
 
-     assert(handle)
 
-     table.insert(active_jobs, handle)
 
-   end
 
-   vim.wait(#active_jobs * 60 * 1000, function()
 
-     return completed == #active_jobs
 
-   end)
 
- end
 
- verify_core_plugins()
 
- vim.cmd "q"
 
 
  |