Compare commits

...

2 Commits

Author SHA1 Message Date
Lewis Russell
db2d00185d
Merge 329a6d82cb into 7121983c45 2024-12-18 14:40:43 +00:00
Lewis Russell
329a6d82cb feat(vim.loader): defer writing cache files 2024-11-30 17:58:05 +00:00

View File

@ -120,21 +120,33 @@ local function cache_filename(name)
return ret:sub(-4) == '.lua' and (ret .. 'c') or (ret .. '.luac') return ret:sub(-4) == '.lua' and (ret .. 'c') or (ret .. '.luac')
end end
local writing = {} --- @type table<string,function>
--- Saves the cache entry for a given module or file --- Saves the cache entry for a given module or file
--- @param cname string cache filename --- @param cname string cache filename
--- @param hash vim.loader.CacheHash --- @param hash vim.loader.CacheHash
--- @param chunk function --- @param chunk function
local function write_cachefile(cname, hash, chunk) local function write_cachefile(cname, hash, chunk)
local f = assert(uv.fs_open(cname, 'w', 438)) if writing[cname] then
local header = { return
VERSION, end
hash.size,
hash.mtime.sec, writing[cname] = chunk
hash.mtime.nsec, uv.fs_open(cname, 'w', 438, function(err, f)
} if err then
uv.fs_write(f, table.concat(header, ',') .. '\0') error(err)
uv.fs_write(f, string.dump(chunk)) end
uv.fs_close(f) local header = {
VERSION,
hash.size,
hash.mtime.sec,
hash.mtime.nsec,
}
uv.fs_write(f, table.concat(header, ',') .. '\0')
uv.fs_write(f, string.dump(chunk))
uv.fs_close(f)
writing[cname] = nil
end)
end end
--- @param path string --- @param path string
@ -255,6 +267,10 @@ local function loadfile_cached(filename, mode, env)
end end
end end
if writing[cname] then
return writing[cname]
end
local chunk, err = _loadfile(modpath, mode, env) local chunk, err = _loadfile(modpath, mode, env)
if chunk and stat then if chunk and stat then
write_cachefile(cname, stat, chunk) write_cachefile(cname, stat, chunk)