From c52c1e0b9b9818f483177af6bd4282cb3a0e9cdf Mon Sep 17 00:00:00 2001 From: Carlos Tasada Date: Sun, 31 Jan 2021 14:27:34 +0100 Subject: [PATCH 1/8] [HttpFoundation] Setting `REQUEST_TIME_FLOAT` when constructing a Request object --- src/Symfony/Component/HttpFoundation/Request.php | 1 + .../HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 3c69f20ff0..37ab50188e 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -333,6 +333,7 @@ class Request 'SCRIPT_FILENAME' => '', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'REQUEST_TIME' => time(), + 'REQUEST_TIME_FLOAT' => microtime(true), ], $server); $server['PATH_INFO'] = ''; diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index c25297dbe4..f1ffd9a4dc 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -23,6 +23,9 @@ use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; +/** + * @group time-sensitive + */ class InlineFragmentRendererTest extends TestCase { public function testRender() From 33e6af5850ce167ddef96c467cd86b9a6f986f2c Mon Sep 17 00:00:00 2001 From: Yonel Ceruto Date: Sun, 31 Jan 2021 21:39:35 -0500 Subject: [PATCH 2/8] Fixed updating catalogue metadata from intl domain --- .../Command/TranslationUpdateCommand.php | 5 ++++ .../Translation/Catalogue/MergeOperation.php | 14 ++++++----- .../Translation/Catalogue/TargetOperation.php | 14 ++++++----- .../Tests/Catalogue/MergeOperationTest.php | 23 +++++++++++++++++++ .../Tests/Catalogue/TargetOperationTest.php | 22 ++++++++++++++++++ 5 files changed, 66 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php index 138afc5e73..e922398b28 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php +++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationUpdateCommand.php @@ -369,6 +369,11 @@ EOF foreach ($catalogue->getResources() as $resource) { $filteredCatalogue->addResource($resource); } + if ($metadata = $catalogue->getMetadata('', $intlDomain)) { + foreach ($metadata as $k => $v) { + $filteredCatalogue->setMetadata($k, $v, $intlDomain); + } + } if ($metadata = $catalogue->getMetadata('', $domain)) { foreach ($metadata as $k => $v) { $filteredCatalogue->setMetadata($k, $v, $domain); diff --git a/src/Symfony/Component/Translation/Catalogue/MergeOperation.php b/src/Symfony/Component/Translation/Catalogue/MergeOperation.php index d2f4abd13f..d55542c0c8 100644 --- a/src/Symfony/Component/Translation/Catalogue/MergeOperation.php +++ b/src/Symfony/Component/Translation/Catalogue/MergeOperation.php @@ -38,9 +38,10 @@ class MergeOperation extends AbstractOperation foreach ($this->source->all($domain) as $id => $message) { $this->messages[$domain]['all'][$id] = $message; - $this->result->add([$id => $message], $this->source->defines($id, $intlDomain) ? $intlDomain : $domain); - if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) { - $this->result->setMetadata($id, $keyMetadata, $domain); + $d = $this->source->defines($id, $intlDomain) ? $intlDomain : $domain; + $this->result->add([$id => $message], $d); + if (null !== $keyMetadata = $this->source->getMetadata($id, $d)) { + $this->result->setMetadata($id, $keyMetadata, $d); } } @@ -48,9 +49,10 @@ class MergeOperation extends AbstractOperation if (!$this->source->has($id, $domain)) { $this->messages[$domain]['all'][$id] = $message; $this->messages[$domain]['new'][$id] = $message; - $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); - if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) { - $this->result->setMetadata($id, $keyMetadata, $domain); + $d = $this->target->defines($id, $intlDomain) ? $intlDomain : $domain; + $this->result->add([$id => $message], $d); + if (null !== $keyMetadata = $this->target->getMetadata($id, $d)) { + $this->result->setMetadata($id, $keyMetadata, $d); } } } diff --git a/src/Symfony/Component/Translation/Catalogue/TargetOperation.php b/src/Symfony/Component/Translation/Catalogue/TargetOperation.php index 22aa9a3911..8221d184d2 100644 --- a/src/Symfony/Component/Translation/Catalogue/TargetOperation.php +++ b/src/Symfony/Component/Translation/Catalogue/TargetOperation.php @@ -49,9 +49,10 @@ class TargetOperation extends AbstractOperation foreach ($this->source->all($domain) as $id => $message) { if ($this->target->has($id, $domain)) { $this->messages[$domain]['all'][$id] = $message; - $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); - if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) { - $this->result->setMetadata($id, $keyMetadata, $domain); + $d = $this->target->defines($id, $intlDomain) ? $intlDomain : $domain; + $this->result->add([$id => $message], $d); + if (null !== $keyMetadata = $this->source->getMetadata($id, $d)) { + $this->result->setMetadata($id, $keyMetadata, $d); } } else { $this->messages[$domain]['obsolete'][$id] = $message; @@ -62,9 +63,10 @@ class TargetOperation extends AbstractOperation if (!$this->source->has($id, $domain)) { $this->messages[$domain]['all'][$id] = $message; $this->messages[$domain]['new'][$id] = $message; - $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); - if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) { - $this->result->setMetadata($id, $keyMetadata, $domain); + $d = $this->target->defines($id, $intlDomain) ? $intlDomain : $domain; + $this->result->add([$id => $message], $d); + if (null !== $keyMetadata = $this->target->getMetadata($id, $d)) { + $this->result->setMetadata($id, $keyMetadata, $d); } } } diff --git a/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php b/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php index 22af86e906..240c492800 100644 --- a/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php +++ b/src/Symfony/Component/Translation/Tests/Catalogue/MergeOperationTest.php @@ -90,6 +90,29 @@ class MergeOperationTest extends AbstractOperationTest ); } + public function testGetResultWithMetadataFromIntlDomain() + { + $leftCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['a' => 'old_a', 'b' => 'old_b']]); + $leftCatalogue->setMetadata('a', 'foo', 'messages+intl-icu'); + $leftCatalogue->setMetadata('b', 'bar', 'messages+intl-icu'); + $rightCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['b' => 'new_b', 'c' => 'new_c']]); + $rightCatalogue->setMetadata('b', 'baz', 'messages+intl-icu'); + $rightCatalogue->setMetadata('c', 'qux', 'messages+intl-icu'); + + $mergedCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['a' => 'old_a', 'b' => 'old_b', 'c' => 'new_c']]); + $mergedCatalogue->setMetadata('a', 'foo', 'messages+intl-icu'); + $mergedCatalogue->setMetadata('b', 'bar', 'messages+intl-icu'); + $mergedCatalogue->setMetadata('c', 'qux', 'messages+intl-icu'); + + $this->assertEquals( + $mergedCatalogue, + $this->createOperation( + $leftCatalogue, + $rightCatalogue + )->getResult() + ); + } + protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target) { return new MergeOperation($source, $target); diff --git a/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php b/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php index d4608f6ef6..354c213e9e 100644 --- a/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php +++ b/src/Symfony/Component/Translation/Tests/Catalogue/TargetOperationTest.php @@ -102,6 +102,28 @@ class TargetOperationTest extends AbstractOperationTest ); } + public function testGetResultWithMetadataFromIntlDomain() + { + $leftCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['a' => 'old_a', 'b' => 'old_b']]); + $leftCatalogue->setMetadata('a', 'foo', 'messages+intl-icu'); + $leftCatalogue->setMetadata('b', 'bar', 'messages+intl-icu'); + $rightCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['b' => 'new_b', 'c' => 'new_c']]); + $rightCatalogue->setMetadata('b', 'baz', 'messages+intl-icu'); + $rightCatalogue->setMetadata('c', 'qux', 'messages+intl-icu'); + + $diffCatalogue = new MessageCatalogue('en', ['messages+intl-icu' => ['b' => 'old_b', 'c' => 'new_c']]); + $diffCatalogue->setMetadata('b', 'bar', 'messages+intl-icu'); + $diffCatalogue->setMetadata('c', 'qux', 'messages+intl-icu'); + + $this->assertEquals( + $diffCatalogue, + $this->createOperation( + $leftCatalogue, + $rightCatalogue + )->getResult() + ); + } + protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target) { return new TargetOperation($source, $target); From eb14a1e1f0651a7509ca6f534d21d8fab6023a23 Mon Sep 17 00:00:00 2001 From: ddegentesh Date: Tue, 26 Jan 2021 10:36:25 -0500 Subject: [PATCH 3/8] [Mailer][Mime] Update inline part names with newly generated ContentId --- src/Symfony/Component/Mime/Email.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Component/Mime/Email.php b/src/Symfony/Component/Mime/Email.php index fa01e39d24..940cf489c0 100644 --- a/src/Symfony/Component/Mime/Email.php +++ b/src/Symfony/Component/Mime/Email.php @@ -491,6 +491,7 @@ class Email extends Message $attachment['inline'] = true; $inlineParts[$name] = $part = $this->createDataPart($attachment); $html = str_replace('cid:'.$name, 'cid:'.$part->getContentId(), $html); + $part->setName($part->getContentId()); continue 2; } $attachmentParts[] = $this->createDataPart($attachment); From 41c77965523a0ced8c07e5897080260f4d53a4e0 Mon Sep 17 00:00:00 2001 From: Antoine Makdessi Date: Fri, 5 Feb 2021 09:35:14 +0100 Subject: [PATCH 4/8] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2b27d887c2..d085ea2e2f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -17,4 +17,5 @@ Additionally (see https://symfony.com/releases): - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too.) - Features and deprecations must be submitted against branch 5.x. + - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry --> From b7100b6909ec9b645fee7c69c5e34e69f90d1669 Mon Sep 17 00:00:00 2001 From: Thomas Calvet Date: Fri, 5 Feb 2021 14:33:05 +0100 Subject: [PATCH 5/8] [HttpKernel] [Kernel] Silence deprecations logs writes --- src/Symfony/Component/HttpKernel/Kernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index f2b1966ea5..15a37cf58b 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -598,8 +598,8 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl if ($collectDeprecations) { restore_error_handler(); - file_put_contents($cacheDir.'/'.$class.'Deprecations.log', serialize(array_values($collectedLogs))); - file_put_contents($cacheDir.'/'.$class.'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()->getLog()) : ''); + @file_put_contents($cacheDir.'/'.$class.'Deprecations.log', serialize(array_values($collectedLogs))); + @file_put_contents($cacheDir.'/'.$class.'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()->getLog()) : ''); } } From c28ba9a959dfa363530baf5222c8ff041921d2a3 Mon Sep 17 00:00:00 2001 From: Robin Chalas Date: Fri, 5 Feb 2021 15:36:10 +0100 Subject: [PATCH 6/8] Remove EOLed 5.1 branch from PR template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d085ea2e2f..d4182db630 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ | Q | A | ------------- | --- -| Branch? | 5.x for features / 4.4, 5.1 or 5.2 for bug fixes +| Branch? | 5.x for features / 4.4 or 5.2 for bug fixes | Bug fix? | yes/no | New feature? | yes/no | Deprecations? | yes/no From 6867475447b3959617c0f8a5bd9a9bd3801d445d Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 4 Feb 2021 19:45:20 +0100 Subject: [PATCH 7/8] [DI] fix tracking of changes to vendor/ dirs --- .../Component/DependencyInjection/ContainerBuilder.php | 6 +++--- .../DependencyInjection/Tests/ContainerBuilderTest.php | 10 ++++------ .../Tests/Loader/GlobFileLoaderTest.php | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php index 57e7963846..18f883039c 100644 --- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php +++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php @@ -1655,14 +1655,14 @@ class ContainerBuilder extends Container implements TaggedContainerInterface private function inVendors(string $path): bool { if (null === $this->vendors) { - $resource = new ComposerResource(); - $this->vendors = $resource->getVendors(); - $this->addResource($resource); + $this->vendors = (new ComposerResource())->getVendors(); } $path = realpath($path) ?: $path; foreach ($this->vendors as $vendor) { if (0 === strpos($path, $vendor) && false !== strpbrk(substr($path, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { + $this->addResource(new FileResource($vendor.'/composer/installed.json')); + return true; } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php index 8a3f229818..78a8edd1f0 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php @@ -17,7 +17,6 @@ require_once __DIR__.'/Fixtures/includes/ProjectExtension.php'; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface as PsrContainerInterface; -use Symfony\Component\Config\Resource\ComposerResource; use Symfony\Component\Config\Resource\DirectoryResource; use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Resource\ResourceInterface; @@ -929,7 +928,7 @@ class ContainerBuilderTest extends TestCase $resources = $container->getResources(); - $this->assertCount(2, $resources, '2 resources were registered'); + $this->assertCount(1, $resources); /* @var $resource \Symfony\Component\Config\Resource\FileResource */ $resource = end($resources); @@ -958,9 +957,9 @@ class ContainerBuilderTest extends TestCase $resources = $container->getResources(); - $this->assertCount(3, $resources, '3 resources were registered'); + $this->assertCount(2, $resources); - $this->assertSame('reflection.BarClass', (string) $resources[1]); + $this->assertSame('reflection.BarClass', (string) $resources[0]); $this->assertSame('BarMissingClass', (string) end($resources)); } @@ -1021,7 +1020,6 @@ class ContainerBuilderTest extends TestCase public function testFileExists() { $container = new ContainerBuilder(); - $A = new ComposerResource(); $a = new FileResource(__DIR__.'/Fixtures/xml/services1.xml'); $b = new FileResource(__DIR__.'/Fixtures/xml/services2.xml'); $c = new DirectoryResource($dir = \dirname($b)); @@ -1035,7 +1033,7 @@ class ContainerBuilderTest extends TestCase } } - $this->assertEquals([$A, $a, $b, $c], $resources, '->getResources() returns an array of resources read for the current configuration'); + $this->assertEquals([$a, $b, $c], $resources, '->getResources() returns an array of resources read for the current configuration'); } public function testExtension() diff --git a/src/Symfony/Component/DependencyInjection/Tests/Loader/GlobFileLoaderTest.php b/src/Symfony/Component/DependencyInjection/Tests/Loader/GlobFileLoaderTest.php index 4027087e8b..29346742bd 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Loader/GlobFileLoaderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Loader/GlobFileLoaderTest.php @@ -32,7 +32,7 @@ class GlobFileLoaderTest extends TestCase $loader = new GlobFileLoaderWithoutImport($container = new ContainerBuilder(), new FileLocator()); $loader->load(__DIR__.'/../Fixtures/config/*'); - $this->assertEquals(new GlobResource(__DIR__.'/../Fixtures/config', '/*', false), $container->getResources()[1]); + $this->assertEquals(new GlobResource(__DIR__.'/../Fixtures/config', '/*', false), $container->getResources()[0]); } } From bf23c44a0795ff7ca745577be58aaed7642b1185 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 5 Feb 2021 16:46:45 +0100 Subject: [PATCH 8/8] Allow psr/cache v3 but on symfony/cache --- src/Symfony/Component/HttpKernel/composer.json | 2 +- src/Symfony/Component/Messenger/composer.json | 2 +- src/Symfony/Contracts/Cache/composer.json | 2 +- src/Symfony/Contracts/composer.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index 61325cb0a0..a2fa2a0eca 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -41,7 +41,7 @@ "symfony/templating": "^3.4|^4.0|^5.0", "symfony/translation": "^4.2|^5.0", "symfony/translation-contracts": "^1.1|^2", - "psr/cache": "^1.0|^2.0", + "psr/cache": "^1.0|^2.0|^3.0", "twig/twig": "^1.43|^2.13|^3.0.4" }, "provide": { diff --git a/src/Symfony/Component/Messenger/composer.json b/src/Symfony/Component/Messenger/composer.json index 2668fdd8b0..df2876be45 100644 --- a/src/Symfony/Component/Messenger/composer.json +++ b/src/Symfony/Component/Messenger/composer.json @@ -23,7 +23,7 @@ "require-dev": { "doctrine/dbal": "^2.6|^3.0", "doctrine/persistence": "^1.3|^2", - "psr/cache": "^1.0|^2.0", + "psr/cache": "^1.0|^2.0|^3.0", "symfony/console": "^3.4|^4.0|^5.0", "symfony/dependency-injection": "^3.4.19|^4.1.8|^5.0", "symfony/event-dispatcher": "^4.3|^5.0", diff --git a/src/Symfony/Contracts/Cache/composer.json b/src/Symfony/Contracts/Cache/composer.json index 351cdae0c8..b77a03dacc 100644 --- a/src/Symfony/Contracts/Cache/composer.json +++ b/src/Symfony/Contracts/Cache/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=7.1.3", - "psr/cache": "^1.0|^2.0" + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { "symfony/cache-implementation": "" diff --git a/src/Symfony/Contracts/composer.json b/src/Symfony/Contracts/composer.json index bbd5871507..4cd9ebda23 100644 --- a/src/Symfony/Contracts/composer.json +++ b/src/Symfony/Contracts/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=7.1.3", - "psr/cache": "^1.0|^2.0", + "psr/cache": "^1.0|^2.0|^3.0", "psr/container": "^1.0" }, "require-dev": {