@@ -1104,18 +1104,18 @@ mutable struct ExtensionId
1104
1104
ntriggers:: Int # how many more packages must be defined until this is loaded
1105
1105
end
1106
1106
1107
- const EXT_DORMITORY = Dict {PkgId,Vector{ExtensionId}} ()
1107
+ const EXT_PRIMED = Dict {PkgId, PkgId} () # Extension -> Parent
1108
+ const EXT_DORMITORY = Dict {PkgId,Vector{ExtensionId}} () # Trigger -> Extensions that can be triggered by it
1108
1109
const EXT_DORMITORY_FAILED = ExtensionId[]
1109
1110
1110
1111
function insert_extension_triggers (pkg:: PkgId )
1111
1112
pkg. uuid === nothing && return
1112
- extensions_added = Set {PkgId} ()
1113
1113
for env in load_path ()
1114
- insert_extension_triggers! (extensions_added, env, pkg)
1114
+ insert_extension_triggers ( env, pkg)
1115
1115
end
1116
1116
end
1117
1117
1118
- function insert_extension_triggers! (extensions_added :: Set{PkgId} , env:: String , pkg:: PkgId ):: Union{Nothing,Missing}
1118
+ function insert_extension_triggers ( env:: String , pkg:: PkgId ):: Union{Nothing,Missing}
1119
1119
project_file = env_project_file (env)
1120
1120
if project_file isa String
1121
1121
manifest_file = project_file_manifest_path (project_file)
@@ -1133,7 +1133,7 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p
1133
1133
extensions === nothing && return
1134
1134
weakdeps === nothing && return
1135
1135
if weakdeps isa Dict{String, Any}
1136
- return _insert_extension_triggers! (extensions_added, pkg, extensions, weakdeps)
1136
+ return _insert_extension_triggers ( pkg, extensions, weakdeps)
1137
1137
end
1138
1138
1139
1139
d_weakdeps = Dict {String, String} ()
@@ -1148,21 +1148,22 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p
1148
1148
d_weakdeps[dep_name] = uuid
1149
1149
end
1150
1150
@assert length (d_weakdeps) == length (weakdeps)
1151
- return _insert_extension_triggers! (extensions_added, pkg, extensions, d_weakdeps)
1151
+ return _insert_extension_triggers ( pkg, extensions, d_weakdeps)
1152
1152
end
1153
1153
end
1154
1154
end
1155
1155
end
1156
1156
return nothing
1157
1157
end
1158
1158
1159
- function _insert_extension_triggers! (extensions_added :: Set{PkgId} , parent:: PkgId , extensions:: Dict{String, <:Any} , weakdeps:: Dict{String, <:Any} )
1159
+ function _insert_extension_triggers ( parent:: PkgId , extensions:: Dict{String, <:Any} , weakdeps:: Dict{String, <:Any} )
1160
1160
for (ext:: String , triggers:: Union{String, Vector{String}} ) in extensions
1161
1161
triggers isa String && (triggers = [triggers])
1162
1162
id = PkgId (uuid5 (parent. uuid, ext), ext)
1163
- # Only add triggers for an extension from one env.
1164
- id in extensions_added && continue
1165
- push! (extensions_added, id)
1163
+ if id in keys (EXT_PRIMED) || haskey (Base. loaded_modules, id)
1164
+ continue # extension is already primed or loaded, don't add it again
1165
+ end
1166
+ EXT_PRIMED[id] = parent
1166
1167
gid = ExtensionId (id, parent, 1 + length (triggers))
1167
1168
trigger1 = get! (Vector{ExtensionId}, EXT_DORMITORY, parent)
1168
1169
push! (trigger1, gid)
0 commit comments