@@ -3,50 +3,53 @@ local Git = require("lazy.manage.git")
3
3
4
4
local M = {}
5
5
6
- --- @type table<string , { commit : string , branch : string } >
6
+ --- @alias LazyLockfile table<string , { commit : string , branch : string } >
7
+ --- @type LazyLockfile
7
8
M .lock = {}
8
9
M ._loaded = false
9
10
10
11
function M .update ()
12
+ M .load ()
11
13
vim .fn .mkdir (vim .fn .fnamemodify (Config .options .lockfile , " :p:h" ), " p" )
12
14
local f = assert (io.open (Config .options .lockfile , " wb" ))
13
15
f :write (" {\n " )
14
- M .lock = {}
15
16
16
- --- @param plugin LazyPlugin
17
- local plugins = vim .tbl_filter (function (plugin )
18
- return not plugin ._ .is_local and plugin ._ .installed
19
- end , Config .plugins )
17
+ -- keep disabled and cond plugins
18
+ for name in pairs (M .lock ) do
19
+ if not (Config .spec .disabled [name ] or Config .spec .ignore_installed [name ]) then
20
+ M .lock [name ] = nil
21
+ end
22
+ end
23
+
24
+ for _ , plugin in pairs (Config .plugins ) do
25
+ if not plugin ._ .is_local and plugin ._ .installed then
26
+ local info = assert (Git .info (plugin .dir ))
27
+ M .lock [plugin .name ] = {
28
+ branch = info .branch or assert (Git .get_branch (plugin )),
29
+ commit = assert (info .commit , " commit is nil" ),
30
+ }
31
+ end
32
+ end
20
33
21
- --- @param plugin LazyPlugin
22
34
--- @type string[]
23
- local names = vim .tbl_map (function (plugin )
24
- return plugin .name
25
- end , plugins )
35
+ local names = vim .tbl_keys (M .lock )
26
36
table.sort (names )
27
37
28
38
for n , name in ipairs (names ) do
29
- local plugin = Config .plugins [name ]
30
- if not plugin ._ .is_local and plugin ._ .installed then
31
- local info = assert (Git .info (plugin .dir ))
32
- if not info .branch then
33
- info .branch = assert (Git .get_branch (plugin ))
34
- end
35
- info .commit = info .commit
36
- -- f:write(([[ [%q] = { branch = %q, commit = %q },]]):format(name, info.branch, info.commit) .. "\n")
37
- f :write (([[ %q: { "branch": %q, "commit": %q }]] ):format (name , info .branch , info .commit ))
38
- if n ~= # names then
39
- f :write (" ,\n " )
40
- end
41
- --- @diagnostic disable-next-line : assign-type-mismatch
42
- M .lock [plugin .name ] = info
39
+ local info = M .lock [name ]
40
+ f :write (([[ %q: { "branch": %q, "commit": %q }]] ):format (name , info .branch , info .commit ))
41
+ if n ~= # names then
42
+ f :write (" ,\n " )
43
43
end
44
44
end
45
45
f :write (" \n }" )
46
46
f :close ()
47
47
end
48
48
49
49
function M .load ()
50
+ if M ._loaded then
51
+ return
52
+ end
50
53
M .lock = {}
51
54
M ._loaded = true
52
55
local f = io.open (Config .options .lockfile , " r" )
64
67
--- @param plugin LazyPlugin
65
68
--- @return { commit : string , branch : string }
66
69
function M .get (plugin )
67
- if not M ._loaded then
68
- M .load ()
69
- end
70
+ M .load ()
70
71
return M .lock [plugin .name ]
71
72
end
72
73
0 commit comments