@@ -1104,18 +1104,18 @@ mutable struct ExtensionId
11041104    ntriggers:: Int  #  how many more packages must be defined until this is loaded
11051105end 
11061106
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
11081109const  EXT_DORMITORY_FAILED =  ExtensionId[]
11091110
11101111function  insert_extension_triggers (pkg:: PkgId )
11111112    pkg. uuid ===  nothing  &&  return 
1112-     extensions_added =  Set {PkgId} ()
11131113    for  env in  load_path ()
1114-         insert_extension_triggers!  (extensions_added,  env, pkg)
1114+         insert_extension_triggers ( env, pkg)
11151115    end 
11161116end 
11171117
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} 
11191119    project_file =  env_project_file (env)
11201120    if  project_file isa  String
11211121        manifest_file =  project_file_manifest_path (project_file)
@@ -1133,7 +1133,7 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p
11331133                    extensions ===  nothing  &&  return 
11341134                    weakdeps ===  nothing  &&  return 
11351135                    if  weakdeps isa  Dict{String, Any}
1136-                         return  _insert_extension_triggers!  (extensions_added,  pkg, extensions, weakdeps)
1136+                         return  _insert_extension_triggers ( pkg, extensions, weakdeps)
11371137                    end 
11381138
11391139                    d_weakdeps =  Dict {String, String} ()
@@ -1148,21 +1148,22 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p
11481148                        d_weakdeps[dep_name] =  uuid
11491149                    end 
11501150                    @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)
11521152                end 
11531153            end 
11541154        end 
11551155    end 
11561156    return  nothing 
11571157end 
11581158
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} )
11601160    for  (ext:: String , triggers:: Union{String, Vector{String}} ) in  extensions
11611161        triggers isa  String &&  (triggers =  [triggers])
11621162        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
11661167        gid =  ExtensionId (id, parent, 1  +  length (triggers))
11671168        trigger1 =  get! (Vector{ExtensionId}, EXT_DORMITORY, parent)
11681169        push! (trigger1, gid)
0 commit comments