From e55bbf728b788622a99a7f2e0072a44b4098a2cf Mon Sep 17 00:00:00 2001 From: odain Date: Wed, 7 Jan 2026 19:48:34 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B08981:=20review=20cleanup=20on=20module?= =?UTF-8?q?=20filtering=20due=20to=20extensoin=20removal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup/applicationinstaller.class.inc.php | 5 +---- setup/extensionsmap.class.inc.php | 5 ----- setup/modulediscovery.class.inc.php | 24 ++++++++++++++++++------ setup/setuputils.class.inc.php | 5 +---- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/setup/applicationinstaller.class.inc.php b/setup/applicationinstaller.class.inc.php index d348597a7..377998b05 100644 --- a/setup/applicationinstaller.class.inc.php +++ b/setup/applicationinstaller.class.inc.php @@ -257,10 +257,7 @@ class ApplicationInstaller $sSourceDir = $this->oParams->Get('source_dir', 'datamodels/latest'); $sExtensionDir = $this->oParams->Get('extensions_dir', 'extensions'); $aMiscOptions = $this->oParams->Get('options', []); - $aRemovedExtensionCodes = $this->oParams->Get('removed_extensions', null); - if (! is_array($aRemovedExtensionCodes)) { - $aRemovedExtensionCodes = []; - } + $aRemovedExtensionCodes = $this->oParams->Get('removed_extensions', []); $bUseSymbolicLinks = null; if ((isset($aMiscOptions['symlinks']) && $aMiscOptions['symlinks'])) { diff --git a/setup/extensionsmap.class.inc.php b/setup/extensionsmap.class.inc.php index 5785d2512..a541b7ac1 100644 --- a/setup/extensionsmap.class.inc.php +++ b/setup/extensionsmap.class.inc.php @@ -182,11 +182,6 @@ class iTopExtensionsMap */ public function DeclareExtensionAsRemoved(array $aExtensionCodes): void { - if (count($aExtensionCodes) === 0) { - \ModuleDiscovery::DeclareRemovedExtensions([]); - return; - } - $aRemovedExtension = []; foreach ($aExtensionCodes as $sCode) { /** @var \iTopExtension $oExtension */ diff --git a/setup/modulediscovery.class.inc.php b/setup/modulediscovery.class.inc.php index 84058c2d1..e1c00e76b 100755 --- a/setup/modulediscovery.class.inc.php +++ b/setup/modulediscovery.class.inc.php @@ -252,7 +252,6 @@ class ModuleDiscovery if (self::$m_aRemovedExtensions != $aRemovedExtension) { self::ResetCache(); } - SetupLog::Info(__METHOD__, null, ['count' => count($aRemovedExtension)]); self::$m_aRemovedExtensions = $aRemovedExtension; } @@ -262,6 +261,9 @@ class ModuleDiscovery return false; } + $aNonMatchingPaths = []; + $sModuleFilePath = $aModuleInfo[ModuleFileReader::MODULE_FILE_PATH]; + /** @var \iTopExtension $oExtension */ foreach (self::$m_aRemovedExtensions as $oExtension) { $sCurrentVersion = $oExtension->aModuleVersion[$sModuleName] ?? null; @@ -274,17 +276,27 @@ class ModuleDiscovery } $aCurrentModuleInfo = $oExtension->aModuleInfo[$sModuleName] ?? null; - - $sCurrentModuleFilePath = $aCurrentModuleInfo[ModuleFileReader::MODULE_FILE_PATH]; - $sPath = $aModuleInfo[ModuleFileReader::MODULE_FILE_PATH]; - if (realpath($sPath) !== realpath($sCurrentModuleFilePath)) { + if (is_null($aCurrentModuleInfo)) { + SetupLog::Warning("Missing $sModuleName in ".$oExtension->sLabel.". it should not happen"); continue; } - SetupLog::Info("Module considered as removed", null, ['extension_code' => $oExtension->sCode, 'module_name' => $sModuleName, 'module_version' => $sModuleVersion, ]); + // use case: same module coming from 2 different extensions + // we remove only the one coming from removed extensions + $sCurrentModuleFilePath = $aCurrentModuleInfo[ModuleFileReader::MODULE_FILE_PATH]; + if (realpath($sModuleFilePath) !== realpath($sCurrentModuleFilePath)) { + $aNonMatchingPaths[] = $sCurrentModuleFilePath; + continue; + } + + SetupLog::Info("Module considered as removed", null, ['extension_code' => $oExtension->sCode, 'module_name' => $sModuleName, 'module_version' => $sModuleVersion, ModuleFileReader::MODULE_FILE_PATH => $sCurrentModuleFilePath]); return true; } + if (count($aNonMatchingPaths) > 0) { + //add log for support + SetupLog::Info("Module kept as it came from non removed extensions", null, ['module_name' => $sModuleName, 'module_version' => $sModuleVersion, ModuleFileReader::MODULE_FILE_PATH => $sModuleFilePath, 'non_matching_paths' => $aNonMatchingPaths]); + } return false; } diff --git a/setup/setuputils.class.inc.php b/setup/setuputils.class.inc.php index cf77bdf79..e0e0c1519 100644 --- a/setup/setuputils.class.inc.php +++ b/setup/setuputils.class.inc.php @@ -1602,10 +1602,7 @@ JS $aDirsToScan[] = $sExtraDir; } $oProductionEnv = new RunTimeEnvironment(); - $aRemovedExtensionCodes = $oWizard->GetParameter('removed_extensions', null); - if (! is_array($aRemovedExtensionCodes)) { - $aRemovedExtensionCodes = []; - } + $aRemovedExtensionCodes = $oWizard->GetParameter('removed_extensions', []); $oExtensionsMap = new iTopExtensionsMap('production', $aDirsToScan); $oExtensionsMap->DeclareExtensionAsRemoved($aRemovedExtensionCodes);