Improved Plugin Manager's check for looping dependencies

This commit is contained in:
Maruno17
2021-04-25 20:32:31 +01:00
parent 0b757d3863
commit 3e7ffb71a7
2 changed files with 9 additions and 4 deletions

View File

@@ -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

View File

@@ -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