Skip to content

Commit 6d45001

Browse files
author
Oleksandr Karpenko
committed
Merge branch 'MAGETWO-44017' into BUGS
2 parents 8c9f767 + 27972ac commit 6d45001

File tree

4 files changed

+100
-12
lines changed

4 files changed

+100
-12
lines changed

lib/internal/Magento/Framework/Module/DependencyChecker.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ class DependencyChecker
3333
*/
3434
private $graph;
3535

36+
/**
37+
* @var PackageInfo
38+
*/
39+
protected $packageInfo;
40+
3641
/**
3742
* Constructor
3843
*
@@ -44,8 +49,8 @@ public function __construct(ModuleList $list, ModuleList\Loader $loader, Package
4449
{
4550
$this->enabledModuleList = $list->getNames();
4651
$this->fullModuleList = $loader->load();
47-
$packageInfo = $packageInfoFactory->create();
48-
$this->graph = $this->createGraph($packageInfo);
52+
$this->packageInfo = $packageInfoFactory->create();
53+
$this->graph = $this->createGraph();
4954
}
5055

5156
/**
@@ -93,7 +98,11 @@ private function checkDependencyGraph($isEnable, $moduleNames, $enabledModules)
9398
foreach ($moduleNames as $moduleName) {
9499
$dependenciesMissing = [];
95100
$paths = $this->graph->findPathsToReachableNodes($moduleName, $graphMode);
96-
foreach (array_keys($this->fullModuleList) as $module) {
101+
$modules = array_merge(
102+
array_keys($this->fullModuleList),
103+
$this->packageInfo->getNonExistingDependencies()
104+
);
105+
foreach ($modules as $module) {
97106
if (isset($paths[$module])) {
98107
if ($isEnable && !in_array($module, $enabledModules)) {
99108
$dependenciesMissing[$module] = $paths[$module];
@@ -110,24 +119,25 @@ private function checkDependencyGraph($isEnable, $moduleNames, $enabledModules)
110119
/**
111120
* Create the dependency graph
112121
*
113-
* @param PackageInfo $packageInfo
114122
* @return Graph
115123
*/
116-
private function createGraph(PackageInfo $packageInfo)
124+
private function createGraph()
117125
{
118126
$nodes = [];
119127
$dependencies = [];
120128

121129
// build the graph data
122130
foreach (array_keys($this->fullModuleList) as $moduleName) {
123131
$nodes[] = $moduleName;
124-
foreach ($packageInfo->getRequire($moduleName) as $dependModuleName) {
132+
foreach ($this->packageInfo->getRequire($moduleName) as $dependModuleName) {
125133
if ($dependModuleName) {
126134
$dependencies[] = [$moduleName, $dependModuleName];
127135
}
128136
}
129137
}
130-
$nodes = array_unique($nodes);
138+
$nodes = array_unique(
139+
array_merge($nodes, $this->packageInfo->getNonExistingDependencies())
140+
);
131141

132142
return new Graph($nodes, $dependencies);
133143
}

lib/internal/Magento/Framework/Module/PackageInfo.php

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ class PackageInfo
5353
*/
5454
private $componentRegistrar;
5555

56+
/**
57+
* @var array
58+
*/
59+
protected $nonExistingDependencies = [];
60+
5661
/**
5762
* Constructor
5863
*
@@ -104,7 +109,65 @@ private function load()
104109
public function getModuleName($packageName)
105110
{
106111
$this->load();
107-
return isset($this->packageModuleMap[$packageName]) ? $this->packageModuleMap[$packageName] : '';
112+
113+
$moduleName = null;
114+
if (isset($this->packageModuleMap[$packageName])) {
115+
$moduleName = $this->packageModuleMap[$packageName];
116+
} elseif ($this->isMagentoPackage($packageName)) {
117+
$moduleName = $this->convertPackageNameToModuleName($packageName);
118+
$this->addNonExistingDependency($moduleName);
119+
}
120+
121+
return $moduleName;
122+
}
123+
124+
/**
125+
* Add non existing dependency
126+
*
127+
* @param string $dependency
128+
* @return void
129+
*/
130+
protected function addNonExistingDependency($dependency)
131+
{
132+
if (!isset($this->nonExistingDependencies[$dependency])) {
133+
$this->nonExistingDependencies[$dependency] = $dependency;
134+
}
135+
}
136+
137+
/**
138+
* Return list of non existing dependencies
139+
*
140+
* @return array
141+
*/
142+
public function getNonExistingDependencies()
143+
{
144+
return $this->nonExistingDependencies;
145+
}
146+
147+
/**
148+
* Build module name based on internal package name
149+
*
150+
* @param string $packageName
151+
* @return string|null
152+
*/
153+
protected function convertPackageNameToModuleName($packageName)
154+
{
155+
$moduleName = str_replace('magento/module-', '', $packageName);
156+
$moduleName = str_replace('-', ' ', $moduleName);
157+
$moduleName = str_replace(' ', '', ucwords($moduleName));
158+
159+
return 'Magento_' . $moduleName;
160+
}
161+
162+
/**
163+
* Check if package is internal magento module
164+
*
165+
* @param string $packageName
166+
* @return bool
167+
*/
168+
protected function isMagentoPackage($packageName)
169+
{
170+
return strpos($packageName, 'magento/module-') === 0;
108171
}
109172

110173
/**

lib/internal/Magento/Framework/Module/Test/Unit/DependencyCheckerTest.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ public function setUp()
7070

7171
public function testCheckDependenciesWhenDisableModules()
7272
{
73-
$this->listMock
74-
->expects($this->any())
73+
$this->listMock->expects($this->any())
7574
->method('getNames')
7675
->will($this->returnValue(['A', 'B', 'C', 'D', 'E']));
76+
$this->packageInfoMock->expects($this->atLeastOnce())
77+
->method('getNonExistingDependencies')
78+
->willReturn([]);
7779
$this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
7880

7981
$actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D']);
@@ -83,6 +85,9 @@ public function testCheckDependenciesWhenDisableModules()
8385

8486
public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules()
8587
{
88+
$this->packageInfoMock->expects($this->atLeastOnce())
89+
->method('getNonExistingDependencies')
90+
->willReturn([]);
8691
$this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
8792

8893
$actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D'], ['C', 'D', 'E']);
@@ -92,10 +97,12 @@ public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules()
9297

9398
public function testCheckDependenciesWhenEnableModules()
9499
{
95-
$this->listMock
96-
->expects($this->any())
100+
$this->listMock->expects($this->any())
97101
->method('getNames')
98102
->will($this->returnValue(['C']));
103+
$this->packageInfoMock->expects($this->atLeastOnce())
104+
->method('getNonExistingDependencies')
105+
->willReturn([]);
99106
$this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
100107
$actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D']);
101108
$expected = [
@@ -107,6 +114,9 @@ public function testCheckDependenciesWhenEnableModules()
107114

108115
public function testCheckDependenciesWhenEnableModulesWithCurEnabledModules()
109116
{
117+
$this->packageInfoMock->expects($this->atLeastOnce())
118+
->method('getNonExistingDependencies')
119+
->willReturn([]);
110120
$this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
111121
$actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D'], ['C']);
112122
$expected = [

lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public function testGetModuleName()
5757
$this->assertEquals('C', $this->packageInfo->getModuleName('c'));
5858
$this->assertEquals('D', $this->packageInfo->getModuleName('d'));
5959
$this->assertEquals('E', $this->packageInfo->getModuleName('e'));
60+
$this->assertEquals(
61+
'Magento_TestModuleName',
62+
$this->packageInfo->getModuleName('magento/module-test-module-name')
63+
);
64+
$this->assertArrayHasKey('Magento_TestModuleName', $this->packageInfo->getNonExistingDependencies());
6065
}
6166

6267
public function testGetPackageName()

0 commit comments

Comments
 (0)