Skip to content

Commit 9701889

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-50934-failed-upgrade' into PR_Branch
2 parents abda8a5 + 86fc062 commit 9701889

File tree

18 files changed

+988
-363
lines changed

18 files changed

+988
-363
lines changed

app/code/Magento/Braintree/etc/di.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
</type>
4040

4141
<!-- Logger, initialized with BraintreeConfig -->
42-
<virtualType name="BraintreeLogger" type="Magento\Payment\Model\Method\Logger">
42+
<virtualType name="BraintreeLoggerForTransactionSale" type="Magento\Payment\Model\Method\Logger">
4343
<arguments>
4444
<argument name="config" xsi:type="object">Magento\Braintree\Gateway\Config\Config</argument>
4545
</arguments>
@@ -164,22 +164,22 @@
164164

165165
<type name="Magento\Braintree\Gateway\Http\Client\TransactionSale">
166166
<arguments>
167-
<argument name="customLogger" xsi:type="object">BraintreeLogger</argument>
167+
<argument name="customLogger" xsi:type="object">BraintreeLoggerForTransactionSale</argument>
168168
</arguments>
169169
</type>
170170
<type name="Magento\Braintree\Gateway\Http\Client\TransactionSubmitForSettlement">
171171
<arguments>
172-
<argument name="customLogger" xsi:type="object">BraintreeLogger</argument>
172+
<argument name="customLogger" xsi:type="object">BraintreeLoggerForTransactionSale</argument>
173173
</arguments>
174174
</type>
175175
<type name="Magento\Braintree\Gateway\Http\Client\TransactionRefund">
176176
<arguments>
177-
<argument name="customLogger" xsi:type="object">BraintreeLogger</argument>
177+
<argument name="customLogger" xsi:type="object">BraintreeLoggerForTransactionSale</argument>
178178
</arguments>
179179
</type>
180180
<type name="Magento\Braintree\Gateway\Http\Client\TransactionVoid">
181181
<arguments>
182-
<argument name="customLogger" xsi:type="object">BraintreeLogger</argument>
182+
<argument name="customLogger" xsi:type="object">BraintreeLoggerForTransactionSale</argument>
183183
</arguments>
184184
</type>
185185

@@ -375,7 +375,7 @@
375375
</arguments>
376376
</virtualType>
377377

378-
<virtualType name="BraintreeTransactionsCollectionFactory" type="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
378+
<virtualType name="BraintreeTransactionsCollectionFactoryForReporting" type="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
379379
<arguments>
380380
<argument name="collections" xsi:type="array">
381381
<item name="braintree_report_data_source" xsi:type="string">Magento\Braintree\Model\Report\TransactionsCollection</item>
@@ -385,7 +385,7 @@
385385

386386
<virtualType name="BraintreeTransactionsReporting" type="Magento\Framework\View\Element\UiComponent\DataProvider\Reporting">
387387
<arguments>
388-
<argument name="collectionFactory" xsi:type="object">BraintreeTransactionsCollectionFactory</argument>
388+
<argument name="collectionFactory" xsi:type="object">BraintreeTransactionsCollectionFactoryForReporting</argument>
389389
</arguments>
390390
</virtualType>
391391

lib/internal/Magento/Framework/App/ObjectManagerFactory.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Framework\ObjectManager\Definition\Compiled\Serialized;
1414
use Magento\Framework\App\ObjectManager\Environment;
1515
use Magento\Framework\Config\File\ConfigFilePool;
16+
use Magento\Framework\Code\GeneratedFiles;
1617

