mirror of
https://github.com/Combodo/iTop.git
synced 2026-03-14 13:34:13 +01:00
Compare commits
4 Commits
feature/un
...
feature/93
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d8c9efa96 | ||
|
|
dfa8dd67de | ||
|
|
34e4b0969f | ||
|
|
8d745a597b |
@@ -87,11 +87,10 @@ class DataFeatureRemovalController extends Controller
|
||||
private function Analyze(): void
|
||||
{
|
||||
$sSourceEnv = MetaModel::GetEnvironment();
|
||||
$oDryRemovalRuntimeEnvironment = new DryRemovalRuntimeEnvironment();
|
||||
$oDryRemovalRuntimeEnvironment->Prepare($sSourceEnv, $this->aSelectedExtensionsForCheck);
|
||||
$oDryRemovalRuntimeEnvironment = new DryRemovalRuntimeEnvironment($sSourceEnv, $this->aSelectedExtensionsForCheck);
|
||||
$oDryRemovalRuntimeEnvironment->CompileFrom($sSourceEnv);
|
||||
|
||||
$oSetupAudit = new SetupAudit($sSourceEnv, DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV);
|
||||
$oSetupAudit = new SetupAudit($sSourceEnv);
|
||||
$aGetRemovedClasses = $oSetupAudit->GetIssues();
|
||||
IssueLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]);
|
||||
$this->aCountClassesToCleanup = $aGetRemovedClasses;
|
||||
|
||||
@@ -14,45 +14,35 @@ use utils;
|
||||
|
||||
class DryRemovalRuntimeEnvironment extends RunTimeEnvironment
|
||||
{
|
||||
public const DRY_REMOVAL_AUDIT_ENV = "extension-removal";
|
||||
|
||||
protected array $aExtensionsByCode;
|
||||
|
||||
/**
|
||||
* Toolset for building a run-time environment
|
||||
*
|
||||
* @param string $sEnvironment (e.g. 'test')
|
||||
* @param bool $bAutoCommit (make the target environment directly, or build a temporary one)
|
||||
* @param string $sSourceEnv: environment from which setup is inspired to simulate extension removal and usee CompileFrom...
|
||||
*/
|
||||
public function __construct($sEnvironment = self::DRY_REMOVAL_AUDIT_ENV, $bAutoCommit = true)
|
||||
public function __construct($sSourceEnv = 'production', array $aExtensionCodesToRemove = [])
|
||||
{
|
||||
parent::__construct($sEnvironment, $bAutoCommit);
|
||||
$this->aExtensionsByCode = [];
|
||||
parent::__construct($sSourceEnv, false);
|
||||
$this->aExtensionsByCode = $aExtensionCodesToRemove;
|
||||
$this->Prepare($sSourceEnv, $this->sTargetEnv);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sSourceEnv
|
||||
* @param array $aExtensionCodesToRemove
|
||||
*
|
||||
* @return void
|
||||
* @throws \Exception
|
||||
* @param string $sSourceEnv
|
||||
* @param string $sTargetEnv
|
||||
* @return void
|
||||
* @throws \MissingDependencyException
|
||||
*/
|
||||
public function Prepare(string $sSourceEnv, array $aExtensionCodesToRemove)
|
||||
private function Prepare(string $sSourceEnv, string $sTargetEnv)
|
||||
{
|
||||
|
||||
$sEnv = $this->sFinalEnv;
|
||||
$this->aExtensionsByCode = $aExtensionCodesToRemove;
|
||||
|
||||
$this->Cleanup();
|
||||
SetupUtils::copydir(APPROOT."/data/$sSourceEnv-modules", APPROOT."/data/$sEnv-modules");
|
||||
SetupUtils::copydir(APPROOT."/data/$sSourceEnv-modules", APPROOT."/data/$sTargetEnv-modules");
|
||||
SetupUtils::copydir(APPROOT."/conf/$sSourceEnv", APPROOT."/conf/$sTargetEnv");
|
||||
|
||||
$this->DeclareExtensionAsRemoved($aExtensionCodesToRemove);
|
||||
$this->DeclareExtensionAsRemoved($this->aExtensionsByCode);
|
||||
|
||||
$oDryRemovalConfig = clone(MetaModel::GetConfig());
|
||||
$oDryRemovalConfig->ChangeModulesPath($sSourceEnv, $this->sFinalEnv);
|
||||
$this->WriteConfigFileSafe($oDryRemovalConfig);
|
||||
|
||||
$sSourceDir = $oDryRemovalConfig->Get('source_dir');
|
||||
$sSourceDir = MetaModel::GetConfig()->Get('source_dir');
|
||||
$aSearchDirs = $this->GetExtraDirsToCompile($sSourceDir);
|
||||
|
||||
$aModulesToLoad = $this->GetModulesToLoad($sSourceEnv, $aSearchDirs);
|
||||
@@ -67,7 +57,7 @@ class DryRemovalRuntimeEnvironment extends RunTimeEnvironment
|
||||
|
||||
private function DeclareExtensionAsRemoved(array $aExtensionCodes): void
|
||||
{
|
||||
$oExtensionsMap = new iTopExtensionsMap($this->sFinalEnv);
|
||||
$oExtensionsMap = new iTopExtensionsMap($this->sTargetEnv);
|
||||
$oExtensionsMap->DeclareExtensionAsRemoved($aExtensionCodes);
|
||||
}
|
||||
|
||||
@@ -92,13 +82,31 @@ class DryRemovalRuntimeEnvironment extends RunTimeEnvironment
|
||||
return $aModulesToLoad;
|
||||
}
|
||||
|
||||
public function Cleanup()
|
||||
public function Cleanup(): void
|
||||
{
|
||||
$sEnv = $this->sFinalEnv;
|
||||
SetupUtils::rrmdir(APPROOT."/data/$sEnv-modules");
|
||||
SetupUtils::rrmdir(APPROOT."/data/cache-$sEnv");
|
||||
SetupUtils::rrmdir(APPROOT."/env-$sEnv");
|
||||
SetupUtils::rrmdir(APPROOT."/conf/$sEnv");
|
||||
@unlink(APPROOT."/data/datamodel-$sEnv.xml");
|
||||
$sEnv = $this->sTargetEnv;
|
||||
|
||||
//keep this folder empty
|
||||
SetupUtils::tidydir(APPROOT."/env-$sEnv");
|
||||
|
||||
$aFolders = [
|
||||
APPROOT."/data/$sEnv-modules",
|
||||
APPROOT."/data/cache-$sEnv",
|
||||
APPROOT."/conf/$sEnv",
|
||||
];
|
||||
foreach ($aFolders as $sFolder) {
|
||||
SetupUtils::tidydir($sFolder);
|
||||
SetupUtils::rmdir_safe($sFolder);
|
||||
}
|
||||
|
||||
$sFiles = [
|
||||
APPROOT."/data/datamodel-$sEnv.xml",
|
||||
APPROOT."/data/$sEnv.delta.prev.xml",
|
||||
];
|
||||
foreach ($sFiles as $sFile) {
|
||||
if (is_file($sFile)) {
|
||||
@unlink($sFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,17 +7,14 @@ require_once APPROOT.'setup/feature_removal/ModelReflectionSerializer.php';
|
||||
|
||||
class SetupAudit extends AbstractSetupAudit
|
||||
{
|
||||
//file used when present to trigger audit exception when testing specific setups
|
||||
public const GETISSUE_ERROR_MSG_FILE_FORTESTONLY = '.setup_audit_error_msg.txt';
|
||||
|
||||
private string $sEnvBefore;
|
||||
private string $sEnvAfter;
|
||||
|
||||
public function __construct(string $sEnvBefore, string $sEnvAfter)
|
||||
public function __construct(string $sEnvBefore)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->sEnvBefore = $sEnvBefore;
|
||||
$this->sEnvAfter = $sEnvAfter;
|
||||
$this->sEnvAfter = "$sEnvBefore-build";
|
||||
}
|
||||
|
||||
public function ComputeClasses(): void
|
||||
|
||||
@@ -25,6 +25,7 @@ require_once APPROOT.'setup/feature_removal/SetupAudit.php';
|
||||
require_once(APPROOT.'setup/sequencers/StepSequencer.php');
|
||||
require_once(APPROOT.'setup/sequencers/ApplicationInstallSequencer.php');
|
||||
|
||||
use Combodo\iTop\Setup\FeatureRemoval\DryRemovalRuntimeEnvironment;
|
||||
use Combodo\iTop\Setup\FeatureRemoval\SetupAudit;
|
||||
|
||||
class DataAuditSequencer extends ApplicationInstallSequencer
|
||||
@@ -34,7 +35,7 @@ class DataAuditSequencer extends ApplicationInstallSequencer
|
||||
protected function GetTempEnv()
|
||||
{
|
||||
$sTargetEnv = $this->GetTargetEnv();
|
||||
return 'dry-'.$sTargetEnv;
|
||||
return $sTargetEnv.'-build';
|
||||
}
|
||||
|
||||
protected function GetTargetDir()
|
||||
@@ -177,10 +178,9 @@ class DataAuditSequencer extends ApplicationInstallSequencer
|
||||
*/
|
||||
$oContextTag = new ContextTag(ContextTag::TAG_SETUP);
|
||||
|
||||
$sTargetEnvironment = $this->GetTempEnv();
|
||||
$sPreviousEnvironment = $this->GetTargetEnv();
|
||||
|
||||
$oSetupAudit = new SetupAudit($sPreviousEnvironment, $sTargetEnvironment);
|
||||
$oSetupAudit = new SetupAudit($sPreviousEnvironment);
|
||||
|
||||
//Make sure the MetaModel is started before analysing for issues
|
||||
$sConfFile = utils::GetConfigFilePath($sPreviousEnvironment);
|
||||
@@ -195,8 +195,29 @@ class DataAuditSequencer extends ApplicationInstallSequencer
|
||||
|
||||
protected function DoCleanup()
|
||||
{
|
||||
$sDestination = APPROOT.$this->GetTargetDir();
|
||||
SetupUtils::tidydir($sDestination);
|
||||
SetupUtils::rmdir_safe($sDestination);
|
||||
$sEnv = $this->GetTempEnv();
|
||||
|
||||
//keep this folder empty
|
||||
SetupUtils::tidydir(APPROOT."/env-$sEnv");
|
||||
|
||||
$aFolders = [
|
||||
APPROOT."/data/$sEnv-modules",
|
||||
APPROOT."/data/cache-$sEnv",
|
||||
APPROOT."/conf/$sEnv",
|
||||
];
|
||||
foreach ($aFolders as $sFolder) {
|
||||
SetupUtils::tidydir($sFolder);
|
||||
SetupUtils::rmdir_safe($sFolder);
|
||||
}
|
||||
|
||||
$sFiles = [
|
||||
APPROOT."/data/datamodel-$sEnv.xml",
|
||||
APPROOT."/data/$sEnv.delta.prev.xml",
|
||||
];
|
||||
foreach ($sFiles as $sFile) {
|
||||
if (is_file($sFile)) {
|
||||
@unlink($sFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,11 +51,10 @@ class SetupAuditTest extends ItopCustomDatamodelTestCase
|
||||
|
||||
public function testComputeDryRemoval()
|
||||
{
|
||||
$oDryRemovalRuntimeEnvt = new DryRemovalRuntimeEnvironment();
|
||||
$oDryRemovalRuntimeEnvt->Prepare($this->GetTestEnvironment(), ['nominal_ext1', 'finalclass_ext2']);
|
||||
$oDryRemovalRuntimeEnvt = new DryRemovalRuntimeEnvironment($this->GetTestEnvironment(), ['nominal_ext1', 'finalclass_ext2']);
|
||||
$oDryRemovalRuntimeEnvt->CompileFrom($this->GetTestEnvironment());
|
||||
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment(), DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV);
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment());
|
||||
|
||||
$expected = [
|
||||
"Feature1Module1MyClass",
|
||||
@@ -88,7 +87,7 @@ class SetupAuditTest extends ItopCustomDatamodelTestCase
|
||||
$oOrg = $this->CreateOrganization($sUID);
|
||||
$this->createObject('FinalClassFeature1Module1MyFinalClassFromLocation', ['org_id' => $oOrg->GetKey(), 'name' => $sUID, 'name2' => uniqid()]);
|
||||
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment(), DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV);
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment());
|
||||
$aRemovedClasses = [
|
||||
"Feature1Module1MyClass",
|
||||
"FinalClassFeature1Module1MyClass",
|
||||
@@ -114,7 +113,7 @@ class SetupAuditTest extends ItopCustomDatamodelTestCase
|
||||
$this->createObject('FinalClassFeature1Module1MyFinalClassFromLocation', ['org_id' => $oOrg->GetKey(), 'name' => $sUID, 'name2' => uniqid()]);
|
||||
$this->createObject('FinalClassFeature2Module1MyFinalClassFromLocation', ['org_id' => $oOrg->GetKey(), 'name' => $sUID, 'name2' => uniqid()]);
|
||||
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment(), DryRemovalRuntimeEnvironment::DRY_REMOVAL_AUDIT_ENV);
|
||||
$oSetupAudit = new SetupAudit(MetaModel::GetEnvironment());
|
||||
$aRemovedClasses = [
|
||||
"Feature1Module1MyClass",
|
||||
"FinalClassFeature1Module1MyClass",
|
||||
|
||||
Reference in New Issue
Block a user