forget dependency computation optimization seen as too risky + keep only user friendly sort in case of setup error

This commit is contained in:
odain
2025-09-11 12:08:11 +02:00
parent 6ed0f8ef3a
commit 64bec2181f
5 changed files with 140 additions and 265 deletions

View File

@@ -121,14 +121,11 @@ class iTopCoreModuleDependencySort {
* @param array $aModules The list of modules to process: 'id' => $aModuleInfo
* @param bool $bAbortOnMissingDependency ...
* @param array $aModulesToLoad List of modules to search for, defaults to all if omitted
* @param int $iLoopCount: used to count loop count for testing purpose (see if algo is optimized)
* @return array
* @throws \MissingDependencyException
*/
public static function OrderModulesByDependencies($aModules, $bAbortOnMissingDependency = false, $aModulesToLoad = null, ?int &$iLoopCount=0)
public static function OrderModulesByDependencies($aModules, $bAbortOnMissingDependency = false, $aModulesToLoad = null)
{
$iLoopCount=0;
// Order the modules to take into account their inter-dependencies
$aUnresolvedDependencyModules = [];
$aSelectedModules = [];
@@ -143,17 +140,13 @@ class iTopCoreModuleDependencySort {
$aSelectedModules[$sModuleName] = true;
}
}
self::SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
ksort($aUnresolvedDependencyModules);
$aOrderedModules = [];
$aModuleVersions=[];
$iPreviousLoopDepencyCount=-1;
$iNextLoopCount=count($aUnresolvedDependencyModules);
while(($iNextLoopCount!=$iPreviousLoopDepencyCount) //stop loop when no new dependency is resolved
&& ($iNextLoopCount > 0) //still remaining dependencies
)
$iLoopCount = 1;
while(($iLoopCount < count($aModules)+1) && (count($aUnresolvedDependencyModules) > 0) )
{
$iLoopCount++;
$iPreviousLoopDepencyCount=$iNextLoopCount;
foreach($aUnresolvedDependencyModules as $sModuleId => $oModule)
{
/** @var iTopCoreModule $oModule */
@@ -164,16 +157,15 @@ class iTopCoreModuleDependencySort {
}
}
$iNextLoopCount=count($aUnresolvedDependencyModules);
self::SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
$iLoopCount++;
}
if ($bAbortOnMissingDependency && count($aUnresolvedDependencyModules) > 0)
{
self::SortModulesByCountOfDepencenciesDescending($aUnresolvedDependencyModules);
$aModulesInfo = [];
$aModuleDeps = [];
/** @var iTopCoreModule $oModule */
foreach($aUnresolvedDependencyModules as $sModuleId => $oModule)
{
$aModule = $aModules[$sModuleId];
@@ -196,11 +188,12 @@ class iTopCoreModuleDependencySort {
$oException->aModulesInfo = $aModulesInfo;
throw $oException;
}
// Return the ordered list, so that the dependencies are met...
$aResult = array();
foreach($aOrderedModules as $sModuleId)
$aResult = [];
foreach($aOrderedModules as $sId)
{
$aResult[$sModuleId] = $aModules[$sModuleId];
$aResult[$sId] = $aModules[$sId];
}
return $aResult;
}

View File

@@ -97,7 +97,6 @@ class ModuleDiscovery
protected static $m_sModulePath = null;
private static PhpExpressionEvaluator $oPhpExpressionEvaluator;
private static mixed $bNewFeedback = false;
protected static function SetModulePath($sModulePath)
{
@@ -222,9 +221,6 @@ class ModuleDiscovery
return self::OrderModulesByDependencies(self::$m_aModules, $bAbortOnMissingDependency, $aModulesToLoad);
}
public static function UseNewUiFeedback($bNewFeedback){
self::$bNewFeedback=$bNewFeedback;
}
/**
* Arrange an list of modules, based on their (inter) dependencies
* @param array $aModules The list of modules to process: 'id' => $aModuleInfo
@@ -232,7 +228,7 @@ class ModuleDiscovery
* @param array $aModulesToLoad List of modules to search for, defaults to all if omitted
* @return array
* @throws \MissingDependencyException
*/
*/
public static function OrderModulesByDependencies($aModules, $bAbortOnMissingDependency = false, $aModulesToLoad = null)
{
// Order the modules to take into account their inter-dependencies
@@ -272,10 +268,6 @@ class ModuleDiscovery
}
if ($bAbortOnMissingDependency && count($aDependencies) > 0)
{
if (self::$bNewFeedback){
iTopCoreModuleDependencySort::OrderModulesByDependencies($aModules, $bAbortOnMissingDependency, $aModulesToLoad);
}
$aModulesInfo = [];
$aModuleDeps = [];
foreach($aDependencies as $sId => $aDeps)