1718
/**
1819
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -108,6 +109,10 @@ public function __construct(DirectoryList $directoryList, DriverPool $driverPool
108109
*/
109110
public function create(array $arguments)
110111
{
112+
$writeFactory = new \Magento\Framework\Filesystem\Directory\WriteFactory($this->driverPool);
113+
$generatedFiles = new GeneratedFiles($this->directoryList, $writeFactory);
114+
$generatedFiles->regenerate();
115+
111116
$deploymentConfig = $this->createDeploymentConfig($this->directoryList, $this->configFilePool, $arguments);
112117
$arguments = array_merge($deploymentConfig->get(), $arguments);
113118
$definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory(
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Code;
7+
8+
use Magento\Framework\App\Filesystem\DirectoryList;
9+
use Magento\Framework\Filesystem\Directory\WriteFactory;
10+
use Magento\Framework\Filesystem\Directory\WriteInterface;
11+
12+
/**
13+
* Regenerates generated code and DI configuration
14+
*/
15+
class GeneratedFiles
16+
{
17+
/**
18+
* Separator literal to assemble timer identifier from timer names
19+
*/
20+
const REGENERATE_FLAG = '/var/.regenerate';
21+
22+
/**
23+
* @var DirectoryList
24+
*/
25+
private $directoryList;
26+
27+
/**
28+
* @var WriteInterface
29+
*/
30+
private $write;
31+
32+
/**
33+
* Constructor
34+
*
35+
* @param DirectoryList $directoryList
36+
* @param WriteFactory $writeFactory
37+
*/
38+
public function __construct(DirectoryList $directoryList, WriteFactory $writeFactory)
39+
{
40+
$this->directoryList = $directoryList;
41+
$this->write = $writeFactory->create(BP);
42+
}
43+
44+
/**
45+
* Clean generated code and DI configuration
46+
*
47+
* @return void
48+
*/
49+
public function regenerate()
50+
{
51+
if ($this->write->isExist(self::REGENERATE_FLAG)) {
52+
$generationPath = $this->write->getRelativePath($this->directoryList->getPath(DirectoryList::GENERATION));
53+
$diPath = $this->write->getRelativePath($this->directoryList->getPath(DirectoryList::DI));
54+
55+
if ($this->write->isDirectory($generationPath)) {
56+
$this->write->delete($generationPath);
57+
}
58+
if ($this->write->isDirectory($diPath)) {
59+
$this->write->delete($diPath);
60+
}
61+
$this->write->delete(self::REGENERATE_FLAG);
62+
}
63+
}
64+
65+
/**
66+
* Create flag for regeneration of code and di
67+
*
68+
* @return void
69+
*/
70+
public function requestRegeneration()
71+
{
72+
$this->write->touch(self::REGENERATE_FLAG);
73+
}
74+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Code\Test\Unit;
8+
9+
use Magento\Framework\App\Filesystem\DirectoryList;
10+
use Magento\Framework\Code\GeneratedFiles;
11+
12+
class GeneratedFilesTest extends \PHPUnit_Framework_TestCase
13+
{
14+
/**
15+
* @var Magento\Framework\App\Filesystem\DirectoryList | \PHPUnit_Framework_MockObject_MockObject
16+
*/
17+
private $directoryList;
18+
19+
/**
20+
* @var Magento\Framework\Filesystem\Directory\WriteInterface | \PHPUnit_Framework_MockObject_MockObject
21+
*/
22+
private $writeInterface;
23+
24+
/**
25+
* @var \Magento\Framework\Code\GeneratedFiles
26+
*/
27+
private $model;
28+
29+
protected function setUp()
30+
{
31+
$this->directoryList = $this->getMock('\Magento\Framework\App\Filesystem\DirectoryList', [], [], '', false);
32+
$writeFactory = $this->getMock('\Magento\Framework\Filesystem\Directory\WriteFactory', [], [], '', false);
33+
$this->writeInterface = $this->getMock(
34+
'\Magento\Framework\Filesystem\Directory\WriteInterface',
35+
[],
36+
[],
37+
'',
38+
false
39+
);
40+
$writeFactory->expects($this->once())->method('create')->willReturn($this->writeInterface);
41+
$this->model = new GeneratedFiles($this->directoryList, $writeFactory);
42+
}
43+
44+
/**
45+
* @param array $getPathMap
46+
* @param array $isDirectoryMap
47+
* @param array $deleteMap
48+
* @dataProvider regenerateDataProvider
49+
*/
50+
public function testRegenerate($getPathMap, $isDirectoryMap, $deleteMap)
51+
{
52+
53+
$this->writeInterface
54+
->expects($this->once())
55+
->method('isExist')
56+
->with(GeneratedFiles::REGENERATE_FLAG)
57+
->willReturn(true);
58+
$this->directoryList->expects($this->exactly(2))->method('getPath')->willReturnMap($getPathMap);
59+
$this->writeInterface->expects($this->exactly(2))->method('getRelativePath')->willReturnMap($getPathMap);
60+
$this->writeInterface->expects($this->exactly(2))->method('isDirectory')->willReturnMap($isDirectoryMap);
61+
$this->writeInterface->expects($this->exactly(1))->method('delete')->willReturnMap($deleteMap);
62+
$this->model->regenerate();
63+
}
64+
65+
/**
66+
* @return array
67+
*/
68+
public function regenerateDataProvider()
69+
{
70+
$pathToGeneration = 'path/to/generation';
71+
$pathToDi = 'path/to/di';
72+
73+
$getPathMap = [[DirectoryList::GENERATION, $pathToGeneration],
74+
[DirectoryList::DI, $pathToDi]];
75+
$deleteMap = [[BP . '/' . $pathToGeneration, true],
76+
[BP . '/' . $pathToDi, true],
77+
[BP . GeneratedFiles::REGENERATE_FLAG, true],
78+
];
79+
80+
return [
81+
'runAll' => [ $getPathMap, [[BP . '/' . $pathToGeneration, true],
82+
[BP . '/' . $pathToDi, true]], $deleteMap ],
83+
'noDIfolder' => [ $getPathMap, [[BP . '/' . $pathToGeneration, true],
84+
[BP . '/' . $pathToDi, false]], $deleteMap],
85+
'noGenerationfolder' => [$getPathMap, [[BP . '/' . $pathToGeneration, false],
86+
[BP . '/' . $pathToDi, true]], $deleteMap],
87+
'nofolders' => [ $getPathMap, [[BP . '/' . $pathToGeneration, false],
88+
[BP . '/' . $pathToDi, false]], $deleteMap],
89+
];
90+
}
91+
92+
public function testRegenerateWithNoFlag()
93+
{
94+
$this->writeInterface
95+
->expects($this->once())
96+
->method('isExist')
97+
->with(GeneratedFiles::REGENERATE_FLAG)
98+
->willReturn(false);
99+
$this->directoryList->expects($this->never())->method('getPath');
100+
$this->writeInterface->expects($this->never())->method('getPath');
101+
$this->writeInterface->expects($this->never())->method('delete');
102+
$this->model->regenerate();
103+
}
104+
105+
public function testRequestRegeneration()
106+
{
107+
$this->writeInterface->expects($this->once())->method("touch");
108+
$this->model->requestRegeneration();
109+
}
110+
}

setup/src/Magento/Setup/Console/Command/AbstractModuleManageCommand.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Setup\Console\Command;
77

8+
use Magento\Framework\Code\GeneratedFiles;
9+
use Magento\Setup\Model\ObjectManagerProvider;
810
use Symfony\Component\Console\Input\InputInterface;
911
use Symfony\Component\Console\Output\OutputInterface;
1012
use Symfony\Component\Console\Input\InputOption;
@@ -19,6 +21,11 @@ abstract class AbstractModuleManageCommand extends AbstractModuleCommand
1921
const INPUT_KEY_ALL = 'all';
2022
const INPUT_KEY_FORCE = 'force';
2123

24+
/**
25+
* @var GeneratedFiles
26+
*/
27+
protected $generatedFiles;
28+
2229
/**
2330
* @var DeploymentConfig
2431
*/
@@ -91,6 +98,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
9198
}
9299
$this->setIsEnabled($isEnable, $modulesToChange, $output);
93100
$this->cleanup($input, $output);
101+
$this->getGeneratedFiles()->requestRegeneration();
94102
if ($force) {
95103
$output->writeln(
96104
'<error>Alert: You used the --force option.'
@@ -165,7 +173,7 @@ abstract protected function isEnable();
165173

166174
/**
167175
* Get deployment config
168-
*
176+
*
169177
* @return DeploymentConfig
170178
* @deprecated
171179
*/
@@ -176,4 +184,18 @@ private function getDeploymentConfig()
176184
}
177185
return $this->deploymentConfig;
178186
}
187+
188+
/**
189+
* Get deployment config
190+
*
191+
* @return GeneratedFiles
192+
* @deprecated
193+
*/
194+
private function getGeneratedFiles()
195+
{
196+
if (!($this->generatedFiles instanceof GeneratedFiles)) {
197+
return $this->objectManager->get(GeneratedFiles::class);
198+
}
199+
return $this->generatedFiles;
200+
}
179201
}

setup/src/Magento/Setup/Console/Command/UpgradeCommand.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
*/
66
namespace Magento\Setup\Console\Command;
77

8+
use Magento\Framework\ObjectManagerInterface;
89
use Magento\Framework\Setup\ConsoleLogger;
910
use Magento\Setup\Model\InstallerFactory;
11+
use Magento\Setup\Model\ObjectManagerProvider;
1012
use Symfony\Component\Console\Input\InputInterface;
1113
use Symfony\Component\Console\Input\InputOption;
1214
use Symfony\Component\Console\Output\OutputInterface;
@@ -28,14 +30,23 @@ class UpgradeCommand extends AbstractSetupCommand
2830
*/
2931
private $installerFactory;
3032

33+
/**
34+
* Object Manager
35+
*
36+
* @var ObjectManagerProvider
37+
*/
38+
private $objectManagerProvider;
39+
3140
/**
3241
* Constructor
3342
*
3443
* @param InstallerFactory $installerFactory
44+
* @param ObjectManagerProvider $objectManagerProvider
3545
*/
36-
public function __construct(InstallerFactory $installerFactory)
46+
public function __construct(InstallerFactory $installerFactory, ObjectManagerProvider $objectManagerProvider)
3747
{
3848
$this->installerFactory = $installerFactory;
49+
$this->objectManagerProvider = $objectManagerProvider;
3950
parent::__construct();
4051
}
4152

@@ -65,6 +76,16 @@ protected function configure()
6576
*/
6677
protected function execute(InputInterface $input, OutputInterface $output)
6778
{
79+
/** @var \Magento\Framework\ObjectManagerInterface $objectManager */
80+
$objectManager = $this->objectManagerProvider->get();
81+
$areaCode = 'setup';
82+
/** @var \Magento\Framework\App\State $appState */
83+
$appState = $objectManager->get('Magento\Framework\App\State');
84+
$appState->setAreaCode($areaCode);
85+
/** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */
86+
$configLoader = $objectManager->get('Magento\Framework\ObjectManager\ConfigLoaderInterface');
87+
$objectManager->configure($configLoader->load($areaCode));
88+
6889
$keepGenerated = $input->getOption(self::INPUT_KEY_KEEP_GENERATED);
6990
$installer = $this->installerFactory->create(new ConsoleLogger($output));
7091
$installer->updateModulesSequence($keepGenerated);

0 commit comments

Comments
 (0)