mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Improved Plugin Manager's check for looping dependencies
This commit is contained in:
@@ -32,6 +32,7 @@ class Dir
|
|||||||
# Checks for existing directory, gets around accents
|
# Checks for existing directory, gets around accents
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
def self.safe?(dir)
|
def self.safe?(dir)
|
||||||
|
return false if !FileTest.directory?(dir)
|
||||||
ret = false
|
ret = false
|
||||||
self.chdir(dir) { ret = true } rescue nil
|
self.chdir(dir) { ret = true } rescue nil
|
||||||
return ret
|
return ret
|
||||||
|
|||||||
@@ -350,7 +350,8 @@ module PluginManager
|
|||||||
def self.error(msg)
|
def self.error(msg)
|
||||||
Graphics.update
|
Graphics.update
|
||||||
t = Thread.new do
|
t = Thread.new do
|
||||||
p "Plugin Error:\n#{msg}"
|
echoln "Plugin Error:\r\n#{msg}"
|
||||||
|
p "Plugin Error: #{msg}"
|
||||||
Thread.exit
|
Thread.exit
|
||||||
end
|
end
|
||||||
while t.status
|
while t.status
|
||||||
@@ -505,14 +506,17 @@ module PluginManager
|
|||||||
def self.validateDependencies(name, meta, og = nil)
|
def self.validateDependencies(name, meta, og = nil)
|
||||||
# exit if no registered dependency
|
# exit if no registered dependency
|
||||||
return nil if !meta[name] || !meta[name][:dependencies]
|
return nil if !meta[name] || !meta[name][:dependencies]
|
||||||
|
og = [name] if !og
|
||||||
# go through all dependencies
|
# go through all dependencies
|
||||||
for dname in meta[name][:dependencies]
|
for dname in meta[name][:dependencies]
|
||||||
# clean the name to a simple string
|
# clean the name to a simple string
|
||||||
dname = dname[0] if dname.is_a?(Array) && dname.length == 2
|
dname = dname[0] if dname.is_a?(Array) && dname.length == 2
|
||||||
dname = dname[1] if dname.is_a?(Array) && dname.length == 3
|
dname = dname[1] if dname.is_a?(Array) && dname.length == 3
|
||||||
# catch looping dependecy issue
|
# catch looping dependency issue
|
||||||
self.error("Plugin '#{og}' has looping dependencies which cannot be resolved automatically.") if !og.nil? && og == dname
|
self.error("Plugin '#{og[0]}' has looping dependencies which cannot be resolved automatically.") if !og.nil? && og.include?(dname)
|
||||||
self.validateDependencies(dname, meta, name)
|
new_og = og.clone
|
||||||
|
new_og.push(dname)
|
||||||
|
self.validateDependencies(dname, meta, new_og)
|
||||||
end
|
end
|
||||||
return name
|
return name
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user