mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
enhance/fix recursive deps computation
This commit is contained in:
@@ -383,7 +383,7 @@ TXT;
|
||||
$aModuleDepsCount = [];
|
||||
/** @var XmlModule $oXmlModule */
|
||||
foreach ($this->aModules as $oXmlModule) {
|
||||
$aModuleDepsCount[$oXmlModule->sModuleName] = count($oXmlModule->GetExpandedModuleNames());
|
||||
$aModuleDepsCount[$oXmlModule->sModuleName] = count($oXmlModule->GetExpandedModuleNames($this->aModules));
|
||||
}
|
||||
|
||||
$aOrderModules=[];
|
||||
@@ -410,7 +410,7 @@ TXT;
|
||||
foreach ($aModuleDepsCount as $sStillToProcessModuleName => $c){
|
||||
/** @var XmlModule $oXmlStillToProcessModule */
|
||||
$oXmlStillToProcessModule = $this->aModules[$sStillToProcessModuleName];
|
||||
if (in_array($sModuleName, $oXmlStillToProcessModule->GetExpandedModuleNames())){
|
||||
if (in_array($sModuleName, $oXmlStillToProcessModule->GetExpandedModuleNames($this->aModules))){
|
||||
$aModuleDepsCount[$sStillToProcessModuleName] = $c - 1 ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,15 +85,22 @@ class XmlModule {
|
||||
}
|
||||
}
|
||||
|
||||
public function GetExpandedModuleNames() : array {
|
||||
if (count($this->aExpandedDependencyModulesNames) ==0){
|
||||
private bool $bExpandedModuleNamesComputed=false;
|
||||
public function GetExpandedModuleNames(array $aModules) : array {
|
||||
if ($this->bExpandedModuleNamesComputed){
|
||||
return $this->aExpandedDependencyModulesNames;
|
||||
}
|
||||
|
||||
$this->bExpandedModuleNamesComputed = true;
|
||||
|
||||
$aRes= [];
|
||||
foreach ($this->aDependencyModulesNames as $sDependency){
|
||||
foreach ($this->aDependencyModulesNames as $sDependency => $oXmlModules){
|
||||
$oiTopCoreModuleDependency = new ModuleDependency($sDependency);
|
||||
$aRes = array_merge($aRes, $oiTopCoreModuleDependency->GetPotentialPrerequisiteModuleNames());
|
||||
foreach ($oiTopCoreModuleDependency->GetPotentialPrerequisiteModuleNames() as $sName){
|
||||
$oDependencyModule = $aModules[$sName] ?? null;
|
||||
$aRes[]=$sName;
|
||||
$aRes = array_merge($aRes, $oDependencyModule->GetExpandedModuleNames($aModules));
|
||||
}
|
||||
}
|
||||
|
||||
$this->aExpandedDependencyModulesNames = array_unique($aRes);
|
||||
|
||||
Reference in New Issue
Block a user