diff --git a/.gitattributes b/.gitattributes
index cf8890eefbda8..d1570aff1cd79 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6,4 +6,3 @@
/src/Symfony/Component/Runtime export-ignore
/src/Symfony/Component/Translation/Bridge export-ignore
/src/Symfony/Component/Intl/Resources/data/*/* linguist-generated=true
-/.git* export-ignore
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 00a24cbcfc13c..f749de5e0d82a 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,6 +1,6 @@
| Q | A
| ------------- | ---
-| Branch? | 7.1 for features / 5.4, 6.4, or 7.0 for bug fixes
+| Branch? | 7.2 for features / 5.4, 6.4, 7.0, and 7.1 for bug fixes
| Bug fix? | yes/no
| New feature? | yes/no
| Deprecations? | yes/no
diff --git a/.github/sync-packages.php b/.github/sync-packages.php
deleted file mode 100644
index 3d056466016e9..0000000000000
--- a/.github/sync-packages.php
+++ /dev/null
@@ -1,75 +0,0 @@
-> $GITHUB_OUTPUT
+
+ - name: Check Translation Status
+ if: steps.changed-translation-files.outputs.changed == 'true'
+ run: |
+ php src/Symfony/Component/Translation/Resources/bin/translation-status.php -v
+ php .github/sync-translations.php
+ git diff --exit-code src/ || (echo '::error::Run "php .github/sync-translations.php" to fix XLIFF files.' && exit 1)
+
- name: Run tests
run: ./phpunit --group integration -v
env:
@@ -199,15 +216,3 @@ jobs:
# docker run --rm -e COMPOSER_ROOT_VERSION -v $(pwd):/app -v $(which composer):/usr/local/bin/composer -v $(which vulcain):/usr/local/bin/vulcain -w /app php:8.0-alpine ./phpunit src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php --filter testHttp2Push
# sudo rm -rf .phpunit
# [ -d .phpunit.bak ] && mv .phpunit.bak .phpunit
-
- - name: Check for changes in translation files
- id: changed-translation-files
- run: |
- echo 'changed='$((git diff --quiet HEAD~1 HEAD -- 'src/**/Resources/translations/*.xlf' || (echo 'true' && exit 1)) && echo 'false') >> $GITHUB_OUTPUT
-
- - name: Check Translation Status
- if: steps.changed-translation-files.outputs.changed == 'true'
- run: |
- php src/Symfony/Component/Translation/Resources/bin/translation-status.php -v
- php .github/sync-translations.php
- git diff --exit-code src/ || (echo '::error::Run "php .github/sync-translations.php" to fix XLIFF files.' && exit 1)
diff --git a/.github/workflows/package-tests.yml b/.github/workflows/package-tests.yml
index a70c4321e36bb..69f22dab44a9f 100644
--- a/.github/workflows/package-tests.yml
+++ b/.github/workflows/package-tests.yml
@@ -101,7 +101,6 @@ jobs:
done
exit $ok
-
- name: Verify symfony/deprecation-contracts requirements
run: |
set +e
@@ -142,9 +141,3 @@ jobs:
done
exit $ok
-
- - name: Verify subtree-splits are auto-closed
- run: |
- php .github/sync-packages.php
- git add src/
- git diff --staged --exit-code || (echo '::error::Please run "php .github/sync-packages.php".' && exit 1)
diff --git a/CHANGELOG-5.4.md b/CHANGELOG-5.4.md
index 4675182aec6dd..3e2bcd6d8360d 100644
--- a/CHANGELOG-5.4.md
+++ b/CHANGELOG-5.4.md
@@ -7,6 +7,38 @@ in 5.4 minor versions.
To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v5.4.0...v5.4.1
+* 5.4.40 (2024-06-02)
+
+ * bug #57275 Fix autoload configs to avoid warnings when building optimized autoloaders (Seldaek)
+ * bug #54572 [Mailer] Fix sendmail transport failure handling and interactive mode (bobvandevijver)
+ * bug #57228 [Mime] fix PHP 7 compatibility (xabbuh)
+ * bug #57065 [Mime] Fixed `Mime\Message::ensureValidity()` when a required header is set, but has an empty body (rhertogh)
+ * bug #57109 [Notifier] keep boolean options when their value is false (xabbuh)
+ * bug #54694 [PropertyInfo] Update DoctrineExtractor for new DBAL 4 BIGINT type (llupa)
+ * bug #54913 [Serializer] Fix CurrentType for missing property (ElisDN)
+ * bug #54797 [PhpUnitBridge] Fix `DeprecationErrorHandler` with PhpUnit 10 (HypeMC)
+ * bug #54878 [Filesystem] Fix dumpFile `stat failed` error hitting custom handler (acoulton)
+ * bug #54924 [Validator] IBAN Check digits should always between 2 and 98 (karstennilsen)
+ * bug #54919 [ErrorHandler] Do not call xdebug_get_function_stack() with xdebug >= 3.0 when not in develop mode (fmata)
+ * bug #54910 [HttpFoundation] filter out empty HTTP header parts (xabbuh)
+ * bug #54888 [String] Fix folded in compat mode (smnandre)
+ * bug #54860 [HttpClient] Revert fixing curl default options (alexandre-daubois)
+ * bug #54839 Fix exception thrown during `LDAP_MODIFY_BATCH_REMOVE_ALL` batch operations (phasdev)
+ * bug #54834 [Validator] Check `Locale` class existence before using it (alexandre-daubois)
+ * bug #54830 [HttpClient] Fix cURL default options for PHP 8.4 (alexandre-daubois)
+ * bug #54828 [Serializer] Fix `GetSetMethodNormalizer` not working with setters with optional args (HypeMC)
+ * bug #54816 [Cache] Fix support for predis/predis:^2.0 (mfettig)
+ * bug #54804 [Serializer] separate the property info and write info extractors (xabbuh)
+ * bug #54800 [WebProfilerBundle] fix compatibility with Twig 3.10 (xabbuh)
+ * bug #54794 [Strings][EnglishInflector] Fix incorrect pluralisation of 'Album' (timporter)
+ * bug #54714 [Serializer] convert empty CSV header names into numeric keys (xabbuh)
+ * bug #54775 [Messenger] accept AbstractAsset instances when filtering schemas (xabbuh)
+ * bug #54759 [Filesystem] better distinguish URL schemes and Windows drive letters (xabbuh)
+ * bug #54791 [FrameworkBundle] move wiring of the property info extractor to the ObjectNormalizer (xabbuh)
+ * bug #54760 [Validator] handle union and intersection types for cascaded validations (xabbuh)
+ * bug #54776 [Cache] fix: remove unwanted cast to int (Arend Hummeling)
+ * bug #54700 [Dotenv] show overridden vars too when running debug:dotenv (HMRDevil)
+
* 5.4.39 (2024-04-29)
* bug #54751 [Validator] detect wrong e-mail validation modes (xabbuh)
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 2c65442650d09..92dac23ccbd1c 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -13,8 +13,8 @@ The Symfony Connect username in parenthesis allows to get more information
- Tobias Schultze (tobion)
- Grégoire Pineau (lyrixx)
- Thomas Calvet (fancyweb)
- - Christophe Coevoet (stof)
- Alexandre Daubois (alexandre-daubois)
+ - Christophe Coevoet (stof)
- Wouter de Jong (wouterj)
- Jordi Boggiano (seldaek)
- Maxime Steinhausser (ogizanagi)
@@ -35,9 +35,9 @@ The Symfony Connect username in parenthesis allows to get more information
- Jérôme Tamarelle (gromnan)
- Samuel ROZE (sroze)
- Antoine Lamirault (alamirault)
+ - HypeMC (hypemc)
- Pascal Borreli (pborreli)
- Romain Neutron
- - HypeMC (hypemc)
- Joseph Bielawski (stloyd)
- Drak (drak)
- Abdellatif Ait boudad (aitboudad)
@@ -61,6 +61,7 @@ The Symfony Connect username in parenthesis allows to get more information
- William DURAND
- ornicar
- Dany Maillard (maidmaid)
+ - Simon André (simonandre)
- Eriksen Costa
- Diego Saint Esteben (dosten)
- stealth35 (stealth35)
@@ -69,20 +70,19 @@ The Symfony Connect username in parenthesis allows to get more information
- Francis Besset (francisbesset)
- Titouan Galopin (tgalopin)
- Pierre du Plessis (pierredup)
- - Simon André (simonandre)
- David Maicher (dmaicher)
- Bulat Shakirzyanov (avalanche123)
- Iltar van der Berg
- Miha Vrhovnik (mvrhov)
+ - Tomasz Kowalczyk (thunderer)
- Gary PEGEOT (gary-p)
+ - Mathias Arlaud (mtarld)
- Saša Stamenković (umpirsky)
- Allison Guilhem (a_guilhem)
- Mathieu Piot (mpiot)
- Mathieu Santostefano (welcomattic)
- Alexander Schranz (alexander-schranz)
- Vasilij Duško (staff)
- - Tomasz Kowalczyk (thunderer)
- - Mathias Arlaud (mtarld)
- Sarah Khalil (saro0h)
- Laurent VOULLEMIER (lvo)
- Konstantin Kudryashov (everzet)
@@ -95,8 +95,8 @@ The Symfony Connect username in parenthesis allows to get more information
- Dariusz Ruminski
- Henrik Bjørnskov (henrikbjorn)
- David Buchmann (dbu)
- - Andrej Hudec (pulzarraider)
- Ruud Kamphuis (ruudk)
+ - Andrej Hudec (pulzarraider)
- Jáchym Toušek (enumag)
- Christian Raue
- Eric Clemmons (ericclemmons)
@@ -162,9 +162,9 @@ The Symfony Connect username in parenthesis allows to get more information
- Teoh Han Hui (teohhanhui)
- Przemysław Bogusz (przemyslaw-bogusz)
- Colin Frei
+ - Nicolas Philippe (nikophil)
- excelwebzone
- Paráda József (paradajozsef)
- - Nicolas Philippe (nikophil)
- Baptiste Clavié (talus)
- Alexander Schwenn (xelaris)
- Fabien Pennequin (fabienpennequin)
@@ -181,24 +181,27 @@ The Symfony Connect username in parenthesis allows to get more information
- François-Xavier de Guillebon (de-gui_f)
- Maximilian Beckers (maxbeckers)
- noniagriconomie
+ - Valtteri R (valtzu)
- Eric GELOEN (gelo)
- Gabriel Caruso
- Stefano Sala (stefano.sala)
- Ion Bazan (ionbazan)
+ - Niels Keurentjes (curry684)
- OGAWA Katsuhiro (fivestar)
- Jhonny Lidfors (jhonne)
+ - Dāvis Zālītis (k0d3r1s)
- Juti Noppornpitak (shiroyuki)
- Gregor Harlan (gharlan)
+ - Hugo Alliaume (kocal)
- Anthony MARTIN
- Andreas Schempp (aschempp)
- Sebastian Hörl (blogsh)
- Tigran Azatyan (tigranazatyan)
+ - Florent Mata (fmata)
- Christopher Hertel (chertel)
- Jonathan Scheiber (jmsche)
- Daniel Gomes (danielcsgomes)
- Hidenori Goto (hidenorigoto)
- - Niels Keurentjes (curry684)
- - Dāvis Zālītis (k0d3r1s)
- Arnaud Kleinpeter (nanocom)
- Guilherme Blanco (guilhermeblanco)
- Saif Eddin Gmati (azjezz)
@@ -207,10 +210,7 @@ The Symfony Connect username in parenthesis allows to get more information
- SpacePossum
- Richard van Laak (rvanlaak)
- Andreas Braun
- - Hugo Alliaume (kocal)
- - Valtteri R (valtzu)
- Pablo Godel (pgodel)
- - Florent Mata (fmata)
- Alessandro Chitolina (alekitto)
- Rafael Dohms (rdohms)
- Roman Martinuk (a2a4)
@@ -220,6 +220,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Jérôme Parmentier (lctrs)
- Ahmed TAILOULOUTE (ahmedtai)
- Simon Berger
+ - soyuka
- Jérémy Derussé
- Matthieu Napoli (mnapoli)
- Tomas Votruba (tomas_votruba)
@@ -240,6 +241,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Fabien Bourigault (fbourigault)
- Olivier Dolbeau (odolbeau)
- Rouven Weßling (realityking)
+ - Bob van de Vijver (bobvandevijver)
- Daniel Burger
- Ben Davies (bendavies)
- YaFou
@@ -254,6 +256,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Matthieu Ouellette-Vachon (maoueh)
- Michał Pipa (michal.pipa)
- Dawid Nowak
+ - Philipp Wahala (hifi)
- Jannik Zschiesche
- Amal Raghav (kertz)
- Jonathan Ingram
@@ -270,7 +273,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Sébastien Alfaiate (seb33300)
- James Halsall (jaitsu)
- Christian Scheb
- - Bob van de Vijver (bobvandevijver)
- Guillaume (guill)
- Mikael Pajunen
- Warnar Boekkooi (boekkooi)
@@ -298,7 +300,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Baptiste Leduc (korbeil)
- Karoly Gossler (connorhu)
- Timo Bakx (timobakx)
- - soyuka
+ - Giorgio Premi
- Ruben Gonzalez (rubenrua)
- Benjamin Dulau (dbenjamin)
- Markus Fasselt (digilist)
@@ -317,9 +319,9 @@ The Symfony Connect username in parenthesis allows to get more information
- sun (sun)
- Larry Garfield (crell)
- Leo Feyer
- - Philipp Wahala (hifi)
- Victor Bocharsky (bocharsky_bw)
- Nikolay Labinskiy (e-moe)
+ - Asis Pattisahusiwa
- Martin Schuhfuß (usefulthink)
- apetitpa
- Guilliam Xavier
@@ -334,7 +336,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Nate Wiebe (natewiebe13)
- Joe Bennett (kralos)
- Leszek Prabucki (l3l0)
- - Giorgio Premi
+ - Wojciech Kania
- Thomas Lallement (raziel057)
- Yassine Guedidi (yguedidi)
- François Zaninotto (fzaninotto)
@@ -399,16 +401,17 @@ The Symfony Connect username in parenthesis allows to get more information
- Artem Lopata
- Patrick McDougle (patrick-mcdougle)
- Marc Weistroff (futurecat)
+ - Michał (bambucha15)
- Danny Berger (dpb587)
- Alif Rachmawadi
- Anton Chernikov (anton_ch1989)
- Pierre-Yves Lebecq (pylebecq)
- Benjamin Leveque (benji07)
- Jordan Samouh (jordansamouh)
- - Wojciech Kania
- Sullivan SENECHAL (soullivaneuh)
- Loick Piera (pyrech)
- Uwe Jäger (uwej711)
+ - javaDeveloperKid
- W0rma
- Lynn van der Berg (kjarli)
- Michaël Perrin (michael.perrin)
@@ -418,11 +421,11 @@ The Symfony Connect username in parenthesis allows to get more information
- Marvin Petker
- GordonsLondon
- Ray
- - Asis Pattisahusiwa
- Philipp Cordes (corphi)
- Chekote
- Thomas Adam
- Evert Harmeling (evertharmeling)
+ - Anderson Müller
- jdhoek
- Jurica Vlahoviček (vjurica)
- Bob den Otter (bopp)
@@ -467,9 +470,9 @@ The Symfony Connect username in parenthesis allows to get more information
- Iker Ibarguren (ikerib)
- Michael Holm (hollo)
- Blanchon Vincent (blanchonvincent)
- - Michał (bambucha15)
- Christian Schmidt
- Ben Hakim
+ - Stiven Llupa (sllupa)
- Marco Petersen (ocrampete16)
- Bohan Yang (brentybh)
- Vilius Grigaliūnas
@@ -478,7 +481,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Thomas Bisignani (toma)
- Florian Klein (docteurklein)
- Damien Alexandre (damienalexandre)
- - javaDeveloperKid
- Manuel Kießling (manuelkiessling)
- Alexey Kopytko (sanmai)
- Warxcell (warxcell)
@@ -504,7 +506,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Jan Decavele (jandc)
- Gustavo Piltcher
- Lee Rowlands
- - Anderson Müller
- Stepan Tanasiychuk (stfalcon)
- Ivan Kurnosov
- Tiago Ribeiro (fixe)
@@ -540,6 +541,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Francesco Levorato
- Vitaliy Zakharov (zakharovvi)
- Tobias Sjösten (tobiassjosten)
+ - Michael Hirschler (mvhirsch)
- Gyula Sallai (salla)
- Hendrik Luup (hluup)
- Inal DJAFAR (inalgnu)
@@ -547,6 +549,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Martin Herndl (herndlm)
- Dmytro Borysovskyi (dmytr0)
- Johann Pardanaud
+ - Kai Dederichs
- Pavel Kirpitsov (pavel-kirpichyov)
- Robert Meijers
- Artur Eshenbrener
@@ -561,7 +564,6 @@ The Symfony Connect username in parenthesis allows to get more information
- FORT Pierre-Louis (plfort)
- Terje Bråten
- Gonzalo Vilaseca (gonzalovilaseca)
- - Stiven Llupa (sllupa)
- Tarmo Leppänen (tarlepp)
- Jakub Kucharovic (jkucharovic)
- Daniel STANCU
@@ -692,7 +694,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Desjardins Jérôme (jewome62)
- Arturs Vonda
- Matthew Smeets
- - Michael Hirschler (mvhirsch)
- Toni Rudolf (toooni)
- Stefan Gehrig (sgehrig)
- vagrant
@@ -705,6 +706,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Restless-ET
- Vlad Gregurco (vgregurco)
- Artem Stepin (astepin)
+ - Jérémy DECOOL (jdecool)
- Boris Vujicic (boris.vujicic)
- Dries Vints
- Judicaël RUFFIEUX (axanagor)
@@ -722,7 +724,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Vitaliy Tverdokhlib (vitaliytv)
- Ariel Ferrandini (aferrandini)
- BASAK Semih (itsemih)
- - Kai Dederichs
- Dirk Pahl (dirkaholic)
- Cédric Lombardot (cedriclombardot)
- Jérémy REYNAUD (babeuloula)
@@ -749,6 +750,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Roberto Espinoza (respinoza)
- Pierre Rineau
- Soufian EZ ZANTAR (soezz)
+ - Ivan Mezinov
- Marek Zajac
- Adam Harvey
- ilyes kooli (skafandri)
@@ -770,6 +772,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Andrey Astakhov (aast)
- ReenExe
- Fabian Lange (codingfabian)
+ - kylekatarnls (kylekatarnls)
- Yoshio HANAWA
- Jan van Thoor (janvt)
- Joshua Nye
@@ -1012,6 +1015,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Martins Sipenko
- Guilherme Augusto Henschel
- Rostyslav Kinash
+ - Christophe V. (cvergne)
- Mardari Dorel (dorumd)
- Daisuke Ohata
- Vincent Simonin
@@ -1021,6 +1025,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Andy Palmer (andyexeter)
- Andrew Neil Forster (krciga22)
- Stefan Warman (warmans)
+ - Faizan Akram Dar (faizanakram)
- Tristan Maindron (tmaindron)
- Behnoush Norouzali (behnoush)
- Marko H. Tamminen (gzumba)
@@ -1054,6 +1059,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Kevin SCHNEKENBURGER
- Fabien Salles (blacked)
- Andreas Erhard (andaris)
+ - alexpozzi
- Michael Devery (mickadoo)
- Gregor Nathanael Meyer (spackmat)
- Antoine Corcy
@@ -1171,15 +1177,16 @@ The Symfony Connect username in parenthesis allows to get more information
- Alex Xandra Albert Sim
- Sergey Yastrebov
- Carson Full (carsonfull)
- - kylekatarnls (kylekatarnls)
- Steve Grunwell
- Yuen-Chi Lian
- Mathias Brodala (mbrodala)
- Robert Fischer (sandoba)
- Tarjei Huse (tarjei)
+ - mfettig
- Besnik Br
- Issam Raouf (iraouf)
- Simon Mönch
+ - Sherin Bloemendaal
- Jose Gonzalez
- Jonathan (jlslew)
- Claudio Zizza
@@ -1188,6 +1195,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Christian Stoller (naitsirch)
- Dave Marshall (davedevelopment)
- Jakub Kulhan (jakubkulhan)
+ - Paweł Niedzielski (steveb)
- Shaharia Azam
- avorobiev
- Gerben Oolbekkink
@@ -1226,7 +1234,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Edvin Hultberg
- shubhalgupta
- Felds Liscia (felds)
- - Jérémy DECOOL (jdecool)
- Sergey Panteleev
- Alexander Grimalovsky (flying)
- Andrew Hilobok (hilobok)
@@ -1276,6 +1283,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Cyril Pascal (paxal)
- Pedro Casado (pdr33n)
- Jayson Xu (superjavason)
+ - acoulton
- DemigodCode
- fago
- Jan Prieser
@@ -1453,6 +1461,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Robert Gruendler (pulse00)
- Sebastian Paczkowski (sebpacz)
- Simon Terrien (sterrien)
+ - Stephan Vierkant (svierkant)
- Benoît Merlet (trompette)
- Brad Jones
- datibbaw
@@ -1470,6 +1479,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Baptiste Leduc (bleduc)
- soyuka
- Patrick Kaufmann
+ - Ismail Özgün Turan (dadeather)
- Mickael Perraud
- Anton Dyshkant
- Rafael Villa Verde
@@ -1488,6 +1498,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Stewart Malik
- Renan Taranto (renan-taranto)
- Ninos Ego
+ - Samael tomas
- Stefan Graupner (efrane)
- Gemorroj (gemorroj)
- Adrien Chinour
@@ -1652,6 +1663,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ksaveras Šakys (xawiers)
- Shaun Simmons
- Ariel J. Birnbaum
+ - Yannick
- Patrick Luca Fazzi (ap3ir0n)
- Danijel Obradović
- Pablo Borowicz
@@ -1710,6 +1722,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Łukasz Chruściel (lchrusciel)
- Jan Vernieuwe (vernija)
- Antanas Arvasevicius
+ - Adam Kiss
- Pierre Dudoret
- Michal Trojanowski
- Thomas
@@ -1790,6 +1803,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Eddie Abou-Jaoude (eddiejaoude)
- Haritz Iturbe (hizai)
- Nerijus Arlauskas (nercury)
+ - Rutger Hertogh
- Diego Sapriza
- Joan Cruz
- inspiran
@@ -1854,6 +1868,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Thomason, James
- Dario Savella
- Gordienko Vladislav
+ - Joas Schilling
- Ener-Getick
- Moza Bogdan (bogdan_moza)
- johan Vlaar
@@ -1913,6 +1928,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Takashi Kanemoto (ttskch)
- Aleksei Lebedev
- dlorek
+ - Oriol Viñals
- Stuart Fyfe
- Jason Schilling (chapterjason)
- David de Boer (ddeboer)
@@ -1963,7 +1979,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Ismail Turan
- error56
- Felicitus
- - alexpozzi
- Jorge Vahldick (jvahldick)
- Krzysztof Przybyszewski (kprzybyszewski)
- Vladimir Mantulo (mantulo)
@@ -2057,7 +2072,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Adam Wójs (awojs)
- Justin Reherman (jreherman)
- Rubén Calvo (rubencm)
- - Paweł Niedzielski (steveb)
- Abdul.Mohsen B. A. A
- Cédric Girard
- Peter Jaap Blaakmeer
@@ -2242,6 +2256,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Luis Galeas
- Bogdan Scordaliu
- Martin Pärtel
+ - PHAS Developer
- Daniel Rotter (danrot)
- Frédéric Bouchery (fbouchery)
- Jacek Kobus (jackks)
@@ -2260,7 +2275,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Jeroen de Graaf
- Ulrik McArdle
- BiaDd
- - mfettig
- Oleksii Bulba
- Ramon Cuñat
- mboultoureau
@@ -2317,6 +2331,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Starfox64
- Ivo Valchev
- Thomas Hanke
+ - ffd000
- Daniel Tschinder
- Thomas Durand
- Arnaud CHASSEUX
@@ -2330,7 +2345,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Rafał Muszyński (rafmus90)
- Sébastien Decrême (sebdec)
- Timothy Anido (xanido)
- - acoulton
- Mara Blaga
- Rick Prent
- skalpa
@@ -2398,6 +2412,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Andrea Ruggiero (pupax)
- Stan Jansen (stanjan)
- Maxwell Vandervelde
+ - karstennilsen
- kaywalker
- Sebastian Ionescu
- Robert Kopera
@@ -2448,6 +2463,7 @@ The Symfony Connect username in parenthesis allows to get more information
- tadas
- Bastien Picharles
- Kirk Madera
+ - Linas Ramanauskas
- mamazu
- Keith Maika
- izenin
@@ -2460,6 +2476,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Victor Garcia
- Juan Mrad
- Denis Yuzhanin
+ - k-sahara
- Flavian Sierk
- Rik van der Heijden
- knezmilos13
@@ -2520,6 +2537,7 @@ The Symfony Connect username in parenthesis allows to get more information
- tpetry
- JustDylan23
- Juraj Surman
+ - ywisax
- Martin Eckhardt
- natechicago
- Victor
@@ -2572,6 +2590,7 @@ The Symfony Connect username in parenthesis allows to get more information
- catch
- aetxebeste
- Roberto Guido
+ - ElisDN
- roromix
- Vitali Tsyrkin
- Juga Paazmaya
@@ -2953,6 +2972,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Patrizio Bekerle
- Tom Maguire
- Mateusz Lerczak
+ - Tim Porter
- Richard Quadling
- Rainrider
- David Zuelke
@@ -3063,6 +3083,7 @@ The Symfony Connect username in parenthesis allows to get more information
- dakur
- florian-michael-mast
- tourze
+ - sam-bee
- Vlad Dumitrache
- wetternest
- Erik van Wingerden
@@ -3076,6 +3097,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Matheus Gontijo
- Gerrit Drost
- Linnaea Von Lavia
+ - Andrew Brown
- Javan Eskander
- Lenar Lõhmus
- Cristian Gonzalez
@@ -3307,6 +3329,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Karim Miladi
- Michael Genereux
- Greg Korba
+ - Camille Islasse
- patrick-mcdougle
- Tyler Stroud
- Dariusz Czech
@@ -3347,12 +3370,14 @@ The Symfony Connect username in parenthesis allows to get more information
- wiseguy1394
- adam-mospan
- Steve Hyde
+ - AbdelatifAitBara
- nerdgod
- Sam Williams
- Ettore Del Negro
- Guillaume Aveline
- Adrian Philipp
- James Michael DuPont
+ - Simone Ruggieri
- Markus Tacker
- Tomáš Votruba
- Kasperki
@@ -3420,6 +3445,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ayke Halder
- Thorsten Hallwas
- Brian Freytag
+ - Arend Hummeling
- Marco Pfeiffer
- Alex Nostadt
- Michael Squires
@@ -3502,6 +3528,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Yendric
- ADmad
- Nicolas Roudaire
+ - Marc Jauvin
- Matthias Meyer
- Abdouni Karim (abdounikarim)
- Temuri Takalandze (abgeo)
@@ -3544,7 +3571,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Elliot Anderson (elliot)
- Erwan Nader (ernadoo)
- Fabien D. (fabd)
- - Faizan Akram Dar (faizanakram)
- Carsten Eilers (fnc)
- Sorin Gitlan (forapathy)
- Fraller Balázs (fracsi)
@@ -3626,7 +3652,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Christopher Georg (sky-chris)
- Volker (skydiablo)
- Julien Sanchez (sumbobyboys)
- - Stephan Vierkant (svierkant)
- Ron Gähler (t-ronx)
- Guillermo Gisinger (t3chn0r)
- Tom Newby (tomnewbyau)
@@ -3637,6 +3662,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Moritz Kraft (userfriendly)
- Víctor Mateo (victormateo)
- Vincent MOULENE (vints24)
+ - Verlhac Gaëtan (viviengaetan)
- David Grüner (vworldat)
- Eugene Babushkin (warl)
- Wouter Sioen (wouter_sioen)
diff --git a/composer.json b/composer.json
index 9bc012d6cee49..1c53f27932fc1 100644
--- a/composer.json
+++ b/composer.json
@@ -138,7 +138,7 @@
"php-http/httplug": "^1.0|^2.0",
"php-http/message-factory": "^1.0",
"phpstan/phpdoc-parser": "^1.0",
- "predis/predis": "~1.1",
+ "predis/predis": "^1.1|^2.0",
"psr/http-client": "^1.0",
"psr/simple-cache": "^1.0|^2.0",
"egulias/email-validator": "^2.1.10|^3.1|^4",
@@ -176,7 +176,8 @@
"Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/",
"Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/",
"Symfony\\Bundle\\": "src/Symfony/Bundle/",
- "Symfony\\Component\\": "src/Symfony/Component/"
+ "Symfony\\Component\\": "src/Symfony/Component/",
+ "Symfony\\Runtime\\Symfony\\Component\\": "src/Symfony/Component/Runtime/Internal/"
},
"files": [
"src/Symfony/Component/String/Resources/functions.php"
@@ -185,7 +186,8 @@
"src/Symfony/Component/Intl/Resources/stubs"
],
"exclude-from-classmap": [
- "**/Tests/"
+ "**/Tests/",
+ "**/bin/"
]
},
"autoload-dev": {
diff --git a/src/Symfony/Bridge/Doctrine/.gitattributes b/src/Symfony/Bridge/Doctrine/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bridge/Doctrine/.gitattributes
+++ b/src/Symfony/Bridge/Doctrine/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bridge/Doctrine/.github/workflows/check-subtree-split.yml b/src/Symfony/Bridge/Doctrine/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bridge/Doctrine/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php b/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php
index 46e3e73b09a0b..568ba730c712f 100644
--- a/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php
+++ b/src/Symfony/Bridge/Doctrine/PropertyInfo/DoctrineExtractor.php
@@ -12,6 +12,7 @@
namespace Symfony\Bridge\Doctrine\PropertyInfo;
use Doctrine\Common\Collections\Collection;
+use Doctrine\DBAL\Types\BigIntType;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Mapping\AssociationMapping;
@@ -142,6 +143,15 @@ public function getTypes(string $class, string $property, array $context = [])
}
$nullable = $metadata instanceof ClassMetadata && $metadata->isNullable($property);
+
+ // DBAL 4 has a special fallback strategy for BINGINT (int -> string)
+ if (Types::BIGINT === $typeOfField && !method_exists(BigIntType::class, 'getName')) {
+ return [
+ new Type(Type::BUILTIN_TYPE_INT, $nullable),
+ new Type(Type::BUILTIN_TYPE_STRING, $nullable),
+ ];
+ }
+
$enumType = null;
if (null !== $enumClass = self::getMappingValue($metadata->getFieldMapping($property), 'enumType') ?? null) {
$enumType = new Type(Type::BUILTIN_TYPE_OBJECT, $nullable, $enumClass);
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php
new file mode 100644
index 0000000000000..4ca59949345c3
--- /dev/null
+++ b/src/Symfony/Bridge/Doctrine/Tests/Fixtures/MockableRepository.php
@@ -0,0 +1,21 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\Doctrine\Tests\Fixtures;
+
+use Doctrine\ORM\EntityRepository;
+
+class MockableRepository extends EntityRepository
+{
+ public function findByCustom()
+ {
+ }
+}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php b/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php
index 626c19eb4ceae..3682ad00d5085 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Messenger/DoctrineOpenTransactionLoggerMiddlewareTest.php
@@ -52,7 +52,7 @@ public function testMiddlewareWrapsInTransactionAndFlushes()
{
$this->connection->expects($this->exactly(1))
->method('isTransactionActive')
- ->will($this->onConsecutiveCalls(true, true, false))
+ ->willReturn(true, true, false)
;
$this->middleware->handle(new Envelope(new \stdClass()), $this->getStackMock());
diff --git a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
index 757813f017af9..d4108d42f7965 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/PropertyInfo/DoctrineExtractorTest.php
@@ -16,6 +16,7 @@
use Doctrine\Common\EventManager;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory;
+use Doctrine\DBAL\Types\BigIntType;
use Doctrine\DBAL\Types\Type as DBALType;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Column;
@@ -162,10 +163,17 @@ public function testExtractEnum()
public static function typesProvider(): array
{
+ // DBAL 4 has a special fallback strategy for BINGINT (int -> string)
+ if (!method_exists(BigIntType::class, 'getName')) {
+ $expectedBingIntType = [new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_STRING)];
+ } else {
+ $expectedBingIntType = [new Type(Type::BUILTIN_TYPE_STRING)];
+ }
+
return [
['id', [new Type(Type::BUILTIN_TYPE_INT)]],
['guid', [new Type(Type::BUILTIN_TYPE_STRING)]],
- ['bigint', [new Type(Type::BUILTIN_TYPE_STRING)]],
+ ['bigint', $expectedBingIntType],
['time', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTime')]],
['timeImmutable', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTimeImmutable')]],
['dateInterval', [new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateInterval')]],
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php
index f3a78dfe9226b..04c3b7f3d31fd 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Security/User/EntityUserProviderTest.php
@@ -233,14 +233,11 @@ private function getManager($em, $name = null)
private function getObjectManager($repository)
{
- $em = $this->getMockBuilder(ObjectManager::class)
- ->onlyMethods(['getClassMetadata', 'getRepository'])
- ->getMockForAbstractClass();
- $em->expects($this->any())
- ->method('getRepository')
+ $objectManager = $this->createMock(ObjectManager::class);
+ $objectManager->method('getRepository')
->willReturn($repository);
- return $em;
+ return $objectManager;
}
private function createSchema($em)
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
index 75eae2c311d9f..bcfced4771e6f 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/UniqueEntityValidatorTest.php
@@ -28,6 +28,7 @@
use Symfony\Bridge\Doctrine\Tests\Fixtures\DoubleNameEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\DoubleNullableNameEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\Employee;
+use Symfony\Bridge\Doctrine\Tests\Fixtures\MockableRepository;
use Symfony\Bridge\Doctrine\Tests\Fixtures\Person;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdEntity;
use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIntIdNoToStringEntity;
@@ -97,14 +98,10 @@ protected function createRegistryMock($em = null)
protected function createRepositoryMock()
{
- $repository = $this->getMockBuilder(EntityRepository::class)
+ return $this->getMockBuilder(MockableRepository::class)
->disableOriginalConstructor()
- ->onlyMethods(['find', 'findAll', 'findOneBy', 'findBy', 'getClassName'])
- ->addMethods(['findByCustom'])
- ->getMock()
- ;
-
- return $repository;
+ ->onlyMethods(['find', 'findAll', 'findOneBy', 'findBy', 'getClassName', 'findByCustom'])
+ ->getMock();
}
protected function createEntityManagerMock($repositoryMock)
diff --git a/src/Symfony/Bridge/Monolog/.gitattributes b/src/Symfony/Bridge/Monolog/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bridge/Monolog/.gitattributes
+++ b/src/Symfony/Bridge/Monolog/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bridge/Monolog/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bridge/Monolog/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bridge/Monolog/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bridge/Monolog/.github/workflows/check-subtree-split.yml b/src/Symfony/Bridge/Monolog/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bridge/Monolog/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php b/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php
index 4ddaddbde1218..f83599244a298 100644
--- a/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php
+++ b/src/Symfony/Bridge/Monolog/Tests/Handler/ConsoleHandlerTest.php
@@ -117,10 +117,7 @@ public function testVerbosityChanged()
$output
->expects($this->exactly(2))
->method('getVerbosity')
- ->willReturnOnConsecutiveCalls(
- OutputInterface::VERBOSITY_QUIET,
- OutputInterface::VERBOSITY_DEBUG
- )
+ ->willReturn(OutputInterface::VERBOSITY_QUIET, OutputInterface::VERBOSITY_DEBUG)
;
$handler = new ConsoleHandler($output);
$this->assertFalse($handler->isHandling(['level' => Logger::NOTICE]),
diff --git a/src/Symfony/Bridge/PhpUnit/.gitattributes b/src/Symfony/Bridge/PhpUnit/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bridge/PhpUnit/.gitattributes
+++ b/src/Symfony/Bridge/PhpUnit/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bridge/PhpUnit/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bridge/PhpUnit/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bridge/PhpUnit/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bridge/PhpUnit/.github/workflows/check-subtree-split.yml b/src/Symfony/Bridge/PhpUnit/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bridge/PhpUnit/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
index adddfe6f76995..05c67b7b37e6e 100644
--- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
+++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
@@ -368,6 +368,12 @@ private static function getPhpUnitErrorHandler()
if ('PHPUnit\Util\ErrorHandler::handleError' === $eh) {
return $eh;
+ } elseif (ErrorHandler::class === $eh) {
+ return function (int $errorNumber, string $errorString, string $errorFile, int $errorLine) {
+ ErrorHandler::instance()($errorNumber, $errorString, $errorFile, $errorLine);
+
+ return true;
+ };
}
foreach (debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT | \DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
diff --git a/src/Symfony/Bridge/PhpUnit/composer.json b/src/Symfony/Bridge/PhpUnit/composer.json
index 9627d2b40c12c..60e3e81c759f1 100644
--- a/src/Symfony/Bridge/PhpUnit/composer.json
+++ b/src/Symfony/Bridge/PhpUnit/composer.json
@@ -34,7 +34,8 @@
"files": [ "bootstrap.php" ],
"psr-4": { "Symfony\\Bridge\\PhpUnit\\": "" },
"exclude-from-classmap": [
- "/Tests/"
+ "/Tests/",
+ "/bin/"
]
},
"bin": [
diff --git a/src/Symfony/Bridge/ProxyManager/.gitattributes b/src/Symfony/Bridge/ProxyManager/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bridge/ProxyManager/.gitattributes
+++ b/src/Symfony/Bridge/ProxyManager/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bridge/ProxyManager/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bridge/ProxyManager/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bridge/ProxyManager/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bridge/ProxyManager/.github/workflows/check-subtree-split.yml b/src/Symfony/Bridge/ProxyManager/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bridge/ProxyManager/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bridge/Twig/.gitattributes b/src/Symfony/Bridge/Twig/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bridge/Twig/.gitattributes
+++ b/src/Symfony/Bridge/Twig/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bridge/Twig/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bridge/Twig/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bridge/Twig/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bridge/Twig/.github/workflows/check-subtree-split.yml b/src/Symfony/Bridge/Twig/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bridge/Twig/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php
index 9a7f9cd5257b7..29c68c0bcd8d0 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php
@@ -31,14 +31,14 @@ class HttpKernelExtensionTest extends TestCase
public function testFragmentWithError()
{
$this->expectException(\Twig\Error\RuntimeError::class);
- $renderer = $this->getFragmentHandler($this->throwException(new \Exception('foo')));
+ $renderer = $this->getFragmentHandler(new \Exception('foo'));
$this->renderTemplate($renderer);
}
public function testRenderFragment()
{
- $renderer = $this->getFragmentHandler($this->returnValue(new Response('html')));
+ $renderer = $this->getFragmentHandler(new Response('html'));
$response = $this->renderTemplate($renderer);
@@ -87,11 +87,17 @@ public function testGenerateFragmentUri()
$this->assertSame('/_fragment?_hash=PP8%2FeEbn1pr27I9wmag%2FM6jYGVwUZ0l2h0vhh2OJ6CI%3D&_path=template%3Dfoo.html.twig%26_format%3Dhtml%26_locale%3Den%26_controller%3DSymfonyBundleFrameworkBundleControllerTemplateController%253A%253AtemplateAction', $twig->render('index'));
}
- protected function getFragmentHandler($return)
+ protected function getFragmentHandler($returnOrException): FragmentHandler
{
$strategy = $this->createMock(FragmentRendererInterface::class);
$strategy->expects($this->once())->method('getName')->willReturn('inline');
- $strategy->expects($this->once())->method('render')->will($return);
+
+ $mocker = $strategy->expects($this->once())->method('render');
+ if ($returnOrException instanceof \Exception) {
+ $mocker->willThrowException($returnOrException);
+ } else {
+ $mocker->willReturn($returnOrException);
+ }
$context = $this->createMock(RequestStack::class);
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php b/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php
index dea148192475a..b0dbf86a840cb 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/RuntimeLoaderProvider.php
@@ -20,9 +20,9 @@ trait RuntimeLoaderProvider
protected function registerTwigRuntimeLoader(Environment $environment, FormRenderer $renderer)
{
$loader = $this->createMock(RuntimeLoaderInterface::class);
- $loader->expects($this->any())->method('load')->will($this->returnValueMap([
+ $loader->expects($this->any())->method('load')->willReturnMap([
['Symfony\Component\Form\FormRenderer', $renderer],
- ]));
+ ]);
$environment->addRuntimeLoader($loader);
}
}
diff --git a/src/Symfony/Bundle/DebugBundle/.gitattributes b/src/Symfony/Bundle/DebugBundle/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bundle/DebugBundle/.gitattributes
+++ b/src/Symfony/Bundle/DebugBundle/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bundle/DebugBundle/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bundle/DebugBundle/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bundle/DebugBundle/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bundle/DebugBundle/.github/workflows/check-subtree-split.yml b/src/Symfony/Bundle/DebugBundle/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bundle/DebugBundle/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bundle/FrameworkBundle/.gitattributes b/src/Symfony/Bundle/FrameworkBundle/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bundle/FrameworkBundle/.gitattributes
+++ b/src/Symfony/Bundle/FrameworkBundle/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bundle/FrameworkBundle/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bundle/FrameworkBundle/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bundle/FrameworkBundle/.github/workflows/check-subtree-split.yml b/src/Symfony/Bundle/FrameworkBundle/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 731c6e7ee4b3e..f7ab7e3ed5835 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -1854,18 +1854,19 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
$container->setParameter('serializer.default_context', $defaultContext);
}
+ $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments();
+ $context = [];
+
if (isset($config['circular_reference_handler']) && $config['circular_reference_handler']) {
- $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments();
- $context = ($arguments[6] ?? $defaultContext) + ['circular_reference_handler' => new Reference($config['circular_reference_handler'])];
+ $context += ($arguments[6] ?? $defaultContext) + ['circular_reference_handler' => new Reference($config['circular_reference_handler'])];
$container->getDefinition('serializer.normalizer.object')->setArgument(5, null);
- $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context);
}
if ($config['max_depth_handler'] ?? false) {
- $arguments = $container->getDefinition('serializer.normalizer.object')->getArguments();
- $context = ($arguments[6] ?? $defaultContext) + ['max_depth_handler' => new Reference($config['max_depth_handler'])];
- $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context);
+ $context += ($arguments[6] ?? $defaultContext) + ['max_depth_handler' => new Reference($config['max_depth_handler'])];
}
+
+ $container->getDefinition('serializer.normalizer.object')->setArgument(6, $context);
}
private function registerPropertyInfoConfiguration(ContainerBuilder $container, PhpFileLoader $loader)
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
index 63964f34f5599..7762e5a64ca86 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php
@@ -125,6 +125,8 @@
service('property_info')->ignoreOnInvalid(),
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
null,
+ null,
+ service('property_info')->ignoreOnInvalid(),
])
->tag('serializer.normalizer', ['priority' => -1000])
@@ -138,7 +140,6 @@
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
null,
[],
- service('property_info')->ignoreOnInvalid(),
])
->alias(PropertyNormalizer::class, 'serializer.normalizer.property')
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php
index dc00ef99e8210..c13d50bd23f73 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php
@@ -271,7 +271,7 @@ protected function getLoader()
$loader
->expects($this->exactly(7))
->method('load')
- ->willReturnOnConsecutiveCalls(
+ ->willReturn(
$this->getCatalogue('fr', [
'foo' => 'foo (FR)',
]),
diff --git a/src/Symfony/Bundle/SecurityBundle/.gitattributes b/src/Symfony/Bundle/SecurityBundle/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bundle/SecurityBundle/.gitattributes
+++ b/src/Symfony/Bundle/SecurityBundle/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bundle/SecurityBundle/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bundle/SecurityBundle/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bundle/SecurityBundle/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bundle/SecurityBundle/.github/workflows/check-subtree-split.yml b/src/Symfony/Bundle/SecurityBundle/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bundle/SecurityBundle/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php
index e46a36a44fbe4..f8c35cf9ece58 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Security/Factory/AbstractFactoryTest.php
@@ -145,7 +145,12 @@ public static function getSuccessHandlers()
protected function callFactory($id, $config, $userProviderId, $defaultEntryPointId)
{
- $factory = $this->getMockForAbstractClass(AbstractFactory::class);
+ $factory = $this->getMockBuilder(AbstractFactory::class)->onlyMethods([
+ 'createAuthProvider',
+ 'getListenerId',
+ 'getKey',
+ 'getPosition',
+ ])->getMock();
$factory
->expects($this->once())
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php
index f9363e8290dc0..51d4d781fc233 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AbstractWebTestCase.php
@@ -33,7 +33,7 @@ public static function tearDownAfterClass(): void
static::deleteTmpDir();
}
- public function provideSecuritySystems()
+ public static function provideSecuritySystems()
{
yield [['enable_authenticator_manager' => true]];
yield [['enable_authenticator_manager' => false]];
diff --git a/src/Symfony/Bundle/TwigBundle/.gitattributes b/src/Symfony/Bundle/TwigBundle/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bundle/TwigBundle/.gitattributes
+++ b/src/Symfony/Bundle/TwigBundle/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bundle/TwigBundle/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bundle/TwigBundle/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bundle/TwigBundle/.github/workflows/check-subtree-split.yml b/src/Symfony/Bundle/TwigBundle/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bundle/TwigBundle/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bundle/WebProfilerBundle/.gitattributes b/src/Symfony/Bundle/WebProfilerBundle/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/.gitattributes
+++ b/src/Symfony/Bundle/WebProfilerBundle/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Bundle/WebProfilerBundle/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Bundle/WebProfilerBundle/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Bundle/WebProfilerBundle/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Bundle/WebProfilerBundle/.github/workflows/check-subtree-split.yml b/src/Symfony/Bundle/WebProfilerBundle/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Bundle/WebProfilerBundle/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php
index 37438ed560206..f0cf4f36a196f 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Twig/WebProfilerExtensionTest.php
@@ -15,6 +15,7 @@
use Symfony\Bundle\WebProfilerBundle\Twig\WebProfilerExtension;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Twig\Environment;
+use Twig\Loader\ArrayLoader;
class WebProfilerExtensionTest extends TestCase
{
@@ -23,7 +24,7 @@ class WebProfilerExtensionTest extends TestCase
*/
public function testDumpHeaderIsDisplayed(string $message, array $context, bool $dump1HasHeader, bool $dump2HasHeader)
{
- $twigEnvironment = $this->mockTwigEnvironment();
+ $twigEnvironment = new Environment(new ArrayLoader());
$varCloner = new VarCloner();
$webProfilerExtension = new WebProfilerExtension();
@@ -44,13 +45,4 @@ public static function provideMessages(): iterable
yield ['Some message {foo}', ['foo' => 'foo', 'bar' => 'bar'], true, false];
yield ['Some message {foo}', ['bar' => 'bar'], false, true];
}
-
- private function mockTwigEnvironment()
- {
- $twigEnvironment = $this->createMock(Environment::class);
-
- $twigEnvironment->expects($this->any())->method('getCharset')->willReturn('UTF-8');
-
- return $twigEnvironment;
- }
}
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php b/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php
index 2a4e975760426..82352f5996122 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Twig/WebProfilerExtension.php
@@ -17,6 +17,7 @@
use Twig\Extension\EscaperExtension;
use Twig\Extension\ProfilerExtension;
use Twig\Profiler\Profile;
+use Twig\Runtime\EscaperRuntime;
use Twig\TwigFunction;
/**
@@ -114,6 +115,12 @@ public function getName()
private static function escape(Environment $env, string $s): string
{
+ // Twig 3.10 and above
+ if (class_exists(EscaperRuntime::class)) {
+ return $env->getRuntime(EscaperRuntime::class)->escape($s);
+ }
+
+ // Twig 3.9
if (method_exists(EscaperExtension::class, 'escape')) {
return EscaperExtension::escape($env, $s);
}
diff --git a/src/Symfony/Component/Asset/.gitattributes b/src/Symfony/Component/Asset/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Asset/.gitattributes
+++ b/src/Symfony/Component/Asset/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Asset/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Asset/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Asset/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Asset/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Asset/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Asset/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/BrowserKit/.gitattributes b/src/Symfony/Component/BrowserKit/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/BrowserKit/.gitattributes
+++ b/src/Symfony/Component/BrowserKit/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/BrowserKit/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/BrowserKit/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/BrowserKit/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/BrowserKit/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/BrowserKit/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/BrowserKit/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Cache/.gitattributes b/src/Symfony/Component/Cache/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Cache/.gitattributes
+++ b/src/Symfony/Component/Cache/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Cache/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Cache/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Cache/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Cache/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Cache/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Cache/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php
index af6390b9bcfa5..518a563060240 100644
--- a/src/Symfony/Component/Cache/Traits/RedisTrait.php
+++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php
@@ -15,6 +15,8 @@
use Predis\Connection\Aggregate\ClusterInterface;
use Predis\Connection\Aggregate\RedisCluster;
use Predis\Connection\Aggregate\ReplicationInterface;
+use Predis\Connection\Cluster\ClusterInterface as Predis2ClusterInterface;
+use Predis\Connection\Cluster\RedisCluster as Predis2RedisCluster;
use Predis\Response\ErrorInterface;
use Predis\Response\Status;
use Symfony\Component\Cache\Exception\CacheException;
@@ -414,7 +416,7 @@ protected function doFetch(array $ids)
$result = [];
- if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) {
+ if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) {
$values = $this->pipeline(function () use ($ids) {
foreach ($ids as $id) {
yield 'get' => [$id];
@@ -499,7 +501,7 @@ protected function doClear(string $namespace)
}
$this->doDelete($keys);
}
- } while ($cursor = (int) $cursor);
+ } while ($cursor);
}
return $cleared;
@@ -511,7 +513,7 @@ protected function doDelete(array $ids)
return true;
}
- if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) {
+ if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) {
static $del;
$del = $del ?? (class_exists(UNLINK::class) ? 'unlink' : 'del');
@@ -569,7 +571,7 @@ private function pipeline(\Closure $generator, ?object $redis = null): \Generato
$ids = [];
$redis = $redis ?? $this->redis;
- if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && $redis->getConnection() instanceof RedisCluster)) {
+ if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && ($redis->getConnection() instanceof RedisCluster || $redis->getConnection() instanceof Predis2RedisCluster))) {
// phpredis & predis don't support pipelining with RedisCluster
// see https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#pipelining
// see https://github.com/nrk/predis/issues/267#issuecomment-123781423
@@ -631,7 +633,7 @@ private function getHosts(): array
$hosts = [$this->redis];
if ($this->redis instanceof \Predis\ClientInterface) {
$connection = $this->redis->getConnection();
- if ($connection instanceof ClusterInterface && $connection instanceof \Traversable) {
+ if (($connection instanceof ClusterInterface || $connection instanceof Predis2ClusterInterface) && $connection instanceof \Traversable) {
$hosts = [];
foreach ($connection as $c) {
$hosts[] = new \Predis\Client($c);
diff --git a/src/Symfony/Component/Cache/composer.json b/src/Symfony/Component/Cache/composer.json
index e3526bb8158b4..fdf794fb3b368 100644
--- a/src/Symfony/Component/Cache/composer.json
+++ b/src/Symfony/Component/Cache/composer.json
@@ -35,7 +35,7 @@
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3|^4",
- "predis/predis": "^1.1",
+ "predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
diff --git a/src/Symfony/Component/Config/.gitattributes b/src/Symfony/Component/Config/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Config/.gitattributes
+++ b/src/Symfony/Component/Config/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Config/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Config/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Config/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Config/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Config/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Config/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php b/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php
index 4ea8469ef3c14..d2f0593ccda38 100644
--- a/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php
+++ b/src/Symfony/Component/Config/Tests/Definition/BaseNodeTest.php
@@ -36,7 +36,36 @@ public function testGetPathForChildNode(string $expected, array $params)
}
}
- $node = $this->getMockForAbstractClass(BaseNode::class, $constructorArgs);
+ $node = new class(...$constructorArgs) extends BaseNode {
+ protected function validateType($value): void
+ {
+ }
+
+ protected function normalizeValue($value)
+ {
+ return null;
+ }
+
+ protected function mergeValues($leftSide, $rightSide)
+ {
+ return null;
+ }
+
+ protected function finalizeValue($value)
+ {
+ return null;
+ }
+
+ public function hasDefaultValue(): bool
+ {
+ return true;
+ }
+
+ public function getDefaultValue()
+ {
+ return null;
+ }
+ };
$this->assertSame($expected, $node->getPath());
}
diff --git a/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php b/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php
index cae46ca8f9adf..7503dd196d7d6 100644
--- a/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php
+++ b/src/Symfony/Component/Config/Tests/Loader/FileLoaderTest.php
@@ -25,13 +25,15 @@ public function testImportWithFileLocatorDelegation()
$locatorMock = $this->createMock(FileLocatorInterface::class);
$locatorMockForAdditionalLoader = $this->createMock(FileLocatorInterface::class);
- $locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls(
- ['path/to/file1'], // Default
- ['path/to/file1', 'path/to/file2'], // First is imported
- ['path/to/file1', 'path/to/file2'], // Second is imported
- ['path/to/file1'], // Exception
- ['path/to/file1', 'path/to/file2'] // Exception
- ));
+ $locatorMockForAdditionalLoader->expects($this->any())
+ ->method('locate')
+ ->willReturn(
+ ['path/to/file1'],
+ ['path/to/file1', 'path/to/file2'],
+ ['path/to/file1', 'path/to/file2'],
+ ['path/to/file1'],
+ ['path/to/file1', 'path/to/file2']
+ );
$fileLoader = new TestFileLoader($locatorMock);
$fileLoader->setSupports(false);
diff --git a/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php b/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php
index 8c1cd8543be19..be8c53155f0ff 100644
--- a/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php
+++ b/src/Symfony/Component/Config/Tests/Util/XmlUtilsTest.php
@@ -76,7 +76,8 @@ public function testLoadFile()
}
$mock = $this->createMock(Validator::class);
- $mock->expects($this->exactly(2))->method('validate')->will($this->onConsecutiveCalls(false, true));
+ $mock->expects($this->exactly(2))->method('validate')
+ ->willReturn(false, true);
try {
XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']);
diff --git a/src/Symfony/Component/Console/.gitattributes b/src/Symfony/Component/Console/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Console/.gitattributes
+++ b/src/Symfony/Component/Console/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Console/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Console/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Console/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Console/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Console/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Console/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php
index bf5652ccc47f2..d58f283585e35 100644
--- a/src/Symfony/Component/Console/Tests/ApplicationTest.php
+++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php
@@ -41,6 +41,7 @@
use Symfony\Component\Console\SignalRegistry\SignalRegistry;
use Symfony\Component\Console\Terminal;
use Symfony\Component\Console\Tester\ApplicationTester;
+use Symfony\Component\Console\Tests\Fixtures\MockableAppliationWithTerminalWidth;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -876,7 +877,9 @@ public function testRenderExceptionEscapesLines()
public function testRenderExceptionLineBreaks()
{
- $application = $this->getMockBuilder(Application::class)->addMethods(['getTerminalWidth'])->getMock();
+ $application = $this->getMockBuilder(MockableAppliationWithTerminalWidth::class)
+ ->onlyMethods(['getTerminalWidth'])
+ ->getMock();
$application->setAutoExit(false);
$application->expects($this->any())
->method('getTerminalWidth')
diff --git a/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php b/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php
new file mode 100644
index 0000000000000..7f094ff3c5946
--- /dev/null
+++ b/src/Symfony/Component/Console/Tests/Fixtures/MockableAppliationWithTerminalWidth.php
@@ -0,0 +1,22 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Fixtures;
+
+use Symfony\Component\Console\Application;
+
+class MockableAppliationWithTerminalWidth extends Application
+{
+ public function getTerminalWidth(): int
+ {
+ return 0;
+ }
+}
diff --git a/src/Symfony/Component/Console/Tests/Question/QuestionTest.php b/src/Symfony/Component/Console/Tests/Question/QuestionTest.php
index e6b6fbee0ed10..bf2763d779af3 100644
--- a/src/Symfony/Component/Console/Tests/Question/QuestionTest.php
+++ b/src/Symfony/Component/Console/Tests/Question/QuestionTest.php
@@ -157,7 +157,7 @@ public function testSetAutocompleterValuesInvalid($values)
public function testSetAutocompleterValuesWithTraversable()
{
$question1 = new Question('Test question 1');
- $iterator1 = $this->getMockForAbstractClass(\IteratorAggregate::class);
+ $iterator1 = $this->createMock(\IteratorAggregate::class);
$iterator1
->expects($this->once())
->method('getIterator')
@@ -165,7 +165,7 @@ public function testSetAutocompleterValuesWithTraversable()
$question1->setAutocompleterValues($iterator1);
$question2 = new Question('Test question 2');
- $iterator2 = $this->getMockForAbstractClass(\IteratorAggregate::class);
+ $iterator2 = $this->createMock(\IteratorAggregate::class);
$iterator2
->expects($this->once())
->method('getIterator')
diff --git a/src/Symfony/Component/CssSelector/.gitattributes b/src/Symfony/Component/CssSelector/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/CssSelector/.gitattributes
+++ b/src/Symfony/Component/CssSelector/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/CssSelector/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/CssSelector/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/CssSelector/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/CssSelector/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/CssSelector/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/CssSelector/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/DependencyInjection/.gitattributes b/src/Symfony/Component/DependencyInjection/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/DependencyInjection/.gitattributes
+++ b/src/Symfony/Component/DependencyInjection/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/DependencyInjection/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/DependencyInjection/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/DependencyInjection/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/DependencyInjection/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/DependencyInjection/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/DependencyInjection/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php b/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php
index f13acc8f140e2..a5efc89a7c710 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Config/ContainerParametersResourceCheckerTest.php
@@ -46,7 +46,7 @@ public function testSupports()
*/
public function testIsFresh(callable $mockContainer, $expected)
{
- $mockContainer($this->container);
+ $mockContainer($this->container, $this);
$this->assertSame($expected, $this->resourceChecker->isFresh($this->resource, time()));
}
@@ -61,9 +61,9 @@ public static function isFreshProvider()
$container->method('getParameter')->with('locales')->willReturn(['nl', 'es']);
}, false];
- yield 'fresh on every identical parameters' => [function (MockObject $container) {
- $container->expects(self::exactly(2))->method('hasParameter')->willReturn(true);
- $container->expects(self::exactly(2))->method('getParameter')
+ yield 'fresh on every identical parameters' => [function (MockObject $container, TestCase $testCase) {
+ $container->expects($testCase->exactly(2))->method('hasParameter')->willReturn(true);
+ $container->expects($testCase->exactly(2))->method('getParameter')
->willReturnCallback(function (...$args) {
static $series = [
[['locales'], ['fr', 'en']],
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php b/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php
index 8b141d2577ee3..6f15b22b95cab 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php
@@ -194,6 +194,8 @@ public function testNestedBundleConfigNotAllowed()
*/
public function testWhenEnv()
{
+ $this->expectNotToPerformAssertions();
+
$fixtures = realpath(__DIR__.'/../Fixtures');
$container = new ContainerBuilder();
$loader = new PhpFileLoader($container, new FileLocator(), 'dev', new ConfigBuilderGenerator(sys_get_temp_dir()));
diff --git a/src/Symfony/Component/DomCrawler/.gitattributes b/src/Symfony/Component/DomCrawler/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/DomCrawler/.gitattributes
+++ b/src/Symfony/Component/DomCrawler/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/DomCrawler/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/DomCrawler/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/DomCrawler/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/DomCrawler/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/DomCrawler/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/DomCrawler/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Dotenv/.gitattributes b/src/Symfony/Component/Dotenv/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Dotenv/.gitattributes
+++ b/src/Symfony/Component/Dotenv/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Dotenv/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Dotenv/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Dotenv/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Dotenv/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Dotenv/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Dotenv/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Dotenv/Command/DebugCommand.php b/src/Symfony/Component/Dotenv/Command/DebugCommand.php
index 0585043cd9463..237d7b7cfd228 100644
--- a/src/Symfony/Component/Dotenv/Command/DebugCommand.php
+++ b/src/Symfony/Component/Dotenv/Command/DebugCommand.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Dotenv\Command;
use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
@@ -49,97 +50,105 @@ protected function execute(InputInterface $input, OutputInterface $output): int
return 1;
}
- $envFiles = $this->getEnvFiles();
- $availableFiles = array_filter($envFiles, function (string $file) {
- return is_file($this->getFilePath($file));
- });
+ $filePath = $this->projectDirectory.\DIRECTORY_SEPARATOR.'.env';
+ $envFiles = $this->getEnvFiles($filePath);
+ $availableFiles = array_filter($envFiles, 'is_file');
- if (\in_array('.env.local.php', $availableFiles, true)) {
+ if (\in_array(sprintf('%s.local.php', $filePath), $availableFiles, true)) {
$io->warning('Due to existing dump file (.env.local.php) all other dotenv files are skipped.');
}
- if (is_file($this->getFilePath('.env')) && is_file($this->getFilePath('.env.dist'))) {
- $io->warning('The file .env.dist gets skipped due to the existence of .env.');
+ if (is_file($filePath) && is_file(sprintf('%s.dist', $filePath))) {
+ $io->warning(sprintf('The file %s.dist gets skipped due to the existence of %1$s.', $this->getRelativeName($filePath)));
}
$io->section('Scanned Files (in descending priority)');
- $io->listing(array_map(static function (string $envFile) use ($availableFiles) {
+ $io->listing(array_map(function (string $envFile) use ($availableFiles) {
return \in_array($envFile, $availableFiles, true)
- ? sprintf('✓> %s', $envFile)
- : sprintf('⨯> %s', $envFile);
+ ? sprintf('✓> %s', $this->getRelativeName($envFile))
+ : sprintf('⨯> %s', $this->getRelativeName($envFile));
}, $envFiles));
+ $variables = $this->getVariables($availableFiles);
+
$io->section('Variables');
$io->table(
- array_merge(['Variable', 'Value'], $availableFiles),
- $this->getVariables($availableFiles)
+ array_merge(['Variable', 'Value'], array_map([$this, 'getRelativeName'], $availableFiles)),
+ $variables
);
- $io->comment('Note real values might be different between web and CLI.');
+ $io->comment('Note that values might be different between web and CLI.');
return 0;
}
private function getVariables(array $envFiles): array
{
- $dotenvVars = $_SERVER['SYMFONY_DOTENV_VARS'] ?? '';
+ $variables = [];
+ $fileValues = [];
+ $dotenvVars = array_flip(explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? ''));
- if ('' === $dotenvVars) {
- return [];
+ foreach ($envFiles as $envFile) {
+ $fileValues[$envFile] = $this->loadValues($envFile);
+ $variables += $fileValues[$envFile];
}
- $vars = explode(',', $dotenvVars);
- sort($vars);
+ foreach ($variables as $var => $varDetails) {
+ $realValue = $_SERVER[$var] ?? '';
+ $varDetails = [$var, ''.OutputFormatter::escape($realValue).'>'];
+ $varSeen = !isset($dotenvVars[$var]);
- $output = [];
- $fileValues = [];
- foreach ($vars as $var) {
- $realValue = $_SERVER[$var];
- $varDetails = [$var, $realValue];
foreach ($envFiles as $envFile) {
- $values = $fileValues[$envFile] ?? $fileValues[$envFile] = $this->loadValues($envFile);
-
- $varString = $values[$var] ?? 'n/a>';
- $shortenedVar = $this->getHelper('formatter')->truncate($varString, 30);
- $varDetails[] = $varString === $realValue ? ''.$shortenedVar.'>' : $shortenedVar;
+ if (null === $value = $fileValues[$envFile][$var] ?? null) {
+ $varDetails[] = 'n/a>';
+ continue;
+ }
+
+ $shortenedValue = OutputFormatter::escape($this->getHelper('formatter')->truncate($value, 30));
+ $varDetails[] = $value === $realValue && !$varSeen ? ''.$shortenedValue.'>' : $shortenedValue;
+ $varSeen = $varSeen || $value === $realValue;
}
- $output[] = $varDetails;
+ $variables[$var] = $varDetails;
}
- return $output;
+ ksort($variables);
+
+ return $variables;
}
- private function getEnvFiles(): array
+ private function getEnvFiles(string $filePath): array
{
$files = [
- '.env.local.php',
- sprintf('.env.%s.local', $this->kernelEnvironment),
- sprintf('.env.%s', $this->kernelEnvironment),
+ sprintf('%s.local.php', $filePath),
+ sprintf('%s.%s.local', $filePath, $this->kernelEnvironment),
+ sprintf('%s.%s', $filePath, $this->kernelEnvironment),
];
if ('test' !== $this->kernelEnvironment) {
- $files[] = '.env.local';
+ $files[] = sprintf('%s.local', $filePath);
}
- if (!is_file($this->getFilePath('.env')) && is_file($this->getFilePath('.env.dist'))) {
- $files[] = '.env.dist';
+ if (!is_file($filePath) && is_file(sprintf('%s.dist', $filePath))) {
+ $files[] = sprintf('%s.dist', $filePath);
} else {
- $files[] = '.env';
+ $files[] = $filePath;
}
return $files;
}
- private function getFilePath(string $file): string
+ private function getRelativeName(string $filePath): string
{
- return $this->projectDirectory.\DIRECTORY_SEPARATOR.$file;
+ if (str_starts_with($filePath, $this->projectDirectory)) {
+ return substr($filePath, \strlen($this->projectDirectory) + 1);
+ }
+
+ return basename($filePath);
}
- private function loadValues(string $file): array
+ private function loadValues(string $filePath): array
{
- $filePath = $this->getFilePath($file);
-
if (str_ends_with($filePath, '.php')) {
return include $filePath;
}
diff --git a/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php
index b8b7e39008607..001baec0c2539 100644
--- a/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php
+++ b/src/Symfony/Component/Dotenv/Tests/Command/DebugCommandTest.php
@@ -52,8 +52,11 @@ public function testEmptyDotEnvVarsList()
---------- ------- ------------ ------%S
Variable Value .env.local .env%S
---------- ------- ------------ ------%S
+ FOO baz bar%S
+ TEST123 n/a true%S
+ ---------- ------- ------------ ------%S
- // Note real values might be different between web and CLI.%S
+ // Note that values might be different between web and CLI.%S
%a
OUTPUT;
diff --git a/src/Symfony/Component/ErrorHandler/.gitattributes b/src/Symfony/Component/ErrorHandler/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/ErrorHandler/.gitattributes
+++ b/src/Symfony/Component/ErrorHandler/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/ErrorHandler/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/ErrorHandler/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/ErrorHandler/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/ErrorHandler/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/ErrorHandler/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/ErrorHandler/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/ErrorHandler/Error/FatalError.php b/src/Symfony/Component/ErrorHandler/Error/FatalError.php
index 73fa3aaa0e6b8..210daba8658cc 100644
--- a/src/Symfony/Component/ErrorHandler/Error/FatalError.php
+++ b/src/Symfony/Component/ErrorHandler/Error/FatalError.php
@@ -33,7 +33,7 @@ public function __construct(string $message, int $code, array $error, ?int $trac
}
}
} elseif (null !== $traceOffset) {
- if (\function_exists('xdebug_get_function_stack') && $trace = @xdebug_get_function_stack()) {
+ if (\function_exists('xdebug_get_function_stack') && \in_array(\ini_get('xdebug.mode'), ['develop', false], true) && $trace = @xdebug_get_function_stack()) {
if (0 < $traceOffset) {
array_splice($trace, -$traceOffset);
}
diff --git a/src/Symfony/Component/EventDispatcher/.gitattributes b/src/Symfony/Component/EventDispatcher/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/EventDispatcher/.gitattributes
+++ b/src/Symfony/Component/EventDispatcher/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/EventDispatcher/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/EventDispatcher/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/EventDispatcher/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/ExpressionLanguage/.gitattributes b/src/Symfony/Component/ExpressionLanguage/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/ExpressionLanguage/.gitattributes
+++ b/src/Symfony/Component/ExpressionLanguage/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/ExpressionLanguage/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/ExpressionLanguage/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/ExpressionLanguage/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/ExpressionLanguage/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/ExpressionLanguage/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/ExpressionLanguage/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Filesystem/.gitattributes b/src/Symfony/Component/Filesystem/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Filesystem/.gitattributes
+++ b/src/Symfony/Component/Filesystem/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Filesystem/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Filesystem/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Filesystem/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Filesystem/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Filesystem/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Filesystem/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Filesystem/Filesystem.php b/src/Symfony/Component/Filesystem/Filesystem.php
index c5cfa47140052..700311d5843fc 100644
--- a/src/Symfony/Component/Filesystem/Filesystem.php
+++ b/src/Symfony/Component/Filesystem/Filesystem.php
@@ -691,7 +691,7 @@ public function dumpFile(string $filename, $content)
throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename);
}
- self::box('chmod', $tmpFile, @fileperms($filename) ?: 0666 & ~umask());
+ self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0666 & ~umask());
$this->rename($tmpFile, $filename, true);
} finally {
diff --git a/src/Symfony/Component/Filesystem/Path.php b/src/Symfony/Component/Filesystem/Path.php
index 858e1623eb2cd..eb6d8ea080e8e 100644
--- a/src/Symfony/Component/Filesystem/Path.php
+++ b/src/Symfony/Component/Filesystem/Path.php
@@ -368,7 +368,7 @@ public static function isAbsolute(string $path): bool
}
// Strip scheme
- if (false !== $schemeSeparatorPosition = strpos($path, '://')) {
+ if (false !== ($schemeSeparatorPosition = strpos($path, '://')) && 1 !== $schemeSeparatorPosition) {
$path = substr($path, $schemeSeparatorPosition + 3);
}
diff --git a/src/Symfony/Component/Filesystem/Tests/PathTest.php b/src/Symfony/Component/Filesystem/Tests/PathTest.php
index 77b9f2a2d0576..17c6142c3572e 100644
--- a/src/Symfony/Component/Filesystem/Tests/PathTest.php
+++ b/src/Symfony/Component/Filesystem/Tests/PathTest.php
@@ -375,6 +375,8 @@ public static function provideIsAbsolutePathTests(): \Generator
yield ['C:/css/style.css', true];
yield ['D:/', true];
+ yield ['C:///windows', true];
+ yield ['C://test', true];
yield ['E:\\css\\style.css', true];
yield ['F:\\', true];
diff --git a/src/Symfony/Component/Filesystem/composer.json b/src/Symfony/Component/Filesystem/composer.json
index 95e9f3f035ee8..5811ef5907e44 100644
--- a/src/Symfony/Component/Filesystem/composer.json
+++ b/src/Symfony/Component/Filesystem/composer.json
@@ -19,7 +19,9 @@
"php": ">=7.2.5",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
"symfony/process": "^5.4|^6.4"
},
"autoload": {
diff --git a/src/Symfony/Component/Finder/.gitattributes b/src/Symfony/Component/Finder/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Finder/.gitattributes
+++ b/src/Symfony/Component/Finder/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Finder/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Finder/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Finder/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Finder/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Finder/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Finder/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Form/.gitattributes b/src/Symfony/Component/Form/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Form/.gitattributes
+++ b/src/Symfony/Component/Form/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Form/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Form/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Form/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Form/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Form/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Form/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php
index 721371996996b..70240fc3e4088 100644
--- a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php
+++ b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php
@@ -36,8 +36,8 @@ protected function getValidatorExtension(): ValidatorExtension
$this->validator = $this->createMock(ValidatorInterface::class);
$metadata = $this->getMockBuilder(ClassMetadata::class)->setConstructorArgs([''])->onlyMethods(['addPropertyConstraint'])->getMock();
- $this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata));
- $this->validator->expects($this->any())->method('validate')->will($this->returnValue(new ConstraintViolationList()));
+ $this->validator->expects($this->any())->method('getMetadataFor')->willReturn($metadata);
+ $this->validator->expects($this->any())->method('validate')->willReturn(new ConstraintViolationList());
return new ValidatorExtension($this->validator, false);
}
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
index a29873a26779e..8a37707e7cf97 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php
@@ -25,14 +25,17 @@ class DateTimeToLocalizedStringTransformerTest extends BaseDateTimeTransformerTe
protected $dateTimeWithoutSeconds;
private $defaultLocale;
+ private $initialTestCaseUseException;
+ private $initialTestCaseErrorLevel;
+
protected function setUp(): void
{
parent::setUp();
// Normalize intl. configuration settings.
if (\extension_loaded('intl')) {
- $this->iniSet('intl.use_exceptions', 0);
- $this->iniSet('intl.error_level', 0);
+ $this->initialTestCaseUseException = ini_set('intl.use_exceptions', 0);
+ $this->initialTestCaseErrorLevel = ini_set('intl.error_level', 0);
}
// Since we test against "de_AT", we need the full implementation
@@ -50,6 +53,11 @@ protected function tearDown(): void
$this->dateTime = null;
$this->dateTimeWithoutSeconds = null;
\Locale::setDefault($this->defaultLocale);
+
+ if (\extension_loaded('intl')) {
+ ini_set('intl.use_exceptions', $this->initialTestCaseUseException);
+ ini_set('intl.error_level', $this->initialTestCaseUseException);
+ }
}
public static function dataProvider()
@@ -339,11 +347,15 @@ public function testReverseTransformWrapsIntlErrorsWithErrorLevel()
$this->markTestSkipped('intl extension is not loaded');
}
- $this->iniSet('intl.error_level', \E_WARNING);
+ $errorLevel = ini_set('intl.error_level', \E_WARNING);
- $this->expectException(TransformationFailedException::class);
- $transformer = new DateTimeToLocalizedStringTransformer();
- $transformer->reverseTransform('12345');
+ try {
+ $this->expectException(TransformationFailedException::class);
+ $transformer = new DateTimeToLocalizedStringTransformer();
+ $transformer->reverseTransform('12345');
+ } finally {
+ ini_set('intl.error_level', $errorLevel);
+ }
}
public function testReverseTransformWrapsIntlErrorsWithExceptions()
@@ -352,11 +364,15 @@ public function testReverseTransformWrapsIntlErrorsWithExceptions()
$this->markTestSkipped('intl extension is not loaded');
}
- $this->iniSet('intl.use_exceptions', 1);
+ $initialUseExceptions = ini_set('intl.use_exceptions', 1);
- $this->expectException(TransformationFailedException::class);
- $transformer = new DateTimeToLocalizedStringTransformer();
- $transformer->reverseTransform('12345');
+ try {
+ $this->expectException(TransformationFailedException::class);
+ $transformer = new DateTimeToLocalizedStringTransformer();
+ $transformer->reverseTransform('12345');
+ } finally {
+ ini_set('intl.use_exceptions', $initialUseExceptions);
+ }
}
public function testReverseTransformWrapsIntlErrorsWithExceptionsAndErrorLevel()
@@ -365,12 +381,17 @@ public function testReverseTransformWrapsIntlErrorsWithExceptionsAndErrorLevel()
$this->markTestSkipped('intl extension is not loaded');
}
- $this->iniSet('intl.use_exceptions', 1);
- $this->iniSet('intl.error_level', \E_WARNING);
+ $initialUseExceptions = ini_set('intl.use_exceptions', 1);
+ $initialErrorLevel = ini_set('intl.error_level', \E_WARNING);
- $this->expectException(TransformationFailedException::class);
- $transformer = new DateTimeToLocalizedStringTransformer();
- $transformer->reverseTransform('12345');
+ try {
+ $this->expectException(TransformationFailedException::class);
+ $transformer = new DateTimeToLocalizedStringTransformer();
+ $transformer->reverseTransform('12345');
+ } finally {
+ ini_set('intl.use_exceptions', $initialUseExceptions);
+ ini_set('intl.error_level', $initialErrorLevel);
+ }
}
protected function createDateTimeTransformer(?string $inputTimezone = null, ?string $outputTimezone = null): BaseDateTimeTransformer
diff --git a/src/Symfony/Component/HttpClient/.gitattributes b/src/Symfony/Component/HttpClient/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/HttpClient/.gitattributes
+++ b/src/Symfony/Component/HttpClient/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/HttpClient/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/HttpClient/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/HttpClient/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/HttpClient/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/HttpClient/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/HttpClient/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/HttpFoundation/.gitattributes b/src/Symfony/Component/HttpFoundation/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/HttpFoundation/.gitattributes
+++ b/src/Symfony/Component/HttpFoundation/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/HttpFoundation/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/HttpFoundation/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/HttpFoundation/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/HttpFoundation/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/HttpFoundation/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/HttpFoundation/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/HttpFoundation/HeaderUtils.php b/src/Symfony/Component/HttpFoundation/HeaderUtils.php
index 3456edace0dc1..110896e1776d1 100644
--- a/src/Symfony/Component/HttpFoundation/HeaderUtils.php
+++ b/src/Symfony/Component/HttpFoundation/HeaderUtils.php
@@ -286,7 +286,11 @@ private static function groupParts(array $matches, string $separators, bool $fir
}
foreach ($partMatches as $matches) {
- $parts[] = '' === $separators ? self::unquote($matches[0][0]) : self::groupParts($matches, $separators, false);
+ if ('' === $separators && '' !== $unquoted = self::unquote($matches[0][0])) {
+ $parts[] = $unquoted;
+ } elseif ($groupedParts = self::groupParts($matches, $separators, false)) {
+ $parts[] = $groupedParts;
+ }
}
return $parts;
diff --git a/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php b/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php
index bf4582430503e..e972d714e068a 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/AcceptHeaderTest.php
@@ -41,6 +41,8 @@ public static function provideFromStringData()
{
return [
['', []],
+ [';;;', []],
+ ['0', [new AcceptHeaderItem('0')]],
['gzip', [new AcceptHeaderItem('gzip')]],
['gzip,deflate,sdch', [new AcceptHeaderItem('gzip'), new AcceptHeaderItem('deflate'), new AcceptHeaderItem('sdch')]],
["gzip, deflate\t,sdch", [new AcceptHeaderItem('gzip'), new AcceptHeaderItem('deflate'), new AcceptHeaderItem('sdch')]],
diff --git a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php
index 47facb7762ba6..6a1402fedcfd1 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php
@@ -294,6 +294,14 @@ public function testConstructorWithObjectWithoutToStringMethodThrowsAnException(
new JsonResponse(new \stdClass(), 200, [], true);
}
+
+ public function testSetDataWithNull()
+ {
+ $response = new JsonResponse();
+ $response->setData(null);
+
+ $this->assertSame('null', $response->getContent());
+ }
}
class JsonSerializableObject implements \JsonSerializable
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php
index 4990b1a1fc091..1712dcc491fc6 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/PredisClusterSessionHandlerTest.php
@@ -23,6 +23,9 @@ class PredisClusterSessionHandlerTest extends AbstractRedisSessionHandlerTestCas
*/
protected function createRedisClient(string $host): object
{
- return new Client([array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379])]);
+ return new Client(
+ [array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379])],
+ ['cluster' => 'redis']
+ );
}
}
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php
index adf074e36a03c..c67b1391d1058 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/NativeSessionStorageTest.php
@@ -34,10 +34,14 @@ class NativeSessionStorageTest extends TestCase
{
private $savePath;
+ private $initialSessionSaveHandler;
+ private $initialSessionSavePath;
+
protected function setUp(): void
{
- $this->iniSet('session.save_handler', 'files');
- $this->iniSet('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest');
+ $this->initialSessionSaveHandler = ini_set('session.save_handler', 'files');
+ $this->initialSessionSavePath = ini_set('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest');
+
if (!is_dir($this->savePath)) {
mkdir($this->savePath);
}
@@ -52,6 +56,8 @@ protected function tearDown(): void
}
$this->savePath = null;
+ ini_set('session.save_handler', $this->initialSessionSaveHandler);
+ ini_set('session.save_path', $this->initialSessionSavePath);
}
protected function getStorage(array $options = []): NativeSessionStorage
@@ -154,18 +160,26 @@ public function testRegenerationFailureDoesNotFlagStorageAsStarted()
public function testDefaultSessionCacheLimiter()
{
- $this->iniSet('session.cache_limiter', 'nocache');
+ $initialLimiter = ini_set('session.cache_limiter', 'nocache');
- new NativeSessionStorage();
- $this->assertEquals('', \ini_get('session.cache_limiter'));
+ try {
+ new NativeSessionStorage();
+ $this->assertEquals('', \ini_get('session.cache_limiter'));
+ } finally {
+ ini_set('session.cache_limiter', $initialLimiter);
+ }
}
public function testExplicitSessionCacheLimiter()
{
- $this->iniSet('session.cache_limiter', 'nocache');
+ $initialLimiter = ini_set('session.cache_limiter', 'nocache');
- new NativeSessionStorage(['cache_limiter' => 'public']);
- $this->assertEquals('public', \ini_get('session.cache_limiter'));
+ try {
+ new NativeSessionStorage(['cache_limiter' => 'public']);
+ $this->assertEquals('public', \ini_get('session.cache_limiter'));
+ } finally {
+ ini_set('session.cache_limiter', $initialLimiter);
+ }
}
public function testCookieOptions()
@@ -208,20 +222,25 @@ public function testSessionOptions()
public function testSetSaveHandler()
{
- $this->iniSet('session.save_handler', 'files');
- $storage = $this->getStorage();
- $storage->setSaveHandler();
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
- $storage->setSaveHandler(null);
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
- $storage->setSaveHandler(new SessionHandlerProxy(new NativeFileSessionHandler()));
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
- $storage->setSaveHandler(new NativeFileSessionHandler());
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
- $storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler()));
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
- $storage->setSaveHandler(new NullSessionHandler());
- $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $initialSaveHandler = ini_set('session.save_handler', 'files');
+
+ try {
+ $storage = $this->getStorage();
+ $storage->setSaveHandler();
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $storage->setSaveHandler(null);
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $storage->setSaveHandler(new SessionHandlerProxy(new NativeFileSessionHandler()));
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $storage->setSaveHandler(new NativeFileSessionHandler());
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler()));
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ $storage->setSaveHandler(new NullSessionHandler());
+ $this->assertInstanceOf(SessionHandlerProxy::class, $storage->getSaveHandler());
+ } finally {
+ ini_set('session.save_handler', $initialSaveHandler);
+ }
}
public function testStarted()
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
index e2fb93ebcc000..80d65651868ed 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/PhpBridgeSessionStorageTest.php
@@ -30,10 +30,14 @@ class PhpBridgeSessionStorageTest extends TestCase
{
private $savePath;
+ private $initialSessionSaveHandler;
+ private $initialSessionSavePath;
+
protected function setUp(): void
{
- $this->iniSet('session.save_handler', 'files');
- $this->iniSet('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest');
+ $this->initialSessionSaveHandler = ini_set('session.save_handler', 'files');
+ $this->initialSessionSavePath = ini_set('session.save_path', $this->savePath = sys_get_temp_dir().'/sftest');
+
if (!is_dir($this->savePath)) {
mkdir($this->savePath);
}
@@ -48,6 +52,8 @@ protected function tearDown(): void
}
$this->savePath = null;
+ ini_set('session.save_handler', $this->initialSessionSaveHandler);
+ ini_set('session.save_path', $this->initialSessionSavePath);
}
protected function getStorage(): PhpBridgeSessionStorage
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
index fde7a4a0aef71..742779c50e5a7 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
@@ -29,7 +29,7 @@ class AbstractProxyTest extends TestCase
protected function setUp(): void
{
- $this->proxy = $this->getMockForAbstractClass(AbstractProxy::class);
+ $this->proxy = new class() extends AbstractProxy {};
}
protected function tearDown(): void
diff --git a/src/Symfony/Component/HttpFoundation/composer.json b/src/Symfony/Component/HttpFoundation/composer.json
index cb8d59ffed0d5..a2e43a99cfaae 100644
--- a/src/Symfony/Component/HttpFoundation/composer.json
+++ b/src/Symfony/Component/HttpFoundation/composer.json
@@ -22,7 +22,7 @@
"symfony/polyfill-php80": "^1.16"
},
"require-dev": {
- "predis/predis": "~1.0",
+ "predis/predis": "^1.0|^2.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
diff --git a/src/Symfony/Component/HttpKernel/.gitattributes b/src/Symfony/Component/HttpKernel/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/HttpKernel/.gitattributes
+++ b/src/Symfony/Component/HttpKernel/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/HttpKernel/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/HttpKernel/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/HttpKernel/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/HttpKernel/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/HttpKernel/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/HttpKernel/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index d4fe96b6b7b56..d25647c87d157 100644
--- a/src/Symfony/Component/HttpKernel/Kernel.php
+++ b/src/Symfony/Component/HttpKernel/Kernel.php
@@ -78,11 +78,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
*/
private static $freshCache = [];
- public const VERSION = '5.4.39';
- public const VERSION_ID = 50439;
+ public const VERSION = '5.4.40';
+ public const VERSION_ID = 50440;
public const MAJOR_VERSION = 5;
public const MINOR_VERSION = 4;
- public const RELEASE_VERSION = 39;
+ public const RELEASE_VERSION = 40;
public const EXTRA_VERSION = '';
public const END_OF_MAINTENANCE = '11/2024';
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php
index 623b50cd0cd44..e0505f7f4115d 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/ErrorListenerTest.php
@@ -54,21 +54,25 @@ public function testConstruct()
*/
public function testHandleWithoutLogger($event, $event2)
{
- $this->iniSet('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul');
-
- $l = new ErrorListener('foo');
- $l->logKernelException($event);
- $l->onKernelException($event);
-
- $this->assertEquals(new Response('foo'), $event->getResponse());
+ $initialErrorLog = ini_set('error_log', file_exists('/dev/null') ? '/dev/null' : 'nul');
try {
- $l->logKernelException($event2);
- $l->onKernelException($event2);
- $this->fail('RuntimeException expected');
- } catch (\RuntimeException $e) {
- $this->assertSame('bar', $e->getMessage());
- $this->assertSame('foo', $e->getPrevious()->getMessage());
+ $l = new ErrorListener('foo');
+ $l->logKernelException($event);
+ $l->onKernelException($event);
+
+ $this->assertEquals(new Response('foo'), $event->getResponse());
+
+ try {
+ $l->logKernelException($event2);
+ $l->onKernelException($event2);
+ $this->fail('RuntimeException expected');
+ } catch (\RuntimeException $e) {
+ $this->assertSame('bar', $e->getMessage());
+ $this->assertSame('foo', $e->getPrevious()->getMessage());
+ }
+ } finally {
+ ini_set('error_log', $initialErrorLog);
}
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php
index f3265823a5765..7b3cc8159257b 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php
@@ -21,6 +21,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionFactory;
+use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory;
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory;
@@ -45,7 +46,7 @@ class SessionListenerTest extends TestCase
public function testSessionCookieOptions(array $phpSessionOptions, array $sessionOptions, array $expectedSessionOptions)
{
$session = $this->createMock(Session::class);
- $session->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->method('getUsageIndex')->willReturn(0, 1);
$session->method('getId')->willReturn('123456');
$session->method('getName')->willReturn('PHPSESSID');
$session->method('save');
@@ -338,7 +339,13 @@ public function testSessionCookieSetWhenOtherNativeVariablesSet()
public function testOnlyTriggeredOnMainRequest()
{
- $listener = $this->getMockForAbstractClass(AbstractSessionListener::class);
+ $listener = new class() extends AbstractSessionListener {
+ protected function getSession(): ?SessionInterface
+ {
+ return null;
+ }
+ };
+
$event = $this->createMock(RequestEvent::class);
$event->expects($this->once())->method('isMainRequest')->willReturn(false);
$event->expects($this->never())->method('getRequest');
@@ -398,7 +405,7 @@ public function testSessionUsesFactory()
public function testResponseIsPrivateIfSessionStarted()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -423,7 +430,7 @@ public function testResponseIsPrivateIfSessionStarted()
public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -450,7 +457,7 @@ public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent()
public function testSessionSaveAndResponseHasSessionCookie()
{
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$session->expects($this->exactly(1))->method('getId')->willReturn('123456');
$session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID');
$session->expects($this->exactly(1))->method('save');
@@ -535,7 +542,7 @@ public function testUninitializedSessionWithoutInitializedSession()
public function testResponseHeadersMaxAgeAndExpiresNotBeOverridenIfSessionStarted()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -565,7 +572,7 @@ public function testResponseHeadersMaxAgeAndExpiresNotBeOverridenIfSessionStarte
public function testResponseHeadersMaxAgeAndExpiresDefaultValuesIfSessionStarted()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -618,7 +625,7 @@ public function testSurrogateMainRequestIsPublic()
{
$session = $this->createMock(Session::class);
$session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID');
- $session->expects($this->exactly(4))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1, 1, 1));
+ $session->expects($this->exactly(4))->method('getUsageIndex')->willReturn(0, 1, 1, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -715,7 +722,7 @@ public function testGetSessionSetsSessionOnMainRequest()
public function testSessionUsageExceptionIfStatelessAndSessionUsed()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$container = new Container();
$container->set('initialized_session', $session);
@@ -734,7 +741,7 @@ public function testSessionUsageExceptionIfStatelessAndSessionUsed()
public function testSessionUsageLogIfStatelessAndSessionUsed()
{
$session = $this->createMock(Session::class);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$logger = $this->createMock(LoggerInterface::class);
$logger->expects($this->exactly(1))->method('warning');
@@ -759,7 +766,7 @@ public function testSessionIsSavedWhenUnexpectedSessionExceptionThrown()
$session->expects($this->exactly(1))->method('getId')->willReturn('123456');
$session->expects($this->exactly(1))->method('getName')->willReturn('PHPSESSID');
$session->method('isStarted')->willReturn(true);
- $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
+ $session->expects($this->exactly(2))->method('getUsageIndex')->willReturn(0, 1);
$session->expects($this->exactly(1))->method('save');
$container = new Container();
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php
index 7e42653dffb69..fa95e67ed141b 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/TestSessionListenerTest.php
@@ -45,11 +45,21 @@ class TestSessionListenerTest extends TestCase
protected function setUp(): void
{
- $this->listener = $this->getMockForAbstractClass(AbstractTestSessionListener::class);
$this->session = $this->getSession();
- $this->listener->expects($this->any())
- ->method('getSession')
- ->willReturn($this->session);
+ $this->listener = new class($this->session) extends AbstractTestSessionListener {
+ private $session;
+
+ public function __construct($session)
+ {
+ parent::__construct();
+ $this->session = $session;
+ }
+
+ public function getSession(): ?SessionInterface
+ {
+ return $this->session;
+ }
+ };
}
public function testShouldSaveMainRequestSession()
diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php
new file mode 100644
index 0000000000000..080953fe02afd
--- /dev/null
+++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelForTestWithLoadClassCache.php
@@ -0,0 +1,19 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\Fixtures;
+
+class KernelForTestWithLoadClassCache extends KernelForTest
+{
+ public function doLoadClassCache(): void
+ {
+ }
+}
diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php
new file mode 100644
index 0000000000000..406f07a283fd3
--- /dev/null
+++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/MockableUploadFileWithClientSize.php
@@ -0,0 +1,22 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\Fixtures;
+
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+
+class MockableUploadFileWithClientSize extends UploadedFile
+{
+ public function getClientSize(): int
+ {
+ return 0;
+ }
+}
diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php
index 1d0eb90bf6fdb..8e083e14a2b1f 100644
--- a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php
@@ -43,14 +43,14 @@ public function testRenderWhenRendererDoesNotExist()
public function testRenderWithUnknownRenderer()
{
$this->expectException(\InvalidArgumentException::class);
- $handler = $this->getHandler($this->returnValue(new Response('foo')));
+ $handler = $this->getHandler(new Response('foo'));
$handler->render('/', 'bar');
}
public function testDeliverWithUnsuccessfulResponse()
{
- $handler = $this->getHandler($this->returnValue(new Response('foo', 404)));
+ $handler = $this->getHandler(new Response('foo', 404));
try {
$handler->render('/', 'foo');
$this->fail('->render() throws a \RuntimeException exception if response is not successful');
@@ -70,7 +70,7 @@ public function testRender()
{
$expectedRequest = Request::create('/');
$handler = $this->getHandler(
- $this->returnValue(new Response('foo')),
+ new Response('foo'),
[
'/',
$this->callback(function (Request $request) use ($expectedRequest) {
@@ -97,7 +97,7 @@ protected function getHandler($returnValue, $arguments = [])
$e = $renderer
->expects($this->any())
->method('render')
- ->will($returnValue)
+ ->willReturn($returnValue)
;
if ($arguments) {
diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
index 69bd7445acfd6..168957c1c089a 100644
--- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
@@ -33,14 +33,14 @@ class InlineFragmentRendererTest extends TestCase
{
public function testRender()
{
- $strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo'))));
+ $strategy = new InlineFragmentRenderer($this->getKernel(new Response('foo')));
$this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent());
}
public function testRenderWithControllerReference()
{
- $strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo'))));
+ $strategy = new InlineFragmentRenderer($this->getKernel(new Response('foo')));
$this->assertEquals('foo', $strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'))->getContent());
}
@@ -81,7 +81,7 @@ public function testRenderExceptionNoIgnoreErrors()
$dispatcher = $this->createMock(EventDispatcherInterface::class);
$dispatcher->expects($this->never())->method('dispatch');
- $strategy = new InlineFragmentRenderer($this->getKernel($this->throwException(new \RuntimeException('foo'))), $dispatcher);
+ $strategy = new InlineFragmentRenderer($this->getKernel(new \RuntimeException('foo')), $dispatcher);
$this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent());
}
@@ -89,7 +89,7 @@ public function testRenderExceptionNoIgnoreErrors()
public function testRenderExceptionIgnoreErrors()
{
$exception = new \RuntimeException('foo');
- $kernel = $this->getKernel($this->throwException($exception));
+ $kernel = $this->getKernel($exception);
$request = Request::create('/');
$expectedEvent = new ExceptionEvent($kernel, $request, $kernel::SUB_REQUEST, $exception);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -102,10 +102,17 @@ public function testRenderExceptionIgnoreErrors()
public function testRenderExceptionIgnoreErrorsWithAlt()
{
- $strategy = new InlineFragmentRenderer($this->getKernel($this->onConsecutiveCalls(
- $this->throwException(new \RuntimeException('foo')),
- $this->returnValue(new Response('bar'))
- )));
+ $strategy = new InlineFragmentRenderer($this->getKernel($this->returnCallback(function () {
+ static $firstCall = true;
+
+ if ($firstCall) {
+ $firstCall = false;
+
+ throw new \RuntimeException('foo');
+ }
+
+ return new Response('bar');
+ })));
$this->assertEquals('bar', $strategy->render('/', Request::create('/'), ['ignore_errors' => true, 'alt' => '/foo'])->getContent());
}
@@ -113,12 +120,17 @@ public function testRenderExceptionIgnoreErrorsWithAlt()
private function getKernel($returnValue)
{
$kernel = $this->createMock(HttpKernelInterface::class);
- $kernel
+ $mocker = $kernel
->expects($this->any())
->method('handle')
- ->will($returnValue)
;
+ if ($returnValue instanceof \Exception) {
+ $mocker->willThrowException($returnValue);
+ } else {
+ $mocker->willReturn(...(\is_array($returnValue) ? $returnValue : [$returnValue]));
+ }
+
return $kernel;
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php
index 937c23d869d8c..05c6325915668 100644
--- a/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php
@@ -75,7 +75,7 @@ public static function getGenerateFragmentUriDataWithNonScalar()
private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request, $absolute = false)
{
- $renderer = $this->getMockForAbstractClass(RoutableFragmentRenderer::class);
+ $renderer = $this->createStub(RoutableFragmentRenderer::class);
$r = new \ReflectionObject($renderer);
$m = $r->getMethod('generateFragmentUri');
$m->setAccessible(true);
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php
index e876f28189087..677d38be62896 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/EsiTest.php
@@ -245,7 +245,7 @@ protected function getCache($request, $response)
if (\is_array($response)) {
$cache->expects($this->any())
->method('handle')
- ->will($this->onConsecutiveCalls(...$response))
+ ->willReturn(...$response)
;
} else {
$cache->expects($this->any())
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php
index 97cc8fccd03d0..15e6ebcaee5c6 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/SsiTest.php
@@ -201,7 +201,7 @@ protected function getCache($request, $response)
if (\is_array($response)) {
$cache->expects($this->any())
->method('handle')
- ->will($this->onConsecutiveCalls(...$response))
+ ->willReturn(...$response)
;
} else {
$cache->expects($this->any())
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php
index 55963a16c391e..9092c3bf4663d 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelBrowserTest.php
@@ -18,6 +18,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpKernel\HttpKernelBrowser;
+use Symfony\Component\HttpKernel\Tests\Fixtures\MockableUploadFileWithClientSize;
use Symfony\Component\HttpKernel\Tests\Fixtures\TestClient;
/**
@@ -153,10 +154,9 @@ public function testUploadedFileWhenSizeExceedsUploadMaxFileSize()
$client = new HttpKernelBrowser($kernel);
$file = $this
- ->getMockBuilder(UploadedFile::class)
+ ->getMockBuilder(MockableUploadFileWithClientSize::class)
->setConstructorArgs([$source, 'original', 'mime/original', \UPLOAD_ERR_OK, true])
- ->onlyMethods(['getSize'])
- ->addMethods(['getClientSize'])
+ ->onlyMethods(['getSize', 'getClientSize'])
->getMock()
;
/* should be modified when the getClientSize will be removed */
diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php
index 74cd34cde3131..6701555633a88 100644
--- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php
@@ -30,6 +30,7 @@
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTest;
+use Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTestWithLoadClassCache;
use Symfony\Component\HttpKernel\Tests\Fixtures\KernelWithoutBundles;
use Symfony\Component\HttpKernel\Tests\Fixtures\ResettableService;
@@ -148,7 +149,7 @@ public function testBootSetsTheBootedFlagToTrue()
public function testClassCacheIsNotLoadedByDefault()
{
- $kernel = $this->getKernel(['initializeBundles'], [], false, ['doLoadClassCache']);
+ $kernel = $this->getKernel(['initializeBundles', 'doLoadClassCache'], [], false, KernelForTestWithLoadClassCache::class);
$kernel->expects($this->never())
->method('doLoadClassCache');
@@ -400,7 +401,7 @@ public function testLocateResourceOnDirectories()
$kernel
->expects($this->exactly(2))
->method('getBundle')
- ->willReturn($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, null, 'Bundle1Bundle'))
+ ->willReturn($this->getBundle(__DIR__.'/Fixtures/Bundle1Bundle', null, 'Bundle1Bundle'))
;
$this->assertEquals(
@@ -417,8 +418,8 @@ public function testInitializeBundleThrowsExceptionWhenRegisteringTwoBundlesWith
{
$this->expectException(\LogicException::class);
$this->expectExceptionMessage('Trying to register two bundles with the same name "DuplicateName"');
- $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', null, 'FooBundle', 'DuplicateName');
- $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', null, 'BarBundle', 'DuplicateName');
+ $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', 'FooBundle', 'DuplicateName');
+ $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', 'BarBundle', 'DuplicateName');
$kernel = $this->getKernel([], [$fooBundle, $barBundle]);
$kernel->boot();
@@ -628,11 +629,10 @@ public function getContainerClass(): string
/**
* Returns a mock for the BundleInterface.
*/
- protected function getBundle($dir = null, $parent = null, $className = null, $bundleName = null): BundleInterface
+ protected function getBundle($dir = null, $className = null, $bundleName = null): BundleInterface
{
$bundle = $this
->getMockBuilder(BundleInterface::class)
- ->onlyMethods(['getPath', 'getName'])
->disableOriginalConstructor()
;
@@ -640,7 +640,7 @@ protected function getBundle($dir = null, $parent = null, $className = null, $bu
$bundle->setMockClassName($className);
}
- $bundle = $bundle->getMockForAbstractClass();
+ $bundle = $bundle->getMock();
$bundle
->expects($this->any())
@@ -663,20 +663,16 @@ protected function getBundle($dir = null, $parent = null, $className = null, $bu
* @param array $methods Additional methods to mock (besides the abstract ones)
* @param array $bundles Bundles to register
*/
- protected function getKernel(array $methods = [], array $bundles = [], bool $debug = false, array $methodsToAdd = []): Kernel
+ protected function getKernel(array $methods = [], array $bundles = [], bool $debug = false, string $kernelClass = KernelForTest::class): Kernel
{
$methods[] = 'registerBundles';
$kernelMockBuilder = $this
- ->getMockBuilder(KernelForTest::class)
+ ->getMockBuilder($kernelClass)
->onlyMethods($methods)
->setConstructorArgs(['test', $debug])
;
- if (0 !== \count($methodsToAdd)) {
- $kernelMockBuilder->addMethods($methodsToAdd);
- }
-
$kernel = $kernelMockBuilder->getMock();
$kernel->expects($this->any())
->method('registerBundles')
diff --git a/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php b/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php
index 4801776cce146..8359918815daa 100644
--- a/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/UriSignerTest.php
@@ -43,14 +43,19 @@ public function testCheck()
public function testCheckWithDifferentArgSeparator()
{
- $this->iniSet('arg_separator.output', '&');
- $signer = new UriSigner('foobar');
-
- $this->assertSame(
- 'http://example.com/foo?_hash=rIOcC%2FF3DoEGo%2FvnESjSp7uU9zA9S%2F%2BOLhxgMexoPUM%3D&baz=bay&foo=bar',
- $signer->sign('http://example.com/foo?foo=bar&baz=bay')
- );
- $this->assertTrue($signer->check($signer->sign('http://example.com/foo?foo=bar&baz=bay')));
+ $initialSeparatorOutput = ini_set('arg_separator.output', '&');
+
+ try {
+ $signer = new UriSigner('foobar');
+
+ $this->assertSame(
+ 'http://example.com/foo?_hash=rIOcC%2FF3DoEGo%2FvnESjSp7uU9zA9S%2F%2BOLhxgMexoPUM%3D&baz=bay&foo=bar',
+ $signer->sign('http://example.com/foo?foo=bar&baz=bay')
+ );
+ $this->assertTrue($signer->check($signer->sign('http://example.com/foo?foo=bar&baz=bay')));
+ } finally {
+ ini_set('arg_separator.output', $initialSeparatorOutput);
+ }
}
public function testCheckWithRequest()
diff --git a/src/Symfony/Component/Inflector/.gitattributes b/src/Symfony/Component/Inflector/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Inflector/.gitattributes
+++ b/src/Symfony/Component/Inflector/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Inflector/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Inflector/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Inflector/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Inflector/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Inflector/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Inflector/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Intl/.gitattributes b/src/Symfony/Component/Intl/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Intl/.gitattributes
+++ b/src/Symfony/Component/Intl/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Intl/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Intl/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Intl/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Intl/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Intl/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Intl/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Ldap/.gitattributes b/src/Symfony/Component/Ldap/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Ldap/.gitattributes
+++ b/src/Symfony/Component/Ldap/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Ldap/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Ldap/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Ldap/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Ldap/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Ldap/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Ldap/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php b/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php
index cb57c1d6296ea..dc98896ab82e6 100644
--- a/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php
+++ b/src/Symfony/Component/Ldap/Adapter/ExtLdap/UpdateOperation.php
@@ -48,10 +48,15 @@ public function __construct(int $operationType, string $attribute, ?array $value
public function toArray(): array
{
- return [
+ $op = [
'attrib' => $this->attribute,
'modtype' => $this->operationType,
- 'values' => $this->values,
];
+
+ if (\LDAP_MODIFY_BATCH_REMOVE_ALL !== $this->operationType) {
+ $op['values'] = $this->values;
+ }
+
+ return $op;
}
}
diff --git a/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php b/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php
index f849b4bf25f23..21737afda3c2a 100644
--- a/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php
+++ b/src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php
@@ -266,6 +266,23 @@ public function testLdapAddAttributeValuesError()
$entryManager->addAttributeValues($entry, 'mail', $entry->getAttribute('mail'));
}
+ public function testLdapApplyOperationsRemoveAll()
+ {
+ $entryManager = $this->adapter->getEntryManager();
+
+ $result = $this->executeSearchQuery(1);
+ $entry = $result[0];
+
+ $entryManager->applyOperations($entry->getDn(), [new UpdateOperation(\LDAP_MODIFY_BATCH_REMOVE_ALL, 'mail', null)]);
+
+ $result = $this->executeSearchQuery(1);
+ $entry = $result[0];
+
+ $this->assertNull($entry->getAttribute('mail'));
+
+ $entryManager->addAttributeValues($entry, 'mail', ['fabpot@symfony.com', 'fabien@potencier.com']);
+ }
+
public function testLdapApplyOperationsRemoveAllWithArrayError()
{
$entryManager = $this->adapter->getEntryManager();
diff --git a/src/Symfony/Component/Lock/.gitattributes b/src/Symfony/Component/Lock/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Lock/.gitattributes
+++ b/src/Symfony/Component/Lock/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Lock/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Lock/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Lock/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Lock/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Lock/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Lock/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Lock/Tests/LockTest.php b/src/Symfony/Component/Lock/Tests/LockTest.php
index ee019a1d8db51..0b0349e81b5dd 100644
--- a/src/Symfony/Component/Lock/Tests/LockTest.php
+++ b/src/Symfony/Component/Lock/Tests/LockTest.php
@@ -39,7 +39,7 @@ public function testAcquireNoBlocking()
->method('save');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquire(false));
}
@@ -55,7 +55,7 @@ public function testAcquireNoBlockingWithPersistingStoreInterface()
->method('save');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquire(false));
}
@@ -71,7 +71,7 @@ public function testAcquireBlockingWithPersistingStoreInterface()
->method('save');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquire(true));
}
@@ -93,7 +93,7 @@ public function testAcquireBlockingRetryWithPersistingStoreInterface()
});
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquire(true));
}
@@ -110,7 +110,7 @@ public function testAcquireReturnsFalse()
->willThrowException(new LockConflictedException());
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertFalse($lock->acquire(false));
}
@@ -127,7 +127,7 @@ public function testAcquireReturnsFalseStoreInterface()
->willThrowException(new LockConflictedException());
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertFalse($lock->acquire(false));
}
@@ -146,7 +146,7 @@ public function testAcquireBlockingWithBlockingStoreInterface()
->method('waitAndSave');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquire(true));
}
@@ -166,7 +166,7 @@ public function testAcquireSetsTtl()
->with($key, 10);
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$lock->acquire();
}
@@ -183,7 +183,7 @@ public function testRefresh()
->with($key, 10);
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$lock->refresh();
}
@@ -200,7 +200,7 @@ public function testRefreshCustom()
->with($key, 20);
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$lock->refresh(20);
}
@@ -214,7 +214,7 @@ public function testIsAquired()
$store
->method('exists')
->with($key)
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->isAcquired());
}
@@ -267,8 +267,8 @@ public function testReleaseOnDestruction()
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false)
- ;
+ ->willReturn(true, false);
+
$store
->expects($this->once())
->method('delete')
@@ -286,8 +286,8 @@ public function testNoAutoReleaseWhenNotConfigured()
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false)
- ;
+ ->willReturn(true, false);
+
$store
->expects($this->never())
->method('delete')
@@ -313,7 +313,8 @@ public function testReleaseThrowsExceptionWhenDeletionFail()
$store
->expects($this->never())
->method('exists')
- ->with($key);
+ ->with($key)
+ ->willReturn(true);
$lock->release();
}
@@ -426,7 +427,7 @@ public function testAcquireReadNoBlockingWithSharedLockStoreInterface()
->method('saveRead');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquireRead(false));
}
@@ -534,7 +535,7 @@ public function testAcquireReadBlockingWithBlockingSharedLockStoreInterface()
->method('waitAndSaveRead');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquireRead(true));
}
@@ -556,7 +557,7 @@ public function testAcquireReadBlockingWithSharedLockStoreInterface()
});
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquireRead(true));
}
@@ -572,7 +573,7 @@ public function testAcquireReadBlockingWithBlockingLockStoreInterface()
->method('waitAndSave');
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquireRead(true));
}
@@ -594,7 +595,7 @@ public function testAcquireReadBlockingWithPersistingStoreInterface()
});
$store
->method('exists')
- ->willReturnOnConsecutiveCalls(true, false);
+ ->willReturn(true, false);
$this->assertTrue($lock->acquireRead(true));
}
diff --git a/src/Symfony/Component/Lock/composer.json b/src/Symfony/Component/Lock/composer.json
index b7e2d0c0d87ea..f2558dbb7459a 100644
--- a/src/Symfony/Component/Lock/composer.json
+++ b/src/Symfony/Component/Lock/composer.json
@@ -23,7 +23,7 @@
},
"require-dev": {
"doctrine/dbal": "^2.13|^3|^4",
- "predis/predis": "~1.0"
+ "predis/predis": "^1.0|^2.0"
},
"conflict": {
"doctrine/dbal": "<2.13"
diff --git a/src/Symfony/Component/Mailer/.gitattributes b/src/Symfony/Component/Mailer/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/.gitattributes
+++ b/src/Symfony/Component/Mailer/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Amazon/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Amazon/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Amazon/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Google/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Google/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Google/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Google/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Google/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Google/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Google/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Google/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Google/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Google/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Mailchimp/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Mailchimp/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Mailgun/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Mailgun/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailgun/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Mailjet/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Mailjet/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Mailjet/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.gitattributes b/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/OhMySmtp/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Postmark/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Postmark/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Postmark/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Postmark/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Postmark/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Postmark/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Postmark/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Sendgrid/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.gitattributes b/src/Symfony/Component/Mailer/Bridge/Sendinblue/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.gitattributes
+++ b/src/Symfony/Component/Mailer/Bridge/Sendinblue/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mailer/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php
index 99be0e01e6e87..21a5b72238927 100644
--- a/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php
+++ b/src/Symfony/Component/Mailer/Tests/Transport/FailoverTransportTest.php
@@ -85,16 +85,30 @@ public function testSendOneDead()
public function testSendOneDeadAndRecoveryWithinRetryPeriod()
{
$t1 = $this->createMock(TransportInterface::class);
- $t1->method('send')->willReturnOnConsecutiveCalls($this->throwException(new TransportException()));
+
+ $t1Matcher = $this->any();
+ $t1->expects($t1Matcher)
+ ->method('send')
+ ->willReturnCallback(function () use ($t1Matcher) {
+ if (1 === $t1Matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
+
$t2 = $this->createMock(TransportInterface::class);
- $t2->expects($this->exactly(4))
+ $t2Matcher = $this->exactly(4);
+ $t2->expects($t2Matcher)
->method('send')
- ->willReturnOnConsecutiveCalls(
- null,
- null,
- null,
- $this->throwException(new TransportException())
- );
+ ->willReturnCallback(function () use ($t2Matcher) {
+ if (4 === $t2Matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
+
$t = new FailoverTransport([$t1, $t2], 6);
$t->send(new RawMessage('')); // t1>fail - t2>sent
$this->assertTransports($t, 0, [$t1]);
@@ -115,16 +129,19 @@ public function testSendOneDeadAndRecoveryWithinRetryPeriod()
public function testSendAllDeadWithinRetryPeriod()
{
$t1 = $this->createMock(TransportInterface::class);
- $t1->method('send')->will($this->throwException(new TransportException()));
+ $t1->method('send')->willThrowException(new TransportException());
$t1->expects($this->once())->method('send');
$t2 = $this->createMock(TransportInterface::class);
- $t2->expects($this->exactly(3))
+ $matcher = $this->exactly(3);
+ $t2->expects($matcher)
->method('send')
- ->willReturnOnConsecutiveCalls(
- null,
- null,
- $this->throwException(new TransportException())
- );
+ ->willReturnCallback(function () use ($matcher) {
+ if (3 === $matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
$t = new FailoverTransport([$t1, $t2], 40);
$t->send(new RawMessage(''));
sleep(4);
@@ -137,15 +154,27 @@ public function testSendAllDeadWithinRetryPeriod()
public function testSendOneDeadButRecover()
{
+ $t1Matcher = $this->any();
$t1 = $this->createMock(TransportInterface::class);
- $t1->method('send')->willReturnOnConsecutiveCalls($this->throwException(new TransportException()));
+ $t1->expects($t1Matcher)->method('send')->willReturnCallback(function () use ($t1Matcher) {
+ if (1 === $t1Matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
+
$t2 = $this->createMock(TransportInterface::class);
- $t2->expects($this->exactly(3))
- ->method('send')->willReturnOnConsecutiveCalls(
- null,
- null,
- $this->throwException(new TransportException())
- );
+ $matcher = $this->exactly(3);
+ $t2->expects($matcher)
+ ->method('send')
+ ->willReturnCallback(function () use ($matcher) {
+ if (3 === $matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
$t = new FailoverTransport([$t1, $t2], 1);
$t->send(new RawMessage(''));
sleep(1);
diff --git a/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php b/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php
index 920b980e0f714..1ce987202d3d6 100755
--- a/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php
+++ b/src/Symfony/Component/Mailer/Tests/Transport/Fixtures/fake-failing-sendmail.php
@@ -1,4 +1,8 @@
#!/usr/bin/env php
createMock(TransportInterface::class);
$t1->expects($this->exactly(3))->method('send');
+
+ $matcher = $this->exactly(2);
$t2 = $this->createMock(TransportInterface::class);
- $t2->expects($this->exactly(2))
+ $t2->expects($matcher)
->method('send')
- ->willReturnOnConsecutiveCalls($this->throwException(new TransportException()));
+ ->willReturnCallback(function () use ($matcher) {
+ if (1 === $matcher->getInvocationCount()) {
+ throw new TransportException();
+ }
+
+ return null;
+ });
$t = new RoundRobinTransport([$t1, $t2], 3);
$p = new \ReflectionProperty($t, 'cursor');
$p->setAccessible(true);
diff --git a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php
index e452934cd0983..660d29c37c0f0 100644
--- a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php
+++ b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php
@@ -13,15 +13,21 @@
use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\DelayedEnvelope;
+use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mailer\Exception\TransportException;
+use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Mailer\Transport\SendmailTransport;
+use Symfony\Component\Mailer\Transport\Smtp\Stream\ProcessStream;
+use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
+use Symfony\Component\Mime\RawMessage;
class SendmailTransportTest extends TestCase
{
private const FAKE_SENDMAIL = __DIR__.'/Fixtures/fake-sendmail.php -t';
private const FAKE_FAILING_SENDMAIL = __DIR__.'/Fixtures/fake-failing-sendmail.php -t';
+ private const FAKE_INTERACTIVE_SENDMAIL = __DIR__.'/Fixtures/fake-failing-sendmail.php -bs';
/**
* @var string
@@ -49,9 +55,7 @@ public function testToString()
public function testToIsUsedWhenRecipientsAreNotSet()
{
- if ('\\' === \DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support shebangs nor non-blocking standard streams');
- }
+ $this->skipOnWindows();
$mail = new Email();
$mail
@@ -71,20 +75,9 @@ public function testToIsUsedWhenRecipientsAreNotSet()
public function testRecipientsAreUsedWhenSet()
{
- if ('\\' === \DIRECTORY_SEPARATOR) {
- $this->markTestSkipped('Windows does not support shebangs nor non-blocking standard streams');
- }
+ $this->skipOnWindows();
- $mail = new Email();
- $mail
- ->from('from@mail.com')
- ->to('to@mail.com')
- ->subject('Subject')
- ->text('Some text')
- ;
-
- $envelope = new DelayedEnvelope($mail);
- $envelope->setRecipients([new Address('recipient@mail.com')]);
+ [$mail, $envelope] = $this->defaultMailAndEnvelope();
$sendmailTransport = new SendmailTransport(self::FAKE_SENDMAIL);
$sendmailTransport->send($mail, $envelope);
@@ -93,11 +86,90 @@ public function testRecipientsAreUsedWhenSet()
}
public function testThrowsTransportExceptionOnFailure()
+ {
+ $this->skipOnWindows();
+
+ [$mail, $envelope] = $this->defaultMailAndEnvelope();
+
+ $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL);
+ $this->expectException(TransportException::class);
+ $this->expectExceptionMessage('Process failed with exit code 42: Sending failed');
+ $sendmailTransport->send($mail, $envelope);
+
+ $streamProperty = new \ReflectionProperty(SendmailTransport::class, 'stream');
+ $streamProperty->setAccessible(true);
+ $stream = $streamProperty->getValue($sendmailTransport);
+ $this->assertNull($stream->stream);
+ }
+
+ public function testStreamIsClearedOnFailure()
+ {
+ $this->skipOnWindows();
+
+ [$mail, $envelope] = $this->defaultMailAndEnvelope();
+
+ $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL);
+ try {
+ $sendmailTransport->send($mail, $envelope);
+ } catch (TransportException $e) {
+ }
+
+ $streamProperty = new \ReflectionProperty(SendmailTransport::class, 'stream');
+ $streamProperty->setAccessible(true);
+ $stream = $streamProperty->getValue($sendmailTransport);
+ $innerStreamProperty = new \ReflectionProperty(ProcessStream::class, 'stream');
+ $innerStreamProperty->setAccessible(true);
+ $this->assertNull($innerStreamProperty->getValue($stream));
+ }
+
+ public function testDoesNotThrowWhenInteractive()
+ {
+ $this->skipOnWindows();
+
+ [$mail, $envelope] = $this->defaultMailAndEnvelope();
+
+ $sendmailTransport = new SendmailTransport(self::FAKE_INTERACTIVE_SENDMAIL);
+ $transportProperty = new \ReflectionProperty(SendmailTransport::class, 'transport');
+ $transportProperty->setAccessible(true);
+
+ // Replace the transport with an anonymous consumer that trigger the stream methods
+ $transportProperty->setValue($sendmailTransport, new class($transportProperty->getValue($sendmailTransport)->getStream()) implements TransportInterface {
+ private $stream;
+
+ public function __construct(ProcessStream $stream)
+ {
+ $this->stream = $stream;
+ }
+
+ public function send(RawMessage $message, ?Envelope $envelope = null): ?SentMessage
+ {
+ $this->stream->initialize();
+ $this->stream->write('SMTP');
+ $this->stream->terminate();
+
+ return new SentMessage($message, $envelope);
+ }
+
+ public function __toString(): string
+ {
+ return 'Interactive mode test';
+ }
+ });
+
+ $sendmailTransport->send($mail, $envelope);
+
+ $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-failing-sendmail.php -bs');
+ }
+
+ private function skipOnWindows()
{
if ('\\' === \DIRECTORY_SEPARATOR) {
$this->markTestSkipped('Windows does not support shebangs nor non-blocking standard streams');
}
+ }
+ private function defaultMailAndEnvelope(): array
+ {
$mail = new Email();
$mail
->from('from@mail.com')
@@ -109,9 +181,6 @@ public function testThrowsTransportExceptionOnFailure()
$envelope = new DelayedEnvelope($mail);
$envelope->setRecipients([new Address('recipient@mail.com')]);
- $sendmailTransport = new SendmailTransport(self::FAKE_FAILING_SENDMAIL);
- $this->expectException(TransportException::class);
- $this->expectExceptionMessage('Process failed with exit code 42: Sending failed');
- $sendmailTransport->send($mail, $envelope);
+ return [$mail, $envelope];
}
}
diff --git a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php
index c54b050b92963..7d435dcaed5fb 100644
--- a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php
+++ b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/SmtpTransportTest.php
@@ -158,7 +158,7 @@ public function testAssertResponseCodeWithNotValidCode()
private function invokeAssertResponseCode(string $response, array $codes): void
{
- $transport = new SmtpTransport($this->getMockForAbstractClass(AbstractStream::class));
+ $transport = new SmtpTransport($this->createStub(AbstractStream::class));
$m = new \ReflectionMethod($transport, 'assertResponseCode');
$m->setAccessible(true);
$m->invoke($transport, $response, $codes);
diff --git a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php
index 22aea4e915d1f..712016b5fed2b 100644
--- a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php
+++ b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php
@@ -64,6 +64,7 @@ public function __construct(?string $command = null, ?EventDispatcherInterface $
$this->stream = new ProcessStream();
if (str_contains($this->command, ' -bs')) {
$this->stream->setCommand($this->command);
+ $this->stream->setInteractive(true);
$this->transport = new SmtpTransport($this->stream, $dispatcher, $logger);
}
}
diff --git a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php
index 808d9eb53fa68..d717055b64b1b 100644
--- a/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php
+++ b/src/Symfony/Component/Mailer/Transport/Smtp/Stream/ProcessStream.php
@@ -25,11 +25,18 @@ final class ProcessStream extends AbstractStream
{
private $command;
+ private $interactive = false;
+
public function setCommand(string $command)
{
$this->command = $command;
}
+ public function setInteractive(bool $interactive)
+ {
+ $this->interactive = $interactive;
+ }
+
public function initialize(): void
{
$descriptorSpec = [
@@ -57,11 +64,15 @@ public function terminate(): void
$err = stream_get_contents($this->err);
fclose($this->err);
if (0 !== $exitCode = proc_close($this->stream)) {
- throw new TransportException('Process failed with exit code '.$exitCode.': '.$out.$err);
+ $errorMessage = 'Process failed with exit code '.$exitCode.': '.$out.$err;
}
}
parent::terminate();
+
+ if (!$this->interactive && isset($errorMessage)) {
+ throw new TransportException($errorMessage);
+ }
}
protected function getReadConnectionDescription(): string
diff --git a/src/Symfony/Component/Messenger/.gitattributes b/src/Symfony/Component/Messenger/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/.gitattributes
+++ b/src/Symfony/Component/Messenger/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.gitattributes b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.gitattributes
+++ b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php
index a3269841e4dda..80840c859cb05 100644
--- a/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsSenderTest.php
@@ -31,7 +31,7 @@ public function testSend()
$connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers']);
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new AmazonSqsSender($connection, $serializer);
$sender->send($envelope);
@@ -49,7 +49,7 @@ public function testSendWithAmazonSqsFifoStamp()
->with($encoded['body'], $encoded['headers'], 0, $stamp->getMessageGroupId(), $stamp->getMessageDeduplicationId());
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new AmazonSqsSender($connection, $serializer);
$sender->send($envelope);
@@ -67,7 +67,7 @@ public function testSendWithAmazonSqsXrayTraceHeaderStamp()
->with($encoded['body'], $encoded['headers'], 0, null, null, $stamp->getTraceId());
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new AmazonSqsSender($connection, $serializer);
$sender->send($envelope);
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/.gitattributes b/src/Symfony/Component/Messenger/Bridge/Amqp/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/.gitattributes
+++ b/src/Symfony/Component/Messenger/Bridge/Amqp/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/Bridge/Amqp/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/Bridge/Amqp/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php
index 9949a0d59413f..b1dda969fb49b 100644
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpSenderTest.php
@@ -31,7 +31,7 @@ public function testItSendsTheEncodedMessage()
$encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class]];
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$connection = $this->createMock(Connection::class);
$connection->expects($this->once())->method('publish')->with($encoded['body'], $encoded['headers']);
@@ -61,7 +61,7 @@ public function testItSendsTheEncodedMessageWithoutHeaders()
$encoded = ['body' => '...'];
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$connection = $this->createMock(Connection::class);
$connection->expects($this->once())->method('publish')->with($encoded['body'], []);
@@ -76,7 +76,7 @@ public function testContentTypeHeaderIsMovedToAttribute()
$encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class, 'Content-Type' => 'application/json']];
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$connection = $this->createMock(Connection::class);
unset($encoded['headers']['Content-Type']);
@@ -93,7 +93,7 @@ public function testContentTypeHeaderDoesNotOverwriteAttribute()
$encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class, 'Content-Type' => 'application/json']];
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$connection = $this->createMock(Connection::class);
unset($encoded['headers']['Content-Type']);
@@ -110,7 +110,7 @@ public function testItThrowsATransportExceptionIfItCannotSendTheMessage()
$encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class]];
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$connection = $this->createMock(Connection::class);
$connection->method('publish')->with($encoded['body'], $encoded['headers'])->willThrowException(new \AMQPException());
diff --git a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php
index 32abfd58438be..9de6fa8ca0919 100644
--- a/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/ConnectionTest.php
@@ -306,7 +306,10 @@ public function testItSetupsTheConnection()
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
$factory->method('createExchange')->willReturn($amqpExchange);
- $factory->method('createQueue')->will($this->onConsecutiveCalls($amqpQueue0, $amqpQueue1));
+
+ $factory
+ ->method('createQueue')
+ ->willReturn($amqpQueue0, $amqpQueue1);
$amqpExchange->expects($this->once())->method('declareExchange');
$amqpExchange->expects($this->once())->method('publish')->with('body', 'routing_key', \AMQP_NOPARAM, ['headers' => [], 'delivery_mode' => 2, 'timestamp' => time()]);
@@ -358,7 +361,9 @@ public function testItSetupsTheTTLConnection()
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
$factory->method('createExchange')->willReturn($amqpExchange);
- $factory->method('createQueue')->will($this->onConsecutiveCalls($amqpQueue0, $amqpQueue1));
+ $factory
+ ->method('createQueue')
+ ->willReturn($amqpQueue0, $amqpQueue1);
$amqpExchange->expects($this->once())->method('declareExchange');
$amqpExchange->expects($this->once())->method('publish')->with('body', 'routing_key', \AMQP_NOPARAM, ['headers' => [], 'delivery_mode' => 2, 'timestamp' => time()]);
@@ -495,14 +500,15 @@ public function testAutoSetupWithDelayDeclaresExchangeQueuesAndDelay()
$factory = $this->createMock(AmqpFactory::class);
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
- $factory->method('createQueue')->will($this->onConsecutiveCalls(
- $amqpQueue = $this->createMock(\AMQPQueue::class),
- $delayQueue = $this->createMock(\AMQPQueue::class)
- ));
- $factory->method('createExchange')->will($this->onConsecutiveCalls(
- $amqpExchange = $this->createMock(\AMQPExchange::class),
- $delayExchange = $this->createMock(\AMQPExchange::class)
- ));
+
+ $amqpQueue = $this->createMock(\AMQPQueue::class);
+ $factory
+ ->method('createQueue')
+ ->willReturn($amqpQueue, $this->createMock(\AMQPQueue::class));
+
+ $amqpExchange = $this->createMock(\AMQPExchange::class);
+ $delayExchange = $this->createMock(\AMQPExchange::class);
+ $factory->method('createExchange')->willReturn($amqpExchange, $delayExchange);
$amqpExchange->expects($this->once())->method('setName')->with(self::DEFAULT_EXCHANGE_NAME);
$amqpExchange->expects($this->once())->method('declareExchange');
@@ -553,14 +559,12 @@ public function testItDelaysTheMessageWithADifferentRoutingKeyAndTTLs()
$factory = $this->createMock(AmqpFactory::class);
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
- $factory->method('createQueue')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPQueue::class),
- $delayQueue = $this->createMock(\AMQPQueue::class)
- ));
- $factory->method('createExchange')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPExchange::class),
- $delayExchange = $this->createMock(\AMQPExchange::class)
- ));
+
+ $delayQueue = $this->createMock(\AMQPQueue::class);
+ $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue);
+
+ $delayExchange = $this->createMock(\AMQPExchange::class);
+ $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange);
$connectionOptions = [
'retry' => [
@@ -693,14 +697,12 @@ public function testItDelaysTheMessageWithTheInitialSuppliedRoutingKeyAsArgument
$factory = $this->createMock(AmqpFactory::class);
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
- $factory->method('createQueue')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPQueue::class),
- $delayQueue = $this->createMock(\AMQPQueue::class)
- ));
- $factory->method('createExchange')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPExchange::class),
- $delayExchange = $this->createMock(\AMQPExchange::class)
- ));
+
+ $delayQueue = $this->createMock(\AMQPQueue::class);
+ $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue);
+
+ $delayExchange = $this->createMock(\AMQPExchange::class);
+ $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange);
$connectionOptions = [
'retry' => [
@@ -819,14 +821,10 @@ private function createDelayOrRetryConnection(\AMQPExchange $delayExchange, stri
$factory = $this->createMock(AmqpFactory::class);
$factory->method('createConnection')->willReturn($amqpConnection);
$factory->method('createChannel')->willReturn($amqpChannel);
- $factory->method('createQueue')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPQueue::class),
- $delayQueue = $this->createMock(\AMQPQueue::class)
- ));
- $factory->method('createExchange')->will($this->onConsecutiveCalls(
- $this->createMock(\AMQPExchange::class),
- $delayExchange
- ));
+
+ $delayQueue = $this->createMock(\AMQPQueue::class);
+ $factory->method('createQueue')->willReturn($this->createMock(\AMQPQueue::class), $delayQueue);
+ $factory->method('createExchange')->willReturn($this->createMock(\AMQPExchange::class), $delayExchange);
$delayQueue->expects($this->once())->method('setName')->with($delayQueueName);
$delayQueue->expects($this->once())->method('setArguments')->with([
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.gitattributes b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.gitattributes
+++ b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php
index cfc5b8fdba84f..89ac3449f3a4b 100644
--- a/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdSenderTest.php
@@ -30,7 +30,7 @@ public function testSend()
$connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 0);
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new BeanstalkdSender($connection, $serializer);
$sender->send($envelope);
@@ -45,7 +45,7 @@ public function testSendWithDelay()
$connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 500);
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new BeanstalkdSender($connection, $serializer);
$sender->send($envelope);
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/.gitattributes b/src/Symfony/Component/Messenger/Bridge/Doctrine/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/.gitattributes
+++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php
index 8505e3dee0481..1f769533e7165 100644
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineSenderTest.php
@@ -31,7 +31,7 @@ public function testSend()
$connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'])->willReturn('15');
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new DoctrineSender($connection, $serializer);
$actualEnvelope = $sender->send($envelope);
@@ -51,7 +51,7 @@ public function testSendWithDelay()
$connection->expects($this->once())->method('send')->with($encoded['body'], $encoded['headers'], 500);
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new DoctrineSender($connection, $serializer);
$sender->send($envelope);
diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php
index 100058d240fcd..6980a2e6b03fb 100644
--- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php
+++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php
@@ -21,6 +21,7 @@
use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Result;
+use Doctrine\DBAL\Schema\AbstractAsset;
use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\Comparator;
use Doctrine\DBAL\Schema\Schema;
@@ -289,7 +290,17 @@ public function setup(): void
{
$configuration = $this->driverConnection->getConfiguration();
$assetFilter = $configuration->getSchemaAssetsFilter();
- $configuration->setSchemaAssetsFilter(function (string $tableName) { return $tableName === $this->configuration['table_name']; });
+ $configuration->setSchemaAssetsFilter(function ($tableName) {
+ if ($tableName instanceof AbstractAsset) {
+ $tableName = $tableName->getName();
+ }
+
+ if (!\is_string($tableName)) {
+ throw new \TypeError(sprintf('The table name must be an instance of "%s" or a string ("%s" given).', AbstractAsset::class, get_debug_type($tableName)));
+ }
+
+ return $tableName === $this->configuration['table_name'];
+ });
$this->updateSchema();
$configuration->setSchemaAssetsFilter($assetFilter);
$this->autoSetup = false;
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/.gitattributes b/src/Symfony/Component/Messenger/Bridge/Redis/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Messenger/Bridge/Redis/.gitattributes
+++ b/src/Symfony/Component/Messenger/Bridge/Redis/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Messenger/Bridge/Redis/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Redis/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Messenger/Bridge/Redis/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Messenger/Bridge/Redis/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php
index 2e5c7bf0b043e..b1bff95fe4b67 100644
--- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php
@@ -408,7 +408,7 @@ public function testLastErrorGetsCleared()
$redis->expects($this->once())->method('xadd')->willReturn('0');
$redis->expects($this->once())->method('xack')->willReturn(0);
- $redis->method('getLastError')->willReturnOnConsecutiveCalls('xadd error', 'xack error');
+ $redis->method('getLastError')->willReturn('xadd error', 'xack error');
$redis->expects($this->exactly(2))->method('clearLastError');
$connection = Connection::fromDsn('redis://localhost/messenger-clearlasterror', ['auto_setup' => false, 'delete_after_ack' => true], $redis);
diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php
index 3a4d817acc140..925a7292a7e3a 100644
--- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php
+++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisSenderTest.php
@@ -29,7 +29,7 @@ public function testSend()
$connection->expects($this->once())->method('add')->with($encoded['body'], $encoded['headers']);
$serializer = $this->createMock(SerializerInterface::class);
- $serializer->method('encode')->with($envelope)->willReturnOnConsecutiveCalls($encoded);
+ $serializer->method('encode')->with($envelope)->willReturn($encoded);
$sender = new RedisSender($connection, $serializer);
$sender->send($envelope);
diff --git a/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php b/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php
index e0a57563915a4..0d1f1111b0b90 100644
--- a/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Command/SetupTransportsCommandTest.php
@@ -30,10 +30,10 @@ public function testReceiverNames()
// get method must be call twice and will return consecutively a setup-able transport and a non setup-able transport
$serviceLocator->expects($this->exactly(2))
->method('get')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
$this->createMock(SetupableTransportInterface::class),
$this->createMock(TransportInterface::class)
- ));
+ );
$serviceLocator
->method('has')
->willReturn(true);
@@ -53,12 +53,10 @@ public function testReceiverNameArgument()
/** @var MockObject&ServiceLocator $serviceLocator */
$serviceLocator = $this->createMock(ServiceLocator::class);
// get method must be call twice and will return consecutively a setup-able transport and a non setup-able transport
- $serviceLocator->expects($this->exactly(1))
+ $serviceLocator->expects($this->once())
->method('get')
- ->will($this->onConsecutiveCalls(
- $this->createMock(SetupableTransportInterface::class)
- ));
- $serviceLocator->expects($this->exactly(1))
+ ->willReturn($this->createMock(SetupableTransportInterface::class));
+ $serviceLocator->expects($this->once())
->method('has')
->willReturn(true);
diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php
index b0cc4c4f2ed87..cd65ab046f0c6 100644
--- a/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Middleware/DispatchAfterCurrentBusMiddlewareTest.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Messenger\Tests\Middleware;
+use PHPUnit\Framework\AssertionFailedError;
use PHPUnit\Framework\Constraint\Callback;
use PHPUnit\Framework\MockObject\Stub\ReturnCallback;
use PHPUnit\Framework\TestCase;
@@ -67,12 +68,7 @@ public function testEventsInNewTransactionAreHandledAfterMainMessage()
->with($this->callback(function (Envelope $envelope) use (&$series) {
return $envelope->getMessage() === array_shift($series);
}))
- ->willReturnOnConsecutiveCalls(
- $this->willHandleMessage(),
- $this->willHandleMessage(),
- $this->willHandleMessage(),
- $this->willHandleMessage()
- );
+ ->will($this->willHandleMessage());
$messageBus->dispatch($message);
}
@@ -110,16 +106,19 @@ public function testThrowingEventsHandlingWontStopExecution()
$secondEvent,
];
- $handlingMiddleware->expects($this->exactly(3))
+ $matcher = $this->exactly(3);
+ $handlingMiddleware->expects($matcher)
->method('handle')
->with($this->callback(function (Envelope $envelope) use (&$series) {
return $envelope->getMessage() === array_shift($series);
}))
- ->willReturnOnConsecutiveCalls(
- $this->willHandleMessage(),
- $this->throwException(new \RuntimeException('Some exception while handling first event')),
- $this->willHandleMessage()
- );
+ ->willReturnCallback(function ($envelope, StackInterface $stack) use ($matcher) {
+ if (2 === $matcher->getInvocationCount()) {
+ throw new \RuntimeException('Some exception while handling first event');
+ }
+
+ return $stack->next()->handle($envelope, $stack);
+ });
$this->expectException(DelayedMessageHandlingException::class);
$this->expectExceptionMessage('RuntimeException: Some exception while handling first event');
@@ -176,34 +175,39 @@ public function testLongChainWithExceptions()
// Note: $eventL3a should not be handled.
];
- $handlingMiddleware->expects($this->exactly(7))
+ $matcher = $this->exactly(7);
+ $handlingMiddleware->expects($matcher)
->method('handle')
->with($this->callback(function (Envelope $envelope) use (&$series) {
return $envelope->getMessage() === array_shift($series);
}))
- ->willReturnOnConsecutiveCalls(
- $this->willHandleMessage(),
- $this->willHandleMessage(),
- $this->returnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL2a, $eventL2b) {
- $envelope1 = new Envelope($eventL2a, [new DispatchAfterCurrentBusStamp()]);
- $eventBus->dispatch($envelope1);
- $eventBus->dispatch(new Envelope($eventL2b, [new DispatchAfterCurrentBusStamp()]));
-
- return $stack->next()->handle($envelope, $stack);
- }),
- $this->willHandleMessage(),
- $this->returnCallback(function () use ($eventBus, $eventL3a) {
- $eventBus->dispatch(new Envelope($eventL3a, [new DispatchAfterCurrentBusStamp()]));
-
- throw new \RuntimeException('Some exception while handling Event level 2a');
- }),
- $this->returnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL3b) {
- $eventBus->dispatch(new Envelope($eventL3b, [new DispatchAfterCurrentBusStamp()]));
-
- return $stack->next()->handle($envelope, $stack);
- }),
- $this->willHandleMessage()
- );
+ ->willReturnCallback(function ($envelope, StackInterface $stack) use ($eventBus, $eventL2a, $eventL2b, $eventL3a, $eventL3b, $matcher) {
+ switch ($matcher->getInvocationCount()) {
+ case 1:
+ case 2:
+ case 4:
+ case 7:
+ return $stack->next()->handle($envelope, $stack);
+
+ case 3:
+ $envelope1 = new Envelope($eventL2a, [new DispatchAfterCurrentBusStamp()]);
+ $eventBus->dispatch($envelope1);
+ $eventBus->dispatch(new Envelope($eventL2b, [new DispatchAfterCurrentBusStamp()]));
+
+ return $stack->next()->handle($envelope, $stack);
+
+ case 5:
+ $eventBus->dispatch(new Envelope($eventL3a, [new DispatchAfterCurrentBusStamp()]));
+
+ throw new \RuntimeException('Some exception while handling Event level 2a');
+ case 6:
+ $eventBus->dispatch(new Envelope($eventL3b, [new DispatchAfterCurrentBusStamp()]));
+
+ return $stack->next()->handle($envelope, $stack);
+ }
+
+ throw new AssertionFailedError('Unexpected call to handle');
+ });
$this->expectException(DelayedMessageHandlingException::class);
$this->expectExceptionMessage('RuntimeException: Some exception while handling Event level 2a');
diff --git a/src/Symfony/Component/Mime/.gitattributes b/src/Symfony/Component/Mime/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Mime/.gitattributes
+++ b/src/Symfony/Component/Mime/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Mime/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Mime/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Mime/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Mime/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Mime/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Mime/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Mime/Message.php b/src/Symfony/Component/Mime/Message.php
index 639b26b521b73..df7ed1b7944c2 100644
--- a/src/Symfony/Component/Mime/Message.php
+++ b/src/Symfony/Component/Mime/Message.php
@@ -124,11 +124,18 @@ public function toIterable(): iterable
public function ensureValidity()
{
- if (!$this->headers->has('To') && !$this->headers->has('Cc') && !$this->headers->has('Bcc')) {
+ $to = (null !== $header = $this->headers->get('To')) ? $header->getBody() : null;
+ $cc = (null !== $header = $this->headers->get('Cc')) ? $header->getBody() : null;
+ $bcc = (null !== $header = $this->headers->get('Bcc')) ? $header->getBody() : null;
+
+ if (!$to && !$cc && !$bcc) {
throw new LogicException('An email must have a "To", "Cc", or "Bcc" header.');
}
- if (!$this->headers->has('From') && !$this->headers->has('Sender')) {
+ $from = (null !== $header = $this->headers->get('From')) ? $header->getBody() : null;
+ $sender = (null !== $header = $this->headers->get('Sender')) ? $header->getBody() : null;
+
+ if (!$from && !$sender) {
throw new LogicException('An email must have a "From" or a "Sender" header.');
}
diff --git a/src/Symfony/Component/Mime/Tests/MessageTest.php b/src/Symfony/Component/Mime/Tests/MessageTest.php
index 308eb8f7179db..6d981e7eb1f6d 100644
--- a/src/Symfony/Component/Mime/Tests/MessageTest.php
+++ b/src/Symfony/Component/Mime/Tests/MessageTest.php
@@ -276,4 +276,71 @@ public function testSymfonySerialize()
$serialized = $serializer->serialize($e, 'json');
$this->assertSame($expectedJson, json_encode(json_decode($serialized), \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES));
}
+
+ /**
+ * @dataProvider ensureValidityProvider
+ */
+ public function testEnsureValidity(array $headers, ?string $exceptionClass, ?string $exceptionMessage)
+ {
+ if ($exceptionClass) {
+ $this->expectException($exceptionClass);
+ $this->expectExceptionMessage($exceptionMessage);
+ } else {
+ $this->expectNotToPerformAssertions();
+ }
+
+ $m = new Message();
+ foreach ($headers as $headerName => $headerValue) {
+ $m->getHeaders()->addMailboxListHeader($headerName, $headerValue);
+ }
+ $m->ensureValidity();
+ }
+
+ public function ensureValidityProvider()
+ {
+ return [
+ 'Valid address fields' => [
+ [
+ 'To' => ['dummy@symfony.com'],
+ 'From' => ['test@symfony.com'],
+ ],
+ null,
+ null,
+ ],
+
+ 'No destination address fields' => [
+ [
+ 'From' => ['test@symfony.com'],
+ ],
+ LogicException::class,
+ 'An email must have a "To", "Cc", or "Bcc" header.',
+ ],
+
+ 'Empty destination address fields' => [
+ [
+ 'To' => [],
+ 'From' => ['test@symfony.com'],
+ ],
+ LogicException::class,
+ 'An email must have a "To", "Cc", or "Bcc" header.',
+ ],
+
+ 'No originator fields' => [
+ [
+ 'To' => ['dummy@symfony.com'],
+ ],
+ LogicException::class,
+ 'An email must have a "From" or a "Sender" header.',
+ ],
+
+ 'Empty originator fields' => [
+ [
+ 'To' => ['dummy@symfony.com'],
+ 'From' => [],
+ ],
+ LogicException::class,
+ 'An email must have a "From" or a "Sender" header.',
+ ],
+ ];
+ }
}
diff --git a/src/Symfony/Component/Notifier/.gitattributes b/src/Symfony/Component/Notifier/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/.gitattributes
+++ b/src/Symfony/Component/Notifier/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/AllMySms/.gitattributes b/src/Symfony/Component/Notifier/Bridge/AllMySms/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/AllMySms/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/AllMySms/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/AllMySms/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.gitattributes b/src/Symfony/Component/Notifier/Bridge/AmazonSns/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/AmazonSns/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/AmazonSns/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Clickatell/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Clickatell/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Clickatell/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Clickatell/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Clickatell/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Discord/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Discord/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Discord/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Discord/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Discord/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Discord/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Discord/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Discord/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Esendex/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Esendex/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Esendex/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Esendex/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Esendex/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Esendex/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Esendex/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Esendex/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Esendex/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Esendex/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Expo/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Expo/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Expo/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Expo/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Expo/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Expo/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Expo/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Expo/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Expo/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Expo/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeChat/.gitattributes b/src/Symfony/Component/Notifier/Bridge/FakeChat/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/FakeChat/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/FakeChat/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FakeChat/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeSms/.gitattributes b/src/Symfony/Component/Notifier/Bridge/FakeSms/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/FakeSms/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/FakeSms/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FakeSms/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Firebase/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Firebase/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Firebase/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Firebase/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Firebase/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Firebase/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Firebase/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Firebase/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Firebase/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Firebase/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.gitattributes b/src/Symfony/Component/Notifier/Bridge/FreeMobile/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/FreeMobile/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/FreeMobile/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/GatewayApi/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Gitter/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Gitter/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Gitter/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Gitter/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Gitter/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Gitter/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Gitter/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Gitter/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Gitter/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Gitter/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.gitattributes b/src/Symfony/Component/Notifier/Bridge/GoogleChat/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/GoogleChat/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/GoogleChat/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Infobip/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Infobip/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Infobip/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Infobip/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Infobip/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Infobip/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Infobip/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Infobip/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Infobip/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Infobip/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Iqsms/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Iqsms/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Iqsms/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Iqsms/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Iqsms/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/LightSms/.gitattributes b/src/Symfony/Component/Notifier/Bridge/LightSms/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/LightSms/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/LightSms/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/LightSms/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/LightSms/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/LightSms/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/LightSms/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/LightSms/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/LightSms/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.gitattributes b/src/Symfony/Component/Notifier/Bridge/LinkedIn/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/LinkedIn/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/LinkedIn/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Mailjet/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Mailjet/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mailjet/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Mailjet/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mailjet/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Mattermost/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Mattermost/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mattermost/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Mattermost/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mattermost/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Mercure/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Mercure/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Mercure/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Mercure/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Mercure/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mercure/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/.gitattributes b/src/Symfony/Component/Notifier/Bridge/MessageBird/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/MessageBird/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/MessageBird/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MessageBird/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.gitattributes b/src/Symfony/Component/Notifier/Bridge/MessageMedia/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/MessageMedia/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MessageMedia/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.gitattributes b/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/MicrosoftTeams/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Mobyt/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Mobyt/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Mobyt/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Mobyt/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Mobyt/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Nexmo/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Nexmo/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Nexmo/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Nexmo/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Nexmo/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Octopush/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Octopush/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Octopush/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Octopush/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Octopush/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Octopush/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Octopush/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Octopush/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Octopush/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Octopush/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/OneSignal/.gitattributes b/src/Symfony/Component/Notifier/Bridge/OneSignal/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/OneSignal/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/OneSignal/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/OneSignal/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.gitattributes b/src/Symfony/Component/Notifier/Bridge/OvhCloud/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/OvhCloud/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/OvhCloud/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/RocketChat/.gitattributes b/src/Symfony/Component/Notifier/Bridge/RocketChat/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/RocketChat/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/RocketChat/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/RocketChat/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Sendinblue/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Sendinblue/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sendinblue/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Sinch/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Sinch/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Sinch/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Sinch/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Sinch/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Sinch/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sinch/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Sinch/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Sinch/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sinch/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Slack/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Slack/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Slack/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Slack/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Slack/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Slack/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Slack/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php b/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php
index 8595f364e866a..dffea36ac402b 100644
--- a/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php
+++ b/src/Symfony/Component/Notifier/Bridge/Slack/SlackTransport.php
@@ -83,7 +83,7 @@ protected function doSend(MessageInterface $message): SentMessage
}
$options['text'] = $message->getSubject();
$response = $this->client->request('POST', 'https://'.$this->getEndpoint().'/api/chat.postMessage', [
- 'json' => array_filter($options),
+ 'json' => array_filter($options, function ($value): bool { return !\in_array($value, ['', [], null], true); }),
'auth_bearer' => $this->accessToken,
'headers' => [
'Content-Type' => 'application/json; charset=utf-8',
diff --git a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php
index 231677c8a251e..164fbec575cbd 100644
--- a/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php
+++ b/src/Symfony/Component/Notifier/Bridge/Slack/Tests/SlackTransportTest.php
@@ -174,6 +174,56 @@ public function testSendWithNotification()
$this->assertSame('1503435956.000247', $sentMessage->getMessageId());
}
+ /**
+ * @testWith [true]
+ * [false]
+ */
+ public function testSendWithBooleanOptionValue(bool $value)
+ {
+ $channel = 'testChannel';
+ $message = 'testMessage';
+
+ $response = $this->createMock(ResponseInterface::class);
+
+ $response->expects($this->exactly(2))
+ ->method('getStatusCode')
+ ->willReturn(200);
+
+ $response->expects($this->once())
+ ->method('getContent')
+ ->willReturn(json_encode(['ok' => true, 'ts' => '1503435956.000247']));
+
+ $options = new SlackOptions();
+ $options->asUser($value);
+ $options->linkNames($value);
+ $options->mrkdwn($value);
+ $options->unfurlLinks($value);
+ $options->unfurlMedia($value);
+ $notification = new Notification($message);
+ $chatMessage = ChatMessage::fromNotification($notification);
+ $chatMessage->options($options);
+
+ $expectedBody = json_encode([
+ 'as_user' => $value,
+ 'channel' => $channel,
+ 'link_names' => $value,
+ 'mrkdwn' => $value,
+ 'text' => $message,
+ 'unfurl_links' => $value,
+ 'unfurl_media' => $value,
+ ]);
+
+ $client = new MockHttpClient(function (string $method, string $url, array $options = []) use ($response, $expectedBody): ResponseInterface {
+ $this->assertJsonStringEqualsJsonString($expectedBody, $options['body']);
+
+ return $response;
+ });
+
+ $transport = self::createTransport($client, $channel);
+
+ $transport->send($chatMessage);
+ }
+
public function testSendWithInvalidOptions()
{
$this->expectException(LogicException::class);
diff --git a/src/Symfony/Component/Notifier/Bridge/Sms77/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Sms77/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Sms77/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Sms77/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Sms77/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Sms77/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sms77/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Sms77/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Sms77/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Sms77/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.gitattributes b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Smsapi/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Smsapi/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Smsapi/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsc/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Smsc/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Smsc/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Smsc/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsc/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Smsc/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Smsc/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Smsc/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Smsc/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Smsc/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/.gitattributes b/src/Symfony/Component/Notifier/Bridge/SpotHit/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/SpotHit/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/SpotHit/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/SpotHit/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Telegram/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Telegram/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Telegram/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Telegram/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Telegram/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Telegram/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Telegram/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Telegram/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Telnyx/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Telnyx/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Telnyx/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Telnyx/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Telnyx/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/TurboSms/.gitattributes b/src/Symfony/Component/Notifier/Bridge/TurboSms/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/TurboSms/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/TurboSms/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/TurboSms/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Twilio/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Twilio/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Twilio/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Twilio/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Twilio/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Twilio/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Twilio/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Vonage/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Vonage/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Vonage/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Vonage/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Vonage/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Vonage/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Vonage/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Vonage/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Vonage/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Vonage/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Yunpian/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Yunpian/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Yunpian/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Yunpian/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Yunpian/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Bridge/Zulip/.gitattributes b/src/Symfony/Component/Notifier/Bridge/Zulip/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Notifier/Bridge/Zulip/.gitattributes
+++ b/src/Symfony/Component/Notifier/Bridge/Zulip/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Notifier/Bridge/Zulip/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Notifier/Bridge/Zulip/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Zulip/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Notifier/Bridge/Zulip/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Notifier/Bridge/Zulip/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Notifier/Bridge/Zulip/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php b/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php
index 2b48c20e20ff0..07d4720459b4d 100644
--- a/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php
+++ b/src/Symfony/Component/Notifier/Tests/Transport/FailoverTransportTest.php
@@ -121,13 +121,17 @@ public function testSendAllDeadWithinRetryPeriod()
$t1->expects($this->once())->method('send');
$t2 = $this->createMock(TransportInterface::class);
$t2->method('supports')->with($message)->willReturn(true);
- $t2->expects($this->exactly(3))
+
+ $matcher = $this->exactly(3);
+ $t2->expects($matcher)
->method('send')
- ->willReturnOnConsecutiveCalls(
- new SentMessage($message, 't2'),
- new SentMessage($message, 't2'),
- $this->throwException($this->createMock(TransportExceptionInterface::class))
- );
+ ->willReturnCallback(function () use ($matcher, $message) {
+ if (3 === $matcher->getInvocationCount()) {
+ throw $this->createMock(TransportExceptionInterface::class);
+ }
+
+ return new SentMessage($message, 't2');
+ });
$t = new FailoverTransport([$t1, $t2], 40);
$t->send($message);
sleep(4);
@@ -146,16 +150,27 @@ public function testSendOneDeadButRecover()
$t1 = $this->createMock(TransportInterface::class);
$t1->method('supports')->with($message)->willReturn(true);
- $t1->expects($this->exactly(2))->method('send')->willReturnOnConsecutiveCalls(
- $this->throwException($this->createMock(TransportExceptionInterface::class)),
- new SentMessage($message, 't1')
- );
+
+ $t1Matcher = $this->exactly(2);
+ $t1->expects($t1Matcher)->method('send')
+ ->willReturnCallback(function () use ($t1Matcher, $message) {
+ if (1 === $t1Matcher->getInvocationCount()) {
+ throw $this->createMock(TransportExceptionInterface::class);
+ }
+
+ return new SentMessage($message, 't1');
+ });
$t2 = $this->createMock(TransportInterface::class);
$t2->method('supports')->with($message)->willReturn(true);
- $t2->expects($this->exactly(2))->method('send')->willReturnOnConsecutiveCalls(
- new SentMessage($message, 't2'),
- $this->throwException($this->createMock(TransportExceptionInterface::class))
- );
+
+ $t2Matcher = $this->exactly(2);
+ $t2->expects($t2Matcher)->method('send')->willReturnCallback(function () use ($t2Matcher, $message) {
+ if (1 === $t2Matcher->getInvocationCount()) {
+ return new SentMessage($message, 't1');
+ }
+
+ throw $this->createMock(TransportExceptionInterface::class);
+ });
$t = new FailoverTransport([$t1, $t2], 1);
diff --git a/src/Symfony/Component/OptionsResolver/.gitattributes b/src/Symfony/Component/OptionsResolver/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/OptionsResolver/.gitattributes
+++ b/src/Symfony/Component/OptionsResolver/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/OptionsResolver/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/OptionsResolver/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/OptionsResolver/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/OptionsResolver/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/OptionsResolver/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/OptionsResolver/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/PasswordHasher/.gitattributes b/src/Symfony/Component/PasswordHasher/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/PasswordHasher/.gitattributes
+++ b/src/Symfony/Component/PasswordHasher/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/PasswordHasher/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/PasswordHasher/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/PasswordHasher/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/PasswordHasher/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/PasswordHasher/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/PasswordHasher/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php
index 4cf708b806296..324e1dc65b9ca 100644
--- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php
+++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/NativePasswordHasherTest.php
@@ -98,16 +98,44 @@ public function testBcryptWithLongPassword()
$this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword));
}
- public function testBcryptWithNulByte()
+ /**
+ * @requires PHP < 8.4
+ */
+ public function testBcryptWithNulByteWithNativePasswordHash()
{
$hasher = new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT);
$plainPassword = "a\0b";
- if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) {
- // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5
- $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword));
+ try {
+ $hash = password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]);
+ } catch (\Throwable $throwable) {
+ // we skip the test in case the current PHP version does not support NUL bytes in passwords
+ // with bcrypt
+ //
+ // @see https://github.com/php/php-src/commit/11f2568767660ffe92fbc6799800e01203aad73a
+ if (str_contains($throwable->getMessage(), 'Bcrypt password must not contain null character')) {
+ $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.');
+ }
+
+ throw $throwable;
}
+ if (null === $hash) {
+ // we also skip the test in case password_hash() returns null as
+ // implemented in security patches backports
+ //
+ // @see https://github.com/shivammathur/php-src-backports/commit/d22d9ebb29dce86edd622205dd1196a2796c08c7
+ $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.');
+ }
+
+ $this->assertFalse($hasher->verify($hash, $plainPassword));
+ }
+
+ public function testPasswordNulByteGracefullyHandled()
+ {
+ $hasher = new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT);
+ $plainPassword = "a\0b";
+
$this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword));
}
diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php
index 101c09fc46ed3..ed04b5e097c58 100644
--- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php
+++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/SodiumPasswordHasherTest.php
@@ -73,17 +73,45 @@ public function testBcryptWithLongPassword()
$this->assertTrue($hasher->verify((new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT))->hash($plainPassword), $plainPassword));
}
- public function testBcryptWithNulByte()
+ /**
+ * @requires PHP < 8.4
+ */
+ public function testBcryptWithNulByteWithNativePasswordHash()
{
$hasher = new SodiumPasswordHasher(null, null);
$plainPassword = "a\0b";
- if (\PHP_VERSION_ID < 80218 || \PHP_VERSION_ID >= 80300 && \PHP_VERSION_ID < 80305) {
- // password_hash() does not accept passwords containing NUL bytes since PHP 8.2.18 and 8.3.5
- $this->assertFalse($hasher->verify(password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]), $plainPassword));
+ try {
+ $hash = password_hash($plainPassword, \PASSWORD_BCRYPT, ['cost' => 4]);
+ } catch (\Throwable $throwable) {
+ // we skip the test in case the current PHP version does not support NUL bytes in passwords
+ // with bcrypt
+ //
+ // @see https://github.com/php/php-src/commit/11f2568767660ffe92fbc6799800e01203aad73a
+ if (str_contains($throwable->getMessage(), 'Bcrypt password must not contain null character')) {
+ $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.');
+ }
+
+ throw $throwable;
}
- $this->assertTrue($hasher->verify((new NativePasswordHasher(null, null, 4, \PASSWORD_BCRYPT))->hash($plainPassword), $plainPassword));
+ if (null === $hash) {
+ // we also skip the test in case password_hash() returns null as
+ // implemented in security patches backports
+ //
+ // @see https://github.com/shivammathur/php-src-backports/commit/d22d9ebb29dce86edd622205dd1196a2796c08c7
+ $this->markTestSkipped('password_hash() does not accept passwords containing NUL bytes.');
+ }
+
+ $this->assertFalse($hasher->verify($hash, $plainPassword));
+ }
+
+ public function testPasswordNulByteGracefullyHandled()
+ {
+ $hasher = new SodiumPasswordHasher(null, null);
+ $plainPassword = "a\0b";
+
+ $this->assertTrue($hasher->verify($hasher->hash($plainPassword), $plainPassword));
}
public function testUserProvidedSaltIsNotUsed()
diff --git a/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php b/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php
index 32805b1917ec7..c8f057cf85ec2 100644
--- a/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php
+++ b/src/Symfony/Component/PasswordHasher/Tests/Hasher/UserPasswordHasherTest.php
@@ -154,7 +154,7 @@ public function testNeedsRehash()
$mockPasswordHasherFactory->expects($this->any())
->method('getPasswordHasher')
->with($user)
- ->will($this->onConsecutiveCalls($hasher, $hasher, new NativePasswordHasher(5, 20000, 5), $hasher));
+ ->willReturn($hasher, $hasher, new NativePasswordHasher(5, 20000, 5), $hasher);
$passwordHasher = new UserPasswordHasher($mockPasswordHasherFactory);
diff --git a/src/Symfony/Component/Process/.gitattributes b/src/Symfony/Component/Process/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Process/.gitattributes
+++ b/src/Symfony/Component/Process/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Process/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Process/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Process/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Process/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Process/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Process/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php
index 5c63cf0f91c47..6d089def27ad1 100644
--- a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php
+++ b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php
@@ -109,12 +109,16 @@ public function testFindWithOpenBaseDir()
$this->markTestSkipped('Cannot test when open_basedir is set');
}
- $this->iniSet('open_basedir', \dirname(\PHP_BINARY).\PATH_SEPARATOR.'/');
+ $initialOpenBaseDir = ini_set('open_basedir', \dirname(\PHP_BINARY).\PATH_SEPARATOR.'/');
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName());
+ try {
+ $finder = new ExecutableFinder();
+ $result = $finder->find($this->getPhpBinaryName());
- $this->assertSamePath(\PHP_BINARY, $result);
+ $this->assertSamePath(\PHP_BINARY, $result);
+ } finally {
+ ini_set('open_basedir', $initialOpenBaseDir);
+ }
}
/**
@@ -130,12 +134,17 @@ public function testFindProcessInOpenBasedir()
}
$this->setPath('');
- $this->iniSet('open_basedir', \PHP_BINARY.\PATH_SEPARATOR.'/');
- $finder = new ExecutableFinder();
- $result = $finder->find($this->getPhpBinaryName(), false);
+ $initialOpenBaseDir = ini_set('open_basedir', \PHP_BINARY.\PATH_SEPARATOR.'/');
- $this->assertSamePath(\PHP_BINARY, $result);
+ try {
+ $finder = new ExecutableFinder();
+ $result = $finder->find($this->getPhpBinaryName(), false);
+
+ $this->assertSamePath(\PHP_BINARY, $result);
+ } finally {
+ ini_set('open_basedir', $initialOpenBaseDir);
+ }
}
public function testFindBatchExecutableOnWindows()
diff --git a/src/Symfony/Component/PropertyAccess/.gitattributes b/src/Symfony/Component/PropertyAccess/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/PropertyAccess/.gitattributes
+++ b/src/Symfony/Component/PropertyAccess/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/PropertyAccess/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/PropertyAccess/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/PropertyAccess/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/PropertyAccess/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/PropertyAccess/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/PropertyAccess/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/PropertyInfo/.gitattributes b/src/Symfony/Component/PropertyInfo/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/PropertyInfo/.gitattributes
+++ b/src/Symfony/Component/PropertyInfo/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/PropertyInfo/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/PropertyInfo/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/PropertyInfo/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/PropertyInfo/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/PropertyInfo/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/PropertyInfo/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/RateLimiter/.gitattributes b/src/Symfony/Component/RateLimiter/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/RateLimiter/.gitattributes
+++ b/src/Symfony/Component/RateLimiter/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/RateLimiter/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/RateLimiter/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/RateLimiter/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/RateLimiter/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/RateLimiter/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/RateLimiter/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Routing/.gitattributes b/src/Symfony/Component/Routing/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Routing/.gitattributes
+++ b/src/Symfony/Component/Routing/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Routing/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Routing/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Routing/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Routing/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Routing/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Routing/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php b/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php
index 64e47438386d4..ef3061db7b9ec 100644
--- a/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php
+++ b/src/Symfony/Component/Routing/Tests/Generator/Dumper/CompiledUrlGeneratorDumperTest.php
@@ -63,10 +63,12 @@ protected function tearDown(): void
parent::tearDown();
@unlink($this->testTmpFilepath);
+ @unlink($this->largeTestTmpFilepath);
$this->routeCollection = null;
$this->generatorDumper = null;
$this->testTmpFilepath = null;
+ $this->largeTestTmpFilepath = null;
}
public function testDumpWithRoutes()
diff --git a/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php b/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php
index e743ef2e35d50..c081f5e6cbbd7 100644
--- a/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php
+++ b/src/Symfony/Component/Routing/Tests/Loader/AbstractAnnotationLoaderTestCase.php
@@ -13,6 +13,7 @@
use PHPUnit\Framework\TestCase;
use Symfony\Component\Routing\Loader\AnnotationClassLoader;
+use Symfony\Component\Routing\Route;
abstract class AbstractAnnotationLoaderTestCase extends TestCase
{
@@ -26,9 +27,10 @@ public function getReader()
public function getClassLoader($reader)
{
- return $this->getMockBuilder(AnnotationClassLoader::class)
- ->setConstructorArgs([$reader])
- ->getMockForAbstractClass()
- ;
+ return new class($reader) extends AnnotationClassLoader {
+ protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, object $annot): void
+ {
+ }
+ };
}
}
diff --git a/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php b/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php
index 51f7045a12163..62cb6b9f843c1 100644
--- a/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php
+++ b/src/Symfony/Component/Routing/Tests/Loader/ObjectLoaderTest.php
@@ -81,9 +81,8 @@ public function testExceptionOnBadMethod()
public function testExceptionOnMethodNotReturningCollection()
{
$this->expectException(\LogicException::class);
- $service = $this->getMockBuilder(\stdClass::class)
- ->addMethods(['loadRoutes'])
- ->getMock();
+
+ $service = $this->createMock(CustomRouteLoader::class);
$service->expects($this->once())
->method('loadRoutes')
->willReturn('NOT_A_COLLECTION');
@@ -109,6 +108,11 @@ protected function getObject(string $id): object
}
}
+interface CustomRouteLoader
+{
+ public function loadRoutes();
+}
+
class TestObjectLoaderRouteService
{
private $collection;
diff --git a/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php
index d1fd035d12aed..e5093a749b8dc 100644
--- a/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php
+++ b/src/Symfony/Component/Routing/Tests/Matcher/RedirectableUrlMatcherTest.php
@@ -211,6 +211,9 @@ public function testTrailingRequirementWithDefaultA()
protected function getUrlMatcher(RouteCollection $routes, ?RequestContext $context = null)
{
- return $this->getMockForAbstractClass(RedirectableUrlMatcher::class, [$routes, $context ?? new RequestContext()]);
+ return $this->getMockBuilder(RedirectableUrlMatcher::class)
+ ->setConstructorArgs([$routes, $context ?? new RequestContext()])
+ ->onlyMethods(['redirect'])
+ ->getMock();
}
}
diff --git a/src/Symfony/Component/Runtime/.gitattributes b/src/Symfony/Component/Runtime/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Runtime/.gitattributes
+++ b/src/Symfony/Component/Runtime/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Runtime/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Runtime/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Runtime/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Runtime/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Runtime/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Runtime/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Security/Core/.gitattributes b/src/Symfony/Component/Security/Core/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Security/Core/.gitattributes
+++ b/src/Symfony/Component/Security/Core/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Security/Core/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Security/Core/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Security/Core/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Security/Core/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Security/Core/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Security/Core/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf
index 014111dff1262..7bcb92066c72f 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.af.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minuut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minute.
+
An authentication exception occurred.
- Terjadi sebuah pengecualian otentikasi.
+ Terjadi kesalahan otentikasi.Authentication credentials could not be found.
@@ -16,7 +16,7 @@
Invalid credentials.
- Kredensial salah.
+ Kredensial tidak valid.Cookie has already been used by someone else.
@@ -28,7 +28,7 @@
Invalid CSRF token.
- Token CSRF salah.
+ Token CSRF tidak valid.No authentication provider found to support the authentication token.
@@ -64,15 +64,19 @@
Too many failed login attempts, please try again later.
- Terlalu banyak percobaan login yang salah, silahkan coba lagi nanti.
+ Terlalu banyak percobaan login yang gagal, silahkan coba lagi nanti.Invalid or expired login link.
- Link login salah atau sudah kedaluwarsa.
+ Link login tidak valid atau sudah kedaluwarsa.Too many failed login attempts, please try again in %minutes% minute.
- Terlalu banyak percobaan login yang salah, silahkan coba lagi dalam %minutes% menit.
+ Terlalu banyak percobaan login yang gagal, silahkan coba lagi dalam %minutes% menit.
+
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Terlalu banyak upaya login yang gagal, silakan coba lagi dalam beberapa %minutes% menit.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf
index 4871bc6676620..d90e830ff18f4 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ar.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.عدد كبير جدا من محاولات الدخول الفاشلة، يرجى اعادة المحاولة بعد %minutes% دقيقة.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ عدد محاولات تسجيل الدخول الفاشلة كثيرة، الرجاء المحاولة مرة أخرى بعد %minutes% دقيقة.|عدد محاولات تسجيل الدخول الفاشلة كثيرة، الرجاء المحاولة مرة أخرى بعد %minutes% دقائق.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
index 29d26c4fbb784..25cb8605d2bc8 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin.|Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf
index f9dd10d472fcf..194392935fcc1 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.be.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Занадта шмат няўдалых спроб уваходу ў сістэму, паспрабуйце спробу праз %minutes% хвіліну.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліну.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвіліны.|Занадта шмат няўдалых спробаў уваходу, калі ласка, паспрабуйце зноў праз %minutes% хвілін.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf
index 8c04364db7166..7fdd4252411be 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bg.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минута.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минути.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf
index d3fde1a5d2f01..f58dce0ea8e59 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.bs.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minut.|Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minuta.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf
index 1450b8d0d4581..6d7dc7fc23e33 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ca.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Massa intents d'inici de sessió fallits, torneu-ho a provar en %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Massa intents fallits d'inici de sessió, torneu-ho a provar d'aquí a %minutes% minuts.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf
index 2572e628a8a68..a37e34e106ed1 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cs.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minutu.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minutu.|Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minuty.|Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minut.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf
index b701c291c5049..ddb47097a93c7 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.cy.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Gormod o ymdrechion mewngofnodi wedi methu, ceisiwch eto ymhen %minutes% munud.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud.|Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf
index bd58bee7037c2..564f0eee992ee 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.da.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.For mange mislykkede loginforsøg. Prøv venligst igen om %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ For mange mislykkede loginforsøg, prøv igen om %minutes% minutter.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf
index 76cb737ae25f3..c1c457abd92b3 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.de.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in einer Minute noch einmal.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in %minutes% Minuten noch einmal.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf
index bebd2a486a3e7..25cfb43bdf474 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.el.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Πολλαπλές αποτυχημένες απόπειρες σύνδεσης, παρακαλούμε ξαναδοκιμάστε σε %minutes% λεπτό.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Πολλές αποτυχημένες προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %minutes% λεπτά.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf
index 589ca1babed5a..dffde89751e55 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Too many failed login attempts, please try again in %minutes% minute.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Too many failed login attempts, please try again in %minutes% minutes.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf
index 971b97e69829a..e8af87e5bb9c8 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.es.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minutos.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf
index e09c718d9e302..b87cb71ceec7f 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.et.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Liiga palju ebaõnnestunud autentimise katseid, palun proovi uuesti %minutes% minuti pärast.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Liiga palju nurjunud sisselogimiskatseid, proovige uuesti %minutes% minuti pärast.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf
index 7b294c2249969..0f0a71342ff38 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.eu.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Saioa hasteko huts gehiegi egin dira, saiatu berriro minutu %minutes% geroago.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Saioa hasteko saiakera huts gehiegi, saiatu berriro %minutes% minututan.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf
index d5ab89f6a264d..897c34b8e86b0 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fa.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.تلاشهای ناموفق زیادی برای ورود صورت گرفته است، لطفاً %minutes% دقیقه دیگر دوباره امتحان کنید.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ تعداد دفعات تلاش برای ورود بیش از حد زیاد است، لطفا پس از %minutes% دقیقه دوباره تلاش کنید.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf
index c50d484633250..7df4a19347428 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fi.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf
index 4594e8eaac409..058ad9473b96a 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.fr.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Plusieurs tentatives de connexion ont échoué, veuillez réessayer dans %minutes% minute.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Trop de tentatives de connexion échouées, veuillez réessayer dans %minutes% minutes.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf
index 5ec7187aaf43a..49f48dbed9412 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.gl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Demasiados intentos de inicio de sesión errados, por favor, ténteo de novo en %minutes% minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Demasiados intentos fallidos de inicio de sesión, inténtao de novo en %minutes% minutos.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf
index f1294d0c9e272..b1d6afd434e8a 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.he.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בוד %minutes% דקה.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בעוד %minutes% דקות.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf
index b61f133ad9ad0..f3b5a257e5f28 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hr.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minutu.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minute.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf
index 6262acf50915b..bdee5f6813fbf 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hu.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Túl sok sikertelen bejelentkezési kísérlet, kérjük próbálja újra %minutes% perc múlva.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Túl sok sikertelen bejelentkezési kísérlet, kérjük, próbálja újra %minutes% perc múlva.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf
index e58ce08b739b4..e506c9198812c 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.hy.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Մուտքի չափազանց շատ անհաջող փորձեր: Խնդրում ենք կրկին փորձել %minutes րոպե:
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Չափազանց շատ անհաջող մուտքի փորձեր, խնդրում ենք փորձել կրկին %minutes% րոպեից.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf
index 477e91bc16cf2..4c1cd9965e1af 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.id.xlf
@@ -4,7 +4,7 @@
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf
index 4100dbd11b1f0..ef250923e411c 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.it.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Troppi tentativi di login falliti, riprova tra %minutes% minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Troppi tentativi di accesso falliti, riprova tra %minutes% minuti.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf
index f344b570129b7..bc3a18aefd8b2 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ja.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf
index ae0a4fd760540..181ef2444f62b 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lb.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Zu vill fehlgeschloen Loginversich, w. e. g. probéiert nach am %minutes% Minutt.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Ze vill Feeler beim Umellen, versicht weg erëm an %minutes% Minutten.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf
index 19e553a04bfb5..8053d0da23a87 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lt.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minutės.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minutės.|Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minučių.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
index 45775be0335ee..fdf0a09698887 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Pārāk daudz nesekmīgu autentifikācijas mēģinājumu, lūdzu mēģiniet vēlreiz pēc %minutes% minūtes.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Pārāk daudz neveiksmīgu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtes.|Pārāk daudz neveiksmīgu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz pēc %minutes% minūtēm.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf
index e82e31cefab7c..ba046eca2c15b 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mk.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Премногу неуспешни обиди за најавување, обидете се повторно за %minutes% минута.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Претерано многу неуспешни обиди за најавување, ве молиме обидете се повторно за %minutes% минута.|Претерано многу неуспешни обиди за најавување, ве молиме обидете се повторно за %minutes% минути.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf
index 3a14608923612..33a9ffda2163b 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.mn.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Нэвтрэх оролдлого ихээр амжилтгүй болсон, %minutes% минутын дараа дахин оролдоно уу.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Хэт олон бүтэлгүй нэвтрэх оролдлого, %minutes% минутын дараа дахин оролдоно уу.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf
index 066dae7673d92..8550e745ef813 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.my.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Login ၀င်ရန်ကြိုးစားမှုများလွန်းပါသည်၊ ကျေးဇူးပြု၍ နောက် %minutes% မှထပ်မံကြိုးစားပါ။
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ ဝင်ရောက်မှု မအောင်မြင်သော ကြိုးပမ်းမှုများအတွက် တစ်ခါတည်း ပြန်လုပ်မည်။ ထပ်မံကြိုးစားကြည့်ပါ။ %minutes% မိနစ်အတွင်း|ဝင်ရောက်မှု မအောင်မြင်သော ကြိုးပမ်းမှုများအတွက် တစ်ခါတည်း ပြန်လုပ်မည်။ ထပ်မံကြိုးစားကြည့်ပါ။ %minutes% မိနစ်အတွင်း
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf
index 549bcbf65d488..9ace014112098 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nb.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf
index 418e1409d1458..4549d9f1c34f3 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Te veel onjuiste inlogpogingen, probeer het opnieuw over %minutes% minuut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Te veel mislukte inlogpogingen, probeer het over %minutes% minuten opnieuw.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf
index db49db3992bfe..1a4c32b737909 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.nn.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ For mange mislukka innloggingsforsøk, prøv igjen om %minutes% minutt.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf
index 549bcbf65d488..9ace014112098 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.no.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf
index 4833f59db16af..0cfc58b35bf2d 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Zbyt wiele nieudanych prób logowania, spróbuj ponownie po upływie %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minutę.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minuty.|Zbyt wiele nieudanych prób logowania, spróbuj ponownie za %minutes% minut.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf
index 20fd523d3516d..5ae30c96f8ca9 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Demasiadas tentativas de login, tente novamente num minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Muitas tentativas de login sem sucesso, por favor tente novamente em %minutes% minutos.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf
index f15b3a8909720..675b600e83783 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.pt_BR.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Muitas tentativas de login inválidas, por favor, tente novamente em um minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Muitas tentativas de login sem sucesso, por favor tente novamente em %minutes% minutos.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf
index 07bb782e68312..3316275fdec13 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ro.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Prea multe încercări nereușite, încearcă din nou în %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minut.|Prea multe încercări eșuate de autentificare, vă rugăm să încercați din nou peste %minutes% minute.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf
index 05003efcc2b77..8705a24cff2e3 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ru.xlf
@@ -72,7 +72,11 @@
Too many failed login attempts, please try again in %minutes% minute.
- Слишком много неудачных попыток входа в систему, повторите попытку через %minutes% минуту.
+ Слишком много неудачных попыток входа, повторите попытку через %minutes% минуту.
+
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Слишком много неудачных попыток входа, повторите попытку через %minutes% минуту.|Слишком много неудачных попыток входа, повторите попытку через %minutes% минуты.|Слишком много неудачных попыток входа, повторите попытку через %minutes% минут.
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf
index 5d67a2454d049..b08757de0086f 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sk.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Príliš veľa neúspešných pokusov o prihlásenie. Skúste to znova o %minutes% minútu.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minútu.|Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minúty.|Príliš veľa neúspešných pokusov o prihlásenie, skúste to prosím znova o %minutes% minút.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf
index 218864b42680f..7d0514005116d 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Preveč neuspelih poskusov prijave, poskusite znova čez %minutes% minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Preveč neuspešnih poskusov prijave, poskusite znova čez %minutes% minuto.|Preveč neuspešnih poskusov prijave, poskusite znova čez %minutes% minut.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf
index 905ac7b6ec58b..44f129e306115 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sq.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Shumë përpjekje të dështuara për identifikim; provo sërish pas %minutes% minutë.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Shumë përpjekje të pasuksesshme për t'u identifikuar, ju lutemi provoni përsëri pas %minutes% minutash.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf
index 0a18dff55678a..c4e58def93226 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Cyrl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Превише неуспешних покушаја пријављивања, молим покушајте поново за %minutes% минут.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минут.|Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минута.|Превише неуспешних покушаја пријављивања, покушајте поново за %minutes% минута.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf
index 79403cb97d1d5..ad0774f9a0bb2 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sr_Latn.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Previše neuspešnih pokušaja prijavljivanja, molim pokušajte ponovo za %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minut.|Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minuta.|Previše neuspešnih pokušaja prijavljivanja, pokušajte ponovo za %minutes% minuta.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf
index 7604431130b9a..dffe36df6350f 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.sv.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.För många misslyckade inloggningsförsök, försök igen om %minutes% minut.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ För många misslyckade inloggningsförsök, vänligen försök igen om %minutes% minuter.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf
index 4e066754de340..0209b4c423eb7 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.th.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.มีความพยายามเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ มีความพยายามในการเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที.|มีความพยายามในการเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf
index 4c8d455eeeb68..c02222dedb204 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tl.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Napakaraming nabigong mga pagtatangka sa pag-login, pakisubukan ulit sa% minuto% minuto.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Napakaraming nabigong pagtatangka ng pag-login, mangyaring subukang muli sa loob ng %minutes% minuto.|Napakaraming nabigong pagtatangka ng pag-login, mangyaring subukang muli sa loob ng %minutes% minuto.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf
index da131b5faa332..4cfc1cb9dfce0 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.tr.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.|Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf
index 48bb6960373ae..6b27de7caed99 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uk.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Забагато невдалих спроб входу. Будь ласка, спробуйте знову через %minutes% хвилину.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилину.|Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилини.|Забагато невдалих спроб входу, будь ласка, спробуйте ще раз через %minutes% хвилин.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf
index 070c9bbfd48a1..5c705cd0f7293 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ بہت زیادہ ناکام لاگ ان کوششیں، براہ کرم %minutes% منٹ میں دوبارہ کوشش کریں۔
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf
index 574f46c36c663..ec690c5f43711 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.uz.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Kirish uchun muvaffaqiyatsiz urinishlar, %minutes% daqiqadan so'ng qayta urinib ko'ring.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Koʻplab muvaffaqiyatsiz kirish urinishlari, iltimos, %minutes% daqiqadan so'ng qayta urinib koʻring.|Koʻplab muvaffaqiyatsiz kirish urinishlari, iltimos, %minutes% daqiqadan so'ng qayta urinib koʻring.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf
index cca3cfd7dd834..fc4595c8d7c77 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.vi.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.Quá nhiều lần thử đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Quá nhiều lần đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.|Quá nhiều lần đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf
index 1d218426793da..9954d866a89e2 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_CN.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.登入失败的次数过多,请在%minutes%分钟后再试。
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ 登录尝试失败次数过多,请在 %minutes% 分钟后再试。|登录尝试失败次数过多,请在 %minutes% 分钟后再试。
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf
index 43372798665d2..097ce9976f32f 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.zh_TW.xlf
@@ -74,6 +74,10 @@
Too many failed login attempts, please try again in %minutes% minute.登錄失敗的次數過多,請在%minutes%分鐘後再試。
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ 嘗試登入失敗次數過多,請 %minutes% 分鐘後再試。|嘗試登入失敗次數過多,請 %minutes% 分鐘後再試。
+
diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php
index 8eaf3bb15f378..0527069eebada 100644
--- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php
@@ -22,6 +22,7 @@
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
use Symfony\Component\Security\Core\Exception\CredentialsExpiredException;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
+use Symfony\Component\Security\Core\Tests\Fixtures\MockableUsernamePasswordTokenWithRoles;
use Symfony\Component\Security\Core\User\InMemoryUser;
use Symfony\Component\Security\Core\User\UserCheckerInterface;
use Symfony\Component\Security\Core\User\UserInterface;
@@ -232,7 +233,9 @@ public function testAuthenticatePreservesOriginalToken()
protected function getSupportedToken()
{
- $mock = $this->getMockBuilder(UsernamePasswordToken::class)->onlyMethods(['getCredentials', 'getFirewallName'])->addMethods(['getRoles'])->disableOriginalConstructor()->getMock();
+ $mock = $this->getMockBuilder(MockableUsernamePasswordTokenWithRoles::class)
+ ->onlyMethods(['getCredentials', 'getFirewallName', 'getRoles'])
+ ->disableOriginalConstructor()->getMock();
$mock
->expects($this->any())
->method('getFirewallName')
@@ -250,6 +253,9 @@ protected function getProvider($userChecker = false, $hide = true)
$userChecker = $this->createMock(UserCheckerInterface::class);
}
- return $this->getMockForAbstractClass(UserAuthenticationProvider::class, [$userChecker, 'key', $hide]);
+ return $this->getMockBuilder(UserAuthenticationProvider::class)
+ ->setConstructorArgs([$userChecker, 'key', $hide])
+ ->onlyMethods(['retrieveUser', 'checkAuthentication'])
+ ->getMock();
}
}
diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php
index aa75671c8e344..6aa99ef3177f5 100644
--- a/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Authorization/AccessDecisionManagerTest.php
@@ -179,7 +179,8 @@ public static function getStrategyTests(): array
public function testCacheableVoters()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
+
$voter
->expects($this->once())
->method('supportsAttribute')
@@ -203,7 +204,7 @@ public function testCacheableVoters()
public function testCacheableVotersIgnoresNonStringAttributes()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->never())
->method('supportsAttribute');
@@ -225,7 +226,7 @@ public function testCacheableVotersIgnoresNonStringAttributes()
public function testCacheableVotersWithMultipleAttributes()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->exactly(2))
->method('supportsAttribute')
@@ -258,7 +259,7 @@ public function testCacheableVotersWithMultipleAttributes()
public function testCacheableVotersWithEmptyAttributes()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->never())
->method('supportsAttribute');
@@ -280,7 +281,7 @@ public function testCacheableVotersWithEmptyAttributes()
public function testCacheableVotersSupportsMethodsCalledOnce()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->once())
->method('supportsAttribute')
@@ -305,7 +306,7 @@ public function testCacheableVotersSupportsMethodsCalledOnce()
public function testCacheableVotersNotCalled()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->once())
->method('supportsAttribute')
@@ -325,7 +326,7 @@ public function testCacheableVotersNotCalled()
public function testCacheableVotersWithMultipleAttributesAndNonString()
{
$token = $this->createMock(TokenInterface::class);
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
$voter
->expects($this->once())
->method('supportsAttribute')
diff --git a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php
index d0f8ae08f97db..1d8c86490de4e 100644
--- a/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Authorization/Voter/TraceableVoterTest.php
@@ -23,18 +23,18 @@ class TraceableVoterTest extends TestCase
{
public function testGetDecoratedVoterClass()
{
- $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createStub(VoterInterface::class);
- $sut = new TraceableVoter($voter, $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass());
+ $sut = new TraceableVoter($voter, $this->createStub(EventDispatcherInterface::class));
$this->assertSame($voter, $sut->getDecoratedVoter());
}
public function testVote()
{
- $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(VoterInterface::class);
- $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass();
- $token = $this->getMockBuilder(TokenInterface::class)->getMockForAbstractClass();
+ $eventDispatcher = $this->createMock(EventDispatcherInterface::class);
+ $token = $this->createStub(TokenInterface::class);
$voter
->expects($this->once())
@@ -55,8 +55,8 @@ public function testVote()
public function testSupportsAttributeOnCacheable()
{
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
- $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
+ $eventDispatcher = $this->createStub(EventDispatcherInterface::class);
$voter
->expects($this->once())
@@ -71,8 +71,8 @@ public function testSupportsAttributeOnCacheable()
public function testSupportsTypeOnCacheable()
{
- $voter = $this->getMockBuilder(CacheableVoterInterface::class)->getMockForAbstractClass();
- $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass();
+ $voter = $this->createMock(CacheableVoterInterface::class);
+ $eventDispatcher = $this->createStub(EventDispatcherInterface::class);
$voter
->expects($this->once())
@@ -87,8 +87,8 @@ public function testSupportsTypeOnCacheable()
public function testSupportsAttributeOnNonCacheable()
{
- $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass();
- $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass();
+ $voter = $this->createStub(VoterInterface::class);
+ $eventDispatcher = $this->createStub(EventDispatcherInterface::class);
$sut = new TraceableVoter($voter, $eventDispatcher);
@@ -97,8 +97,8 @@ public function testSupportsAttributeOnNonCacheable()
public function testSupportsTypeOnNonCacheable()
{
- $voter = $this->getMockBuilder(VoterInterface::class)->getMockForAbstractClass();
- $eventDispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMockForAbstractClass();
+ $voter = $this->createStub(VoterInterface::class);
+ $eventDispatcher = $this->createStub(EventDispatcherInterface::class);
$sut = new TraceableVoter($voter, $eventDispatcher);
diff --git a/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php b/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php
index 6f52fbf1b22d9..9fca415024e12 100644
--- a/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/Encoder/UserPasswordEncoderTest.php
@@ -86,7 +86,7 @@ public function testNeedsRehash()
$mockEncoderFactory->expects($this->any())
->method('getEncoder')
->with($user)
- ->will($this->onConsecutiveCalls($encoder, $encoder, new NativePasswordEncoder(5, 20000, 5), $encoder));
+ ->willReturn($encoder, $encoder, new NativePasswordEncoder(5, 20000, 5), $encoder);
$passwordEncoder = new UserPasswordEncoder($mockEncoderFactory);
diff --git a/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php b/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php
new file mode 100644
index 0000000000000..94fd47fdc1a83
--- /dev/null
+++ b/src/Symfony/Component/Security/Core/Tests/Fixtures/MockableUsernamePasswordTokenWithRoles.php
@@ -0,0 +1,22 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Security\Core\Tests\Fixtures;
+
+use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
+
+class MockableUsernamePasswordTokenWithRoles extends UsernamePasswordToken
+{
+ public function getRoles(): array
+ {
+ return [];
+ }
+}
diff --git a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
index a5a74f0b05651..c44402bdfe05d 100644
--- a/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
+++ b/src/Symfony/Component/Security/Core/Tests/User/ChainUserProviderTest.php
@@ -252,14 +252,14 @@ public function testPasswordUpgrades()
{
$user = new InMemoryUser('user', 'pwd');
- $provider1 = $this->getMockForAbstractClass(MigratingProvider::class);
+ $provider1 = $this->createMock(MigratingProvider::class);
$provider1
->expects($this->once())
->method('upgradePassword')
->willThrowException(new UnsupportedUserException('unsupported'))
;
- $provider2 = $this->getMockForAbstractClass(MigratingProvider::class);
+ $provider2 = $this->createMock(MigratingProvider::class);
$provider2
->expects($this->once())
->method('upgradePassword')
diff --git a/src/Symfony/Component/Security/Csrf/.gitattributes b/src/Symfony/Component/Security/Csrf/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Security/Csrf/.gitattributes
+++ b/src/Symfony/Component/Security/Csrf/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Security/Csrf/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Security/Csrf/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Security/Csrf/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Security/Csrf/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Security/Csrf/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Security/Csrf/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php b/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php
index dd86f43ebc65a..46cdb282bcd47 100644
--- a/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php
+++ b/src/Symfony/Component/Security/Csrf/Tests/TokenGenerator/UriSafeTokenGeneratorTest.php
@@ -53,9 +53,7 @@ public function testGenerateToken()
$token = $this->generator->generateToken();
$this->assertTrue(ctype_print($token), 'is printable');
- $this->assertStringNotMatchesFormat('%S+%S', $token, 'is URI safe');
- $this->assertStringNotMatchesFormat('%S/%S', $token, 'is URI safe');
- $this->assertStringNotMatchesFormat('%S=%S', $token, 'is URI safe');
+ $this->assertDoesNotMatchRegularExpression('#.+([+/=]).+#', $token, 'is URI safe');
}
/**
diff --git a/src/Symfony/Component/Security/Guard/.gitattributes b/src/Symfony/Component/Security/Guard/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Security/Guard/.gitattributes
+++ b/src/Symfony/Component/Security/Guard/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Security/Guard/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Security/Guard/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Security/Guard/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Security/Guard/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Security/Guard/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Security/Guard/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php
index 4f39ad61f6f3a..3e56c7b885717 100644
--- a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php
+++ b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php
@@ -159,12 +159,11 @@ public function testSessionStrategyIsNotCalledWhenStateless()
public function testSessionIsNotInstantiatedOnStatelessFirewall()
{
- $sessionFactory = $this->getMockBuilder(\stdClass::class)
- ->addMethods(['__invoke'])
- ->getMock();
+ $this->expectNotToPerformAssertions();
- $sessionFactory->expects($this->never())
- ->method('__invoke');
+ $sessionFactory = static function (): void {
+ throw new \LogicException('This should not be called');
+ };
$this->request->setSessionFactory($sessionFactory);
diff --git a/src/Symfony/Component/Security/Http/.gitattributes b/src/Symfony/Component/Security/Http/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Security/Http/.gitattributes
+++ b/src/Symfony/Component/Security/Http/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Security/Http/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Security/Http/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Security/Http/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Security/Http/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Security/Http/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Security/Http/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php b/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php
index 8cc200bd99517..4e8ca62a2f036 100644
--- a/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php
+++ b/src/Symfony/Component/Security/Http/Tests/EventListener/PasswordMigratingListenerTest.php
@@ -108,7 +108,7 @@ public function testUnsupportedPassport()
public function testUpgradeWithUpgrader()
{
- $passwordUpgrader = $this->getMockForAbstractClass(TestMigratingUserProvider::class);
+ $passwordUpgrader = $this->createMock(TestMigratingUserProvider::class);
$passwordUpgrader->expects($this->once())
->method('upgradePassword')
->with($this->user, 'new-hash')
@@ -120,7 +120,7 @@ public function testUpgradeWithUpgrader()
public function testUpgradeWithoutUpgrader()
{
- $userLoader = $this->getMockForAbstractClass(TestMigratingUserProvider::class);
+ $userLoader = $this->createMock(TestMigratingUserProvider::class);
$userLoader->expects($this->any())->method('loadUserByIdentifier')->willReturn($this->user);
$userLoader->expects($this->exactly(2))
diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php
index 673ae997061d5..c32bd7181f3f8 100644
--- a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php
+++ b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php
@@ -56,11 +56,15 @@ public function testHandleWithValidValues()
->willReturn($token)
;
- $listener = $this->getMockForAbstractClass(AbstractPreAuthenticatedListener::class, [
- $tokenStorage,
- $authenticationManager,
- 'TheProviderKey',
- ]);
+ $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class)
+ ->setConstructorArgs([
+ $tokenStorage,
+ $authenticationManager,
+ 'TheProviderKey',
+ ])
+ ->onlyMethods(['getPreAuthenticatedData'])
+ ->getMock();
+
$listener
->expects($this->once())
->method('getPreAuthenticatedData')
@@ -95,12 +99,15 @@ public function testHandleWhenAuthenticationFails()
->willThrowException($exception)
;
- $listener = $this->getMockForAbstractClass(
- AbstractPreAuthenticatedListener::class, [
- $tokenStorage,
- $authenticationManager,
- 'TheProviderKey',
- ]);
+ $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class)
+ ->setConstructorArgs([
+ $tokenStorage,
+ $authenticationManager,
+ 'TheProviderKey',
+ ])
+ ->onlyMethods(['getPreAuthenticatedData'])
+ ->getMock();
+
$listener
->expects($this->once())
->method('getPreAuthenticatedData')
@@ -137,12 +144,15 @@ public function testHandleWhenAuthenticationFailsWithDifferentToken()
->willThrowException($exception)
;
- $listener = $this->getMockForAbstractClass(
- AbstractPreAuthenticatedListener::class, [
- $tokenStorage,
- $authenticationManager,
- 'TheProviderKey',
- ]);
+ $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class)
+ ->setConstructorArgs([
+ $tokenStorage,
+ $authenticationManager,
+ 'TheProviderKey',
+ ])
+ ->onlyMethods(['getPreAuthenticatedData'])
+ ->getMock();
+
$listener
->expects($this->once())
->method('getPreAuthenticatedData')
@@ -174,12 +184,15 @@ public function testHandleWithASimilarAuthenticatedToken()
->method('authenticate')
;
- $listener = $this->getMockForAbstractClass(
- AbstractPreAuthenticatedListener::class, [
- $tokenStorage,
- $authenticationManager,
- 'TheProviderKey',
- ]);
+ $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class)
+ ->setConstructorArgs([
+ $tokenStorage,
+ $authenticationManager,
+ 'TheProviderKey',
+ ])
+ ->onlyMethods(['getPreAuthenticatedData'])
+ ->getMock();
+
$listener
->expects($this->once())
->method('getPreAuthenticatedData')
@@ -217,12 +230,15 @@ public function testHandleWithAnInvalidSimilarToken()
->willThrowException($exception)
;
- $listener = $this->getMockForAbstractClass(
- AbstractPreAuthenticatedListener::class, [
- $tokenStorage,
- $authenticationManager,
- 'TheProviderKey',
- ]);
+ $listener = $this->getMockBuilder(AbstractPreAuthenticatedListener::class)
+ ->setConstructorArgs([
+ $tokenStorage,
+ $authenticationManager,
+ 'TheProviderKey',
+ ])
+ ->onlyMethods(['getPreAuthenticatedData'])
+ ->getMock();
+
$listener
->expects($this->once())
->method('getPreAuthenticatedData')
diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php
index 4d748592aad5f..5389e54ac690f 100644
--- a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php
+++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php
@@ -366,8 +366,11 @@ public function testWithPreviousNotStartedSession()
public function testSessionIsNotReported()
{
- $usageReporter = $this->getMockBuilder(\stdClass::class)->addMethods(['__invoke'])->getMock();
- $usageReporter->expects($this->never())->method('__invoke');
+ $this->expectNotToPerformAssertions();
+
+ $usageReporter = static function (): void {
+ throw new \LogicException('This should not be called');
+ };
$session = new Session(new MockArraySessionStorage(), null, null, $usageReporter);
diff --git a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php
index 37e4d753da521..825ef808317fa 100644
--- a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php
+++ b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php
@@ -298,9 +298,12 @@ protected function getService($userProvider = null, $options = [], $logger = nul
$userProvider = $this->getProvider();
}
- return $this->getMockForAbstractClass(AbstractRememberMeServices::class, [
- [$userProvider], 'foosecret', 'fookey', $options, $logger,
- ]);
+ return $this->getMockBuilder(AbstractRememberMeServices::class)
+ ->setConstructorArgs([
+ [$userProvider], 'foosecret', 'fookey', $options, $logger,
+ ])
+ ->onlyMethods(['processAutoLoginCookie', 'onLoginSuccess'])
+ ->getMock();
}
protected function getProvider()
diff --git a/src/Symfony/Component/Semaphore/.gitattributes b/src/Symfony/Component/Semaphore/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Semaphore/.gitattributes
+++ b/src/Symfony/Component/Semaphore/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Semaphore/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Semaphore/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Semaphore/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Semaphore/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Semaphore/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Semaphore/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Semaphore/composer.json b/src/Symfony/Component/Semaphore/composer.json
index cbbd11c7ffcb4..3927cb71d964d 100644
--- a/src/Symfony/Component/Semaphore/composer.json
+++ b/src/Symfony/Component/Semaphore/composer.json
@@ -24,7 +24,7 @@
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "predis/predis": "~1.0"
+ "predis/predis": "^1.1|^2.0"
},
"autoload": {
"psr-4": { "Symfony\\Component\\Semaphore\\": "" },
diff --git a/src/Symfony/Component/Serializer/.gitattributes b/src/Symfony/Component/Serializer/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Serializer/.gitattributes
+++ b/src/Symfony/Component/Serializer/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Serializer/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Serializer/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Serializer/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Serializer/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Serializer/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Serializer/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php
index 55f78b1d0e013..a2d4df909dce8 100644
--- a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php
+++ b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php
@@ -181,18 +181,24 @@ public function decode(string $data, string $format, array $context = [])
$depth = $headerCount[$i];
$arr = &$item;
for ($j = 0; $j < $depth; ++$j) {
+ $headerName = $headers[$i][$j];
+
+ if ('' === $headerName) {
+ $headerName = $i;
+ }
+
// Handle nested arrays
if ($j === ($depth - 1)) {
- $arr[$headers[$i][$j]] = $cols[$i];
+ $arr[$headerName] = $cols[$i];
continue;
}
- if (!isset($arr[$headers[$i][$j]])) {
- $arr[$headers[$i][$j]] = [];
+ if (!isset($arr[$headerName])) {
+ $arr[$headerName] = [];
}
- $arr = &$arr[$headers[$i][$j]];
+ $arr = &$arr[$headerName];
}
}
diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php
index 2192f8ac23c97..256be49ebca00 100644
--- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php
+++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php
@@ -418,7 +418,7 @@ protected function instantiateObject(array &$data, string $class, array &$contex
$exception = NotNormalizableValueException::createForUnexpectedDataType(
sprintf('Failed to create object because the class misses the "%s" property.', $constructorParameter->name),
- $data,
+ null,
[$constructorParameterType],
$context['deserialization_path'],
true
diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
index 9aaac706f2133..619500828d506 100644
--- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
+++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php
@@ -107,7 +107,7 @@ private function isSetMethod(\ReflectionMethod $method): bool
{
return !$method->isStatic()
&& (\PHP_VERSION_ID < 80000 || !$method->getAttributes(Ignore::class))
- && 1 === $method->getNumberOfRequiredParameters()
+ && 0 < $method->getNumberOfParameters()
&& str_starts_with($method->name, 'set');
}
diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
index a1ab11177482e..6a5413f69d317 100644
--- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
+++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php
@@ -36,6 +36,7 @@ class ObjectNormalizer extends AbstractObjectNormalizer
protected $propertyAccessor;
protected $propertyInfoExtractor;
+ private $writeInfoExtractor;
private $objectClassResolver;
@@ -54,6 +55,7 @@ public function __construct(?ClassMetadataFactoryInterface $classMetadataFactory
};
$this->propertyInfoExtractor = $propertyInfoExtractor ?: new ReflectionExtractor();
+ $this->writeInfoExtractor = new ReflectionExtractor();
}
/**
@@ -195,8 +197,15 @@ protected function isAllowedAttribute($classOrObject, string $attribute, ?string
return $this->propertyInfoExtractor->isReadable($class, $attribute) || $this->hasAttributeAccessorMethod($class, $attribute);
}
- return $this->propertyInfoExtractor->isWritable($class, $attribute)
- || ($writeInfo = $this->propertyInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType();
+ if ($this->propertyInfoExtractor->isWritable($class, $attribute)) {
+ return true;
+ }
+
+ if (($writeInfo = $this->writeInfoExtractor->getWriteInfo($class, $attribute)) && PropertyWriteInfo::TYPE_NONE !== $writeInfo->getType()) {
+ return true;
+ }
+
+ return false;
}
private function hasAttributeAccessorMethod(string $class, string $attribute): bool
diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php
index 06cf6a0617d86..9b1bbfb281672 100644
--- a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php
@@ -218,7 +218,13 @@ public function testDecodeEmptyData()
{
$data = $this->encoder->decode("\n\n", 'csv');
- $this->assertSame([['' => null]], $data);
+ $this->assertSame([[0 => null]], $data);
+ }
+
+ public function testMultipleEmptyHeaderNamesWithSeparator()
+ {
+ $this->assertSame([['', [1 => '']]], $this->encoder->decode(',.
+,', 'csv'));
}
public function testEncodeVariableStructure()
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
index 2ca7d79fef075..a6477e97ad331 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
@@ -172,10 +172,10 @@ private function getDenormalizerForDummyCollection()
{
$extractor = $this->createMock(PhpDocExtractor::class);
$extractor->method('getTypes')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
[new Type('array', false, null, true, new Type('int'), new Type('object', false, DummyChild::class))],
null
- ));
+ );
$denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor);
$arrayDenormalizer = new ArrayDenormalizerDummy();
@@ -227,10 +227,10 @@ private function getDenormalizerForStringCollection()
{
$extractor = $this->createMock(PhpDocExtractor::class);
$extractor->method('getTypes')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
[new Type('array', false, null, true, new Type('int'), new Type('string'))],
null
- ));
+ );
$denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor);
$arrayDenormalizer = new ArrayDenormalizerDummy();
@@ -417,7 +417,7 @@ private function getDenormalizerForObjectWithBasicProperties()
{
$extractor = $this->createMock(PhpDocExtractor::class);
$extractor->method('getTypes')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
[new Type('bool')],
[new Type('bool')],
[new Type('bool')],
@@ -430,7 +430,7 @@ private function getDenormalizerForObjectWithBasicProperties()
[new Type('float')],
[new Type('float')],
[new Type('float')]
- ));
+ );
$denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor);
$arrayDenormalizer = new ArrayDenormalizerDummy();
@@ -663,8 +663,7 @@ protected function createChildContext(array $parentContext, string $attribute, ?
public function testDenormalizeXmlScalar()
{
- $normalizer = new class () extends AbstractObjectNormalizer
- {
+ $normalizer = new class() extends AbstractObjectNormalizer {
public function __construct()
{
parent::__construct(null, new MetadataAwareNameConverter(new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()))));
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
index db7b226c3e14b..e573c8c227001 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CallbacksTestTrait.php
@@ -126,13 +126,13 @@ public function testUncallableCallbacks($callbacks)
$normalizer->normalize($obj, null, ['callbacks' => $callbacks]);
}
- public function provideNormalizeCallbacks()
+ public static function provideNormalizeCallbacks()
{
return [
'Change a string' => [
[
'bar' => function ($bar) {
- $this->assertEquals('baz', $bar);
+ static::assertEquals('baz', $bar);
return 'baz';
},
@@ -143,11 +143,11 @@ public function provideNormalizeCallbacks()
'Null an item' => [
[
'bar' => function ($value, $object, $attributeName, $format, $context) {
- $this->assertSame('baz', $value);
- $this->assertInstanceOf(CallbacksObject::class, $object);
- $this->assertSame('bar', $attributeName);
- $this->assertSame('any', $format);
- $this->assertArrayHasKey('circular_reference_limit_counters', $context);
+ static::assertSame('baz', $value);
+ static::assertInstanceOf(CallbacksObject::class, $object);
+ static::assertSame('bar', $attributeName);
+ static::assertSame('any', $format);
+ static::assertArrayHasKey('circular_reference_limit_counters', $context);
},
],
'baz',
@@ -156,7 +156,7 @@ public function provideNormalizeCallbacks()
'Format a date' => [
[
'bar' => function ($bar) {
- $this->assertInstanceOf(\DateTime::class, $bar);
+ static::assertInstanceOf(\DateTime::class, $bar);
return $bar->format('d-m-Y H:i:s');
},
@@ -190,13 +190,13 @@ public function provideNormalizeCallbacks()
];
}
- public function provideDenormalizeCallbacks(): array
+ public static function provideDenormalizeCallbacks(): array
{
return [
'Change a string' => [
[
'bar' => function ($bar) {
- $this->assertEquals('bar', $bar);
+ static::assertEquals('bar', $bar);
return $bar;
},
@@ -207,11 +207,11 @@ public function provideDenormalizeCallbacks(): array
'Null an item' => [
[
'bar' => function ($value, $object, $attributeName, $format, $context) {
- $this->assertSame('baz', $value);
- $this->assertTrue(is_a($object, CallbacksObject::class, true));
- $this->assertSame('bar', $attributeName);
- $this->assertSame('any', $format);
- $this->assertIsArray($context);
+ static::assertSame('baz', $value);
+ static::assertTrue(is_a($object, CallbacksObject::class, true));
+ static::assertSame('bar', $attributeName);
+ static::assertSame('any', $format);
+ static::assertIsArray($context);
},
],
'baz',
@@ -220,7 +220,7 @@ public function provideDenormalizeCallbacks(): array
'Format a date' => [
[
'bar' => function ($bar) {
- $this->assertIsString($bar);
+ static::assertIsString($bar);
return \DateTime::createFromFormat('d-m-Y H:i:s', $bar);
},
@@ -254,13 +254,13 @@ public function provideDenormalizeCallbacks(): array
];
}
- public function providerDenormalizeCallbacksWithTypedProperty(): array
+ public static function providerDenormalizeCallbacksWithTypedProperty(): array
{
return [
'Change a typed string' => [
[
'foo' => function ($foo) {
- $this->assertEquals('foo', $foo);
+ static::assertEquals('foo', $foo);
return $foo;
},
@@ -271,11 +271,11 @@ public function providerDenormalizeCallbacksWithTypedProperty(): array
'Null an typed item' => [
[
'foo' => function ($value, $object, $attributeName, $format, $context) {
- $this->assertSame('fool', $value);
- $this->assertTrue(is_a($object, CallbacksObject::class, true));
- $this->assertSame('foo', $attributeName);
- $this->assertSame('any', $format);
- $this->assertIsArray($context);
+ static::assertSame('fool', $value);
+ static::assertTrue(is_a($object, CallbacksObject::class, true));
+ static::assertSame('foo', $attributeName);
+ static::assertSame('any', $format);
+ static::assertIsArray($context);
},
],
'fool',
@@ -284,7 +284,7 @@ public function providerDenormalizeCallbacksWithTypedProperty(): array
];
}
- public function provideInvalidCallbacks()
+ public static function provideInvalidCallbacks()
{
return [
[['bar' => null]],
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php
index 1996e80e98a38..ffbddf2ab3f29 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/CircularReferenceTestTrait.php
@@ -23,7 +23,7 @@ abstract protected function getNormalizerForCircularReference(array $defaultCont
abstract protected function getSelfReferencingModel();
- public function provideUnableToNormalizeCircularReference(): array
+ public static function provideUnableToNormalizeCircularReference(): array
{
return [
[[], [], 1],
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php
index 596b3404b7e24..02707768fc880 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/Features/SkipUninitializedValuesTestTrait.php
@@ -44,7 +44,7 @@ public function testSkipUninitializedValues(array $context)
$this->assertSame('value', $objectToPopulate->getUninitialized());
}
- public function skipUninitializedValuesFlagProvider(): iterable
+ public static function skipUninitializedValuesFlagProvider(): iterable
{
yield 'passed manually' => [['skip_uninitialized_values' => true, 'groups' => ['foo']]];
yield 'using default context value' => [['groups' => ['foo']]];
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
index e7c23cf58a574..424dd215e7952 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
@@ -538,6 +538,18 @@ public function testSupportsAndDenormalizeWithOnlyParentSetter()
$obj = $this->normalizer->denormalize(['foo' => 'foo'], GetSetDummyChild::class);
$this->assertSame('foo', $obj->getFoo());
}
+
+ /**
+ * @testWith [{"foo":"foo"}, "getFoo", "foo"]
+ * [{"bar":"bar"}, "getBar", "bar"]
+ */
+ public function testSupportsAndDenormalizeWithOptionalSetterArgument(array $data, string $method, string $expected)
+ {
+ $this->assertTrue($this->normalizer->supportsDenormalization($data, GetSetDummyWithOptionalAndMultipleSetterArgs::class));
+
+ $obj = $this->normalizer->denormalize($data, GetSetDummyWithOptionalAndMultipleSetterArgs::class);
+ $this->assertSame($expected, $obj->$method());
+ }
}
class GetSetDummy
@@ -861,3 +873,29 @@ public function setFoo($foo)
$this->foo = $foo;
}
}
+
+class GetSetDummyWithOptionalAndMultipleSetterArgs
+{
+ private $foo;
+ private $bar;
+
+ public function getFoo()
+ {
+ return $this->foo;
+ }
+
+ public function setFoo($foo = null)
+ {
+ $this->foo = $foo;
+ }
+
+ public function getBar()
+ {
+ return $this->bar;
+ }
+
+ public function setBar($bar = null, $other = true)
+ {
+ $this->bar = $bar;
+ }
+}
diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
index 830817b8b673b..5f88844974cd9 100644
--- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
+++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php
@@ -274,6 +274,22 @@ public function testConstructorWithObjectDenormalize()
$this->assertEquals('bar', $obj->bar);
}
+ public function testConstructorWithObjectDenormalizeUsingPropertyInfoExtractor()
+ {
+ $serializer = $this->createMock(ObjectSerializerNormalizer::class);
+ $normalizer = new ObjectNormalizer(null, null, null, null, null, null, [], new PropertyInfoExtractor());
+ $normalizer->setSerializer($serializer);
+
+ $data = new \stdClass();
+ $data->foo = 'foo';
+ $data->bar = 'bar';
+ $data->baz = true;
+ $data->fooBar = 'foobar';
+ $obj = $normalizer->denormalize($data, ObjectConstructorDummy::class, 'any');
+ $this->assertEquals('foo', $obj->getFoo());
+ $this->assertEquals('bar', $obj->bar);
+ }
+
public function testConstructorWithObjectTypeHintDenormalize()
{
$data = [
diff --git a/src/Symfony/Component/Serializer/Tests/SerializerTest.php b/src/Symfony/Component/Serializer/Tests/SerializerTest.php
index 1fa299682dd3f..639d14e0d6664 100644
--- a/src/Symfony/Component/Serializer/Tests/SerializerTest.php
+++ b/src/Symfony/Component/Serializer/Tests/SerializerTest.php
@@ -1045,7 +1045,7 @@ public function testCollectDenormalizationErrors(?ClassMetadataFactory $classMet
'message' => 'The type of the "string" attribute for class "Symfony\Component\Serializer\Tests\Fixtures\Php74Full" must be one of "string" ("null" given).',
],
[
- 'currentType' => 'array',
+ 'currentType' => 'null',
'expectedTypes' => [
'unknown',
],
@@ -1306,7 +1306,7 @@ public function testCollectDenormalizationErrorsWithConstructor(?ClassMetadataFa
'message' => 'The type of the "bool" attribute for class "Symfony\\Component\\Serializer\\Tests\\Fixtures\\Php80WithPromotedTypedConstructor" must be one of "bool" ("string" given).',
],
[
- 'currentType' => 'array',
+ 'currentType' => 'null',
'expectedTypes' => [
'string',
],
@@ -1315,7 +1315,7 @@ public function testCollectDenormalizationErrorsWithConstructor(?ClassMetadataFa
'message' => 'Failed to create object because the class misses the "string" property.',
],
[
- 'currentType' => 'array',
+ 'currentType' => 'null',
'expectedTypes' => [
'int',
],
@@ -1420,7 +1420,7 @@ public function testCollectDenormalizationErrorsWithEnumConstructor()
$expected = [
[
- 'currentType' => 'array',
+ 'currentType' => 'null',
'useMessageForUser' => true,
'message' => 'Failed to create object because the class misses the "get" property.',
],
@@ -1546,7 +1546,7 @@ public function testPartialDenormalizationWithMissingConstructorTypes()
$expected = [
[
- 'currentType' => 'array',
+ 'currentType' => 'null',
'expectedTypes' => [
'string',
],
diff --git a/src/Symfony/Component/Stopwatch/.gitattributes b/src/Symfony/Component/Stopwatch/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Stopwatch/.gitattributes
+++ b/src/Symfony/Component/Stopwatch/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Stopwatch/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Stopwatch/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Stopwatch/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Stopwatch/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Stopwatch/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Stopwatch/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/String/.gitattributes b/src/Symfony/Component/String/.gitattributes
index 166549d614199..0f57d864c994d 100644
--- a/src/Symfony/Component/String/.gitattributes
+++ b/src/Symfony/Component/String/.gitattributes
@@ -2,4 +2,5 @@
/Resources/WcswidthDataGenerator.php export-ignore
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/String/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/String/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/String/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/String/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/String/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/String/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/String/AbstractUnicodeString.php b/src/Symfony/Component/String/AbstractUnicodeString.php
index 52123f507733b..239f234239fb8 100644
--- a/src/Symfony/Component/String/AbstractUnicodeString.php
+++ b/src/Symfony/Component/String/AbstractUnicodeString.php
@@ -195,7 +195,7 @@ public function folded(bool $compat = true): parent
if (!$compat || \PHP_VERSION_ID < 70300 || !\defined('Normalizer::NFKC_CF')) {
$str->string = normalizer_normalize($str->string, $compat ? \Normalizer::NFKC : \Normalizer::NFC);
- $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $this->string), 'UTF-8');
+ $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $str->string), 'UTF-8');
} else {
$str->string = normalizer_normalize($str->string, \Normalizer::NFKC_CF);
}
diff --git a/src/Symfony/Component/String/Inflector/EnglishInflector.php b/src/Symfony/Component/String/Inflector/EnglishInflector.php
index 60eace3c9b283..d9eff19b9a950 100644
--- a/src/Symfony/Component/String/Inflector/EnglishInflector.php
+++ b/src/Symfony/Component/String/Inflector/EnglishInflector.php
@@ -238,6 +238,9 @@ final class EnglishInflector implements InflectorInterface
// teeth (tooth)
['htoot', 5, true, true, 'teeth'],
+ // albums (album)
+ ['mubla', 5, true, true, 'albums'],
+
// bacteria (bacterium), criteria (criterion), phenomena (phenomenon)
['mu', 2, true, true, 'a'],
diff --git a/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php b/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php
index 49e44f8cf1bac..cddfe866c89b1 100644
--- a/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php
+++ b/src/Symfony/Component/String/Tests/AbstractUnicodeTestCase.php
@@ -470,10 +470,10 @@ public static function provideBeforeAfterLastIgnoreCase(): array
);
}
- public static function provideToFoldedCase(): array
+ public static function provideFolded(): array
{
return array_merge(
- parent::provideToFoldedCase(),
+ parent::provideFolded(),
[
['déjà', 'DéjÀ'],
['σσσ', 'Σσς'],
diff --git a/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php b/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php
index 51849fd42540a..ba8d6d797c4d0 100644
--- a/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php
+++ b/src/Symfony/Component/String/Tests/Inflector/EnglishInflectorTest.php
@@ -24,6 +24,7 @@ public static function singularizeProvider()
['accesses', 'access'],
['addresses', 'address'],
['agendas', 'agenda'],
+ ['albums', 'album'],
['alumnae', 'alumna'],
['alumni', 'alumnus'],
['analyses', ['analys', 'analyse', 'analysis']],
@@ -179,6 +180,7 @@ public static function pluralizeProvider()
['address', 'addresses'],
['agenda', 'agendas'],
['aircraft', 'aircraft'],
+ ['album', 'albums'],
['alumnus', 'alumni'],
['analysis', 'analyses'],
['antenna', 'antennas'], // antennae
diff --git a/src/Symfony/Component/Templating/.gitattributes b/src/Symfony/Component/Templating/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Templating/.gitattributes
+++ b/src/Symfony/Component/Templating/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Templating/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Templating/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Templating/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Templating/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Templating/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Templating/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php b/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php
index c3544f9156bd1..ad5322f34fd69 100644
--- a/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php
+++ b/src/Symfony/Component/Templating/Tests/DelegatingEngineTest.php
@@ -133,7 +133,7 @@ private function getEngineMock($template, $supports)
private function getStreamingEngineMock($template, $supports)
{
- $engine = $this->getMockForAbstractClass(MyStreamingEngine::class);
+ $engine = $this->createMock(MyStreamingEngine::class);
$engine->expects($this->once())
->method('supports')
diff --git a/src/Symfony/Component/Translation/.gitattributes b/src/Symfony/Component/Translation/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Translation/.gitattributes
+++ b/src/Symfony/Component/Translation/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Translation/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Translation/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Translation/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Translation/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Translation/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Translation/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Translation/Bridge/Crowdin/.gitattributes b/src/Symfony/Component/Translation/Bridge/Crowdin/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Translation/Bridge/Crowdin/.gitattributes
+++ b/src/Symfony/Component/Translation/Bridge/Crowdin/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Translation/Bridge/Crowdin/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Translation/Bridge/Crowdin/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Crowdin/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Translation/Bridge/Crowdin/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Translation/Bridge/Crowdin/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Crowdin/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Translation/Bridge/Loco/.gitattributes b/src/Symfony/Component/Translation/Bridge/Loco/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Translation/Bridge/Loco/.gitattributes
+++ b/src/Symfony/Component/Translation/Bridge/Loco/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Translation/Bridge/Loco/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Translation/Bridge/Loco/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Loco/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Translation/Bridge/Loco/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Translation/Bridge/Loco/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Loco/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/.gitattributes b/src/Symfony/Component/Translation/Bridge/Lokalise/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Translation/Bridge/Lokalise/.gitattributes
+++ b/src/Symfony/Component/Translation/Bridge/Lokalise/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Translation/Bridge/Lokalise/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Lokalise/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Translation/Bridge/Lokalise/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Translation/Bridge/Lokalise/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Translation/Bridge/Lokalise/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Uid/.gitattributes b/src/Symfony/Component/Uid/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Uid/.gitattributes
+++ b/src/Symfony/Component/Uid/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Uid/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Uid/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Uid/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Uid/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Uid/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Uid/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Validator/.gitattributes b/src/Symfony/Component/Validator/.gitattributes
index b9f8f3944ce62..c34694db5f725 100644
--- a/src/Symfony/Component/Validator/.gitattributes
+++ b/src/Symfony/Component/Validator/.gitattributes
@@ -1,4 +1,5 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
/Resources/bin/sync-iban-formats.php export-ignore
-/.git* export-ignore
diff --git a/src/Symfony/Component/Validator/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Validator/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Validator/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Validator/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Validator/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Validator/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Validator/Constraints/IbanValidator.php b/src/Symfony/Component/Validator/Constraints/IbanValidator.php
index 173cb6678dc0e..423e0099d94c5 100644
--- a/src/Symfony/Component/Validator/Constraints/IbanValidator.php
+++ b/src/Symfony/Component/Validator/Constraints/IbanValidator.php
@@ -228,6 +228,18 @@ public function validate($value, Constraint $constraint)
return;
}
+ // Check digits should always between 2 and 98
+ // A ECBS document (https://www.ecbs.org/Download/EBS204_V3.PDF) replicates part of the ISO/IEC 7064:2003 standard as a method for generating check digits in the range 02 to 98.
+ $checkDigits = (int) substr($canonicalized, 2, 2);
+ if ($checkDigits < 2 || $checkDigits > 98) {
+ $this->context->buildViolation($constraint->message)
+ ->setParameter('{{ value }}', $this->formatValue($value))
+ ->setCode(Iban::CHECKSUM_FAILED_ERROR)
+ ->addViolation();
+
+ return;
+ }
+
// Move the first four characters to the end
// e.g. CH93 0076 2011 6238 5295 7
// -> 0076 2011 6238 5295 7 CH93
diff --git a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php
index a7209d5377d85..957000274b2f3 100644
--- a/src/Symfony/Component/Validator/Mapping/ClassMetadata.php
+++ b/src/Symfony/Component/Validator/Mapping/ClassMetadata.php
@@ -210,7 +210,7 @@ public function addConstraint(Constraint $constraint)
$this->cascadingStrategy = CascadingStrategy::CASCADE;
foreach ($this->getReflectionClass()->getProperties() as $property) {
- if ($property->hasType() && (('array' === $type = $property->getType()->getName()) || class_exists($type))) {
+ if ($this->canCascade($property->getType())) {
$this->addPropertyConstraint($property->getName(), new Valid());
}
}
@@ -511,4 +511,33 @@ private function checkConstraint(Constraint $constraint)
}
}
}
+
+ private function canCascade(?\ReflectionType $type = null): bool
+ {
+ if (null === $type) {
+ return false;
+ }
+
+ if ($type instanceof \ReflectionIntersectionType) {
+ foreach ($type->getTypes() as $nestedType) {
+ if ($this->canCascade($nestedType)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ if ($type instanceof \ReflectionUnionType) {
+ foreach ($type->getTypes() as $nestedType) {
+ if (!$this->canCascade($nestedType)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return $type instanceof \ReflectionNamedType && (\in_array($type->getName(), ['array', 'null'], true) || class_exists($type->getName()));
+ }
}
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf
index c977df4a3e186..9ec98ebbd47c4 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.ja.xlf
@@ -136,7 +136,7 @@
This value is not a valid IP address.
- この値は有効なIPアドレスではありません。
+ 有効なIPアドレスではありません。This value is not a valid language.
@@ -192,7 +192,7 @@
No temporary folder was configured in php.ini, or the configured folder does not exist.
- php.iniに一時フォルダが設定されていないか、設定されたフォルダが存在しません。
+ php.iniに一時フォルダが設定されていないか、設定されたフォルダが存在しません。Cannot write temporary file to disk.
@@ -224,7 +224,7 @@
This value is not a valid International Bank Account Number (IBAN).
- この値は有効な国際銀行口座番号(IBAN)ではありません。
+ 有効な国際銀行勘定番号(IBAN)ではありません。This value is not a valid ISBN-10.
@@ -312,7 +312,7 @@
This value is not a valid Business Identifier Code (BIC).
- この値は有効なビジネス識別コード(BIC)ではありません。
+ 有効なSWIFTコードではありません。Error
@@ -320,7 +320,7 @@
This value is not a valid UUID.
- この値は有効なUUIDではありません。
+ 有効なUUIDではありません。This value should be a multiple of {{ compared_value }}.
@@ -436,11 +436,11 @@
This value is not a valid MAC address.
- この値は有効なMACアドレスではありません。
+ 有効なMACアドレスではありません。This URL is missing a top-level domain.
- このURLはトップレベルドメインがありません。
+ このURLはトップレベルドメインがありません。
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf
index 7596799d0d904..aa4a3e2151f18 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.nl.xlf
@@ -440,7 +440,7 @@
This URL is missing a top-level domain.
- Deze URL mist een top-level domein.
+ Deze URL mist een top-level domein.
diff --git a/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php b/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php
index 89f8d0008e75a..0e89e78b1a039 100644
--- a/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php
+++ b/src/Symfony/Component/Validator/Test/ConstraintValidatorTestCase.php
@@ -80,8 +80,10 @@ protected function setUp(): void
$this->validator = $this->createValidator();
$this->validator->initialize($this->context);
- $this->defaultLocale = \Locale::getDefault();
- \Locale::setDefault('en');
+ if (class_exists(\Locale::class)) {
+ $this->defaultLocale = \Locale::getDefault();
+ \Locale::setDefault('en');
+ }
$this->expectedViolations = [];
$this->call = 0;
@@ -93,7 +95,9 @@ protected function tearDown(): void
{
$this->restoreDefaultTimezone();
- \Locale::setDefault($this->defaultLocale);
+ if (class_exists(\Locale::class)) {
+ \Locale::setDefault($this->defaultLocale);
+ }
}
protected function setDefaultTimezone(?string $defaultTimezone)
diff --git a/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php
index 70994f509170c..566430079d6b1 100644
--- a/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php
+++ b/src/Symfony/Component/Validator/Tests/Constraints/IbanValidatorTest.php
@@ -401,6 +401,12 @@ public static function getIbansWithValidFormatButIncorrectChecksum()
['UA213223130000026007233566002'], // Ukraine
['AE260211000000230064017'], // United Arab Emirates
['VA59001123000012345671'], // Vatican City State
+
+ // Checksum digits not between 02 and 98
+ ['FO00 5432 0388 8999 44'], // Faroe Islands
+ ['NL01INGB0001393698'], // Netherlands
+ ['NL01RABO0331811235'], // Netherlands
+ ['RU99 0445 2560 0407 0281 0412 3456 7890 1'], // Russia
];
}
diff --git a/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php
index d6d6e80699ed9..2c657a3766a7e 100644
--- a/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php
+++ b/src/Symfony/Component/Validator/Tests/Constraints/UuidValidatorTest.php
@@ -45,7 +45,7 @@ public function testEmptyStringIsValid()
public function testExpectsUuidConstraintCompatibleType()
{
$this->expectException(UnexpectedTypeException::class);
- $constraint = $this->getMockForAbstractClass(Constraint::class);
+ $constraint = $this->createStub(Constraint::class);
$this->validator->validate('216fff40-98d9-11e3-a5e2-0800200c9a66', $constraint);
}
diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php
new file mode 100644
index 0000000000000..9478f647c4b5d
--- /dev/null
+++ b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityIntersection.php
@@ -0,0 +1,17 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Tests\Fixtures;
+
+class CascadingEntityIntersection
+{
+ public CascadedChild&\stdClass $classes;
+}
diff --git a/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php
new file mode 100644
index 0000000000000..03c808fca330f
--- /dev/null
+++ b/src/Symfony/Component/Validator/Tests/Fixtures/CascadingEntityUnion.php
@@ -0,0 +1,25 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Tests\Fixtures;
+
+class CascadingEntityUnion
+{
+ public CascadedChild|\stdClass $classes;
+ public CascadedChild|array $classAndArray;
+ public CascadedChild|null $classAndNull;
+ public array|null $arrayAndNull;
+ public CascadedChild|array|null $classAndArrayAndNull;
+ public int|string $scalars;
+ public int|null $scalarAndNull;
+ public CascadedChild|int $classAndScalar;
+ public array|int $arrayAndScalar;
+}
diff --git a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php
index a9f942319af83..4e0bca845a2cb 100644
--- a/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php
+++ b/src/Symfony/Component/Validator/Tests/Mapping/ClassMetadataTest.php
@@ -25,6 +25,8 @@
use Symfony\Component\Validator\Tests\Fixtures\Annotation\EntityParent;
use Symfony\Component\Validator\Tests\Fixtures\Annotation\GroupSequenceProviderEntity;
use Symfony\Component\Validator\Tests\Fixtures\CascadingEntity;
+use Symfony\Component\Validator\Tests\Fixtures\CascadingEntityIntersection;
+use Symfony\Component\Validator\Tests\Fixtures\CascadingEntityUnion;
use Symfony\Component\Validator\Tests\Fixtures\ClassConstraint;
use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
use Symfony\Component\Validator\Tests\Fixtures\ConstraintB;
@@ -361,6 +363,40 @@ public function testCascadeConstraint()
'children',
], $metadata->getConstrainedProperties());
}
+
+ /**
+ * @requires PHP 8.0
+ */
+ public function testCascadeConstraintWithUnionTypeProperties()
+ {
+ $metadata = new ClassMetadata(CascadingEntityUnion::class);
+ $metadata->addConstraint(new Cascade());
+
+ $this->assertSame(CascadingStrategy::CASCADE, $metadata->getCascadingStrategy());
+ $this->assertCount(5, $metadata->properties);
+ $this->assertSame([
+ 'classes',
+ 'classAndArray',
+ 'classAndNull',
+ 'arrayAndNull',
+ 'classAndArrayAndNull',
+ ], $metadata->getConstrainedProperties());
+ }
+
+ /**
+ * @requires PHP 8.1
+ */
+ public function testCascadeConstraintWithIntersectionTypeProperties()
+ {
+ $metadata = new ClassMetadata(CascadingEntityIntersection::class);
+ $metadata->addConstraint(new Cascade());
+
+ $this->assertSame(CascadingStrategy::CASCADE, $metadata->getCascadingStrategy());
+ $this->assertCount(1, $metadata->properties);
+ $this->assertSame([
+ 'classes',
+ ], $metadata->getConstrainedProperties());
+ }
}
class ClassCompositeConstraint extends Composite
diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
index ea5e947be880b..0c2e2a9534de1 100644
--- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
+++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/FilesLoaderTest.php
@@ -36,11 +36,11 @@ public function testCallsActualFileLoaderForMetadata()
public function getFilesLoader(LoaderInterface $loader)
{
- return $this->getMockForAbstractClass(FilesLoader::class, [[
+ return new class([
__DIR__.'/constraint-mapping.xml',
__DIR__.'/constraint-mapping.yaml',
__DIR__.'/constraint-mapping.test',
__DIR__.'/constraint-mapping.txt',
- ], $loader]);
+ ], $loader) extends FilesLoader {};
}
}
diff --git a/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php b/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php
index ee0f5fb97e60b..ab43246fe7f65 100644
--- a/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php
+++ b/src/Symfony/Component/Validator/Tests/Mapping/Loader/PropertyInfoLoaderTest.php
@@ -54,9 +54,10 @@ public function testLoadClassMetadata()
'noAutoMapping',
])
;
+
$propertyInfoStub
->method('getTypes')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
[new Type(Type::BUILTIN_TYPE_STRING, true)],
[new Type(Type::BUILTIN_TYPE_STRING)],
[new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_BOOL)],
@@ -69,11 +70,12 @@ public function testLoadClassMetadata()
[new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true, null, new Type(Type::BUILTIN_TYPE_FLOAT))],
[new Type(Type::BUILTIN_TYPE_STRING)],
[new Type(Type::BUILTIN_TYPE_STRING)]
- ))
+ )
;
+
$propertyInfoStub
->method('isWritable')
- ->will($this->onConsecutiveCalls(
+ ->willReturn(
true,
true,
true,
@@ -86,7 +88,7 @@ public function testLoadClassMetadata()
true,
false,
true
- ))
+ )
;
$propertyInfoLoader = new PropertyInfoLoader($propertyInfoStub, $propertyInfoStub, $propertyInfoStub, '{.*}');
@@ -222,9 +224,10 @@ public function testClassNoAutoMapping()
->method('getProperties')
->willReturn(['string', 'autoMappingExplicitlyEnabled'])
;
+
$propertyInfoStub
->method('getTypes')
- ->willReturnOnConsecutiveCalls(
+ ->willReturn(
[new Type(Type::BUILTIN_TYPE_STRING)],
[new Type(Type::BUILTIN_TYPE_BOOL)]
);
diff --git a/src/Symfony/Component/Validator/composer.json b/src/Symfony/Component/Validator/composer.json
index 5cc9b399f1fb5..19a27b3333a81 100644
--- a/src/Symfony/Component/Validator/composer.json
+++ b/src/Symfony/Component/Validator/composer.json
@@ -72,7 +72,8 @@
"autoload": {
"psr-4": { "Symfony\\Component\\Validator\\": "" },
"exclude-from-classmap": [
- "/Tests/"
+ "/Tests/",
+ "/Resources/bin/"
]
},
"minimum-stability": "dev"
diff --git a/src/Symfony/Component/VarDumper/.gitattributes b/src/Symfony/Component/VarDumper/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/VarDumper/.gitattributes
+++ b/src/Symfony/Component/VarDumper/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/VarDumper/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/VarDumper/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/VarDumper/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/VarDumper/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/VarDumper/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/VarDumper/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php
index 35fd1e8a99b2b..87e5ffcc07858 100644
--- a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php
+++ b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php
@@ -83,13 +83,13 @@ public static function castGenerator(\Generator $c, array $a, Stub $stub, bool $
// Cannot create ReflectionGenerator based on a terminated Generator
try {
$reflectionGenerator = new \ReflectionGenerator($c);
+
+ return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested);
} catch (\Exception $e) {
$a[Caster::PREFIX_VIRTUAL.'closed'] = true;
return $a;
}
-
- return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested);
}
public static function castType(\ReflectionType $c, array $a, Stub $stub, bool $isNested)
diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php
index e57999182ea89..a87fa55c8fa8f 100644
--- a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php
+++ b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php
@@ -500,6 +500,84 @@ class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
);
}
+ /**
+ * @requires PHP < 8.4
+ */
+ public function testGeneratorPriorTo84()
+ {
+ if (\extension_loaded('xdebug')) {
+ $this->markTestSkipped('xdebug is active');
+ }
+
+ $generator = new GeneratorDemo();
+ $generator = $generator->baz();
+
+ $expectedDump = <<<'EODUMP'
+Generator {
+ this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
+ %s: {
+ %sGeneratorDemo.php:14 {
+ Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz()
+ › {
+ › yield from bar();
+ › }
+ }
+%A}
+ closed: false
+}
+EODUMP;
+
+ $this->assertDumpMatchesFormat($expectedDump, $generator);
+
+ foreach ($generator as $v) {
+ break;
+ }
+
+ $expectedDump = <<<'EODUMP'
+array:2 [
+ 0 => ReflectionGenerator {
+ this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
+ %s: {
+ %s%eTests%eFixtures%eGeneratorDemo.php:%d {
+ Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
+%A › yield 1;
+%A }
+ %s%eTests%eFixtures%eGeneratorDemo.php:20 { …}
+ %s%eTests%eFixtures%eGeneratorDemo.php:14 { …}
+%A }
+ closed: false
+ }
+ 1 => Generator {
+ %s: {
+ %s%eTests%eFixtures%eGeneratorDemo.php:%d {
+ Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
+ › yield 1;
+ › }
+ ›
+ }
+%A }
+ closed: false
+ }
+]
+EODUMP;
+
+ $r = new \ReflectionGenerator($generator);
+ $this->assertDumpMatchesFormat($expectedDump, [$r, $r->getExecutingGenerator()]);
+
+ foreach ($generator as $v) {
+ }
+
+ $expectedDump = <<<'EODUMP'
+Generator {
+ closed: true
+}
+EODUMP;
+ $this->assertDumpMatchesFormat($expectedDump, $generator);
+ }
+
+ /**
+ * @requires PHP 8.4
+ */
public function testGenerator()
{
if (\extension_loaded('xdebug')) {
@@ -511,6 +589,7 @@ public function testGenerator()
$expectedDump = <<<'EODUMP'
Generator {
+ function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz"
this: Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo { …}
%s: {
%sGeneratorDemo.php:14 {
@@ -519,6 +598,7 @@ public function testGenerator()
› yield from bar();
› }
}
+ Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo->baz() {}
%A}
closed: false
}
@@ -545,6 +625,7 @@ public function testGenerator()
closed: false
}
1 => Generator {
+ function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo"
%s: {
%s%eTests%eFixtures%eGeneratorDemo.php:%d {
Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::foo()
@@ -566,6 +647,7 @@ public function testGenerator()
$expectedDump = <<<'EODUMP'
Generator {
+ function: "Symfony\Component\VarDumper\Tests\Fixtures\GeneratorDemo::baz"
closed: true
}
EODUMP;
diff --git a/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php b/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php
index 09acf149a877b..156b0a829a888 100644
--- a/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php
+++ b/src/Symfony/Component/VarDumper/Tests/Command/Descriptor/HtmlDescriptorTest.php
@@ -45,7 +45,7 @@ public function testItOutputsStylesAndScriptsOnFirstDescribeCall()
$descriptor->describe($output, new Data([[123]]), ['timestamp' => 1544804268.3668], 1);
- $this->assertStringNotMatchesFormat('%A', $output->fetch(), 'styles & scripts are output only once');
+ $this->assertDoesNotMatchRegularExpression('#(.*)#', $output->fetch(), 'styles & scripts are output only once');
}
/**
diff --git a/src/Symfony/Component/VarExporter/.gitattributes b/src/Symfony/Component/VarExporter/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/VarExporter/.gitattributes
+++ b/src/Symfony/Component/VarExporter/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/VarExporter/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/VarExporter/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/VarExporter/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/VarExporter/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/VarExporter/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/VarExporter/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/WebLink/.gitattributes b/src/Symfony/Component/WebLink/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/WebLink/.gitattributes
+++ b/src/Symfony/Component/WebLink/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/WebLink/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/WebLink/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/WebLink/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/WebLink/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/WebLink/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/WebLink/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Workflow/.gitattributes b/src/Symfony/Component/Workflow/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Workflow/.gitattributes
+++ b/src/Symfony/Component/Workflow/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Workflow/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Workflow/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Workflow/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Workflow/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Workflow/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Workflow/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Component/Yaml/.gitattributes b/src/Symfony/Component/Yaml/.gitattributes
index 14c3c35940427..84c7add058fb5 100644
--- a/src/Symfony/Component/Yaml/.gitattributes
+++ b/src/Symfony/Component/Yaml/.gitattributes
@@ -1,3 +1,4 @@
/Tests export-ignore
/phpunit.xml.dist export-ignore
-/.git* export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Yaml/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Component/Yaml/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Component/Yaml/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Component/Yaml/.github/workflows/check-subtree-split.yml b/src/Symfony/Component/Yaml/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Component/Yaml/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/.gitattributes b/src/Symfony/Contracts/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/Cache/.gitattributes b/src/Symfony/Contracts/Cache/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/Cache/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/Cache/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/Cache/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/Cache/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/Cache/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/Cache/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/Cache/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/Deprecation/.gitattributes b/src/Symfony/Contracts/Deprecation/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/Deprecation/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/Deprecation/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/Deprecation/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/Deprecation/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/Deprecation/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/Deprecation/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/Deprecation/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/EventDispatcher/.gitattributes b/src/Symfony/Contracts/EventDispatcher/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/EventDispatcher/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/EventDispatcher/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/EventDispatcher/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/EventDispatcher/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/EventDispatcher/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/HttpClient/.gitattributes b/src/Symfony/Contracts/HttpClient/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/HttpClient/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/HttpClient/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/HttpClient/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/HttpClient/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/HttpClient/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/HttpClient/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/HttpClient/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/Service/.gitattributes b/src/Symfony/Contracts/Service/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/Service/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/Service/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/Service/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/Service/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/Service/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/Service/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/Service/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }
diff --git a/src/Symfony/Contracts/Translation/.gitattributes b/src/Symfony/Contracts/Translation/.gitattributes
deleted file mode 100644
index 825312826d129..0000000000000
--- a/src/Symfony/Contracts/Translation/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-/.git* export-ignore
diff --git a/src/Symfony/Contracts/Translation/.github/PULL_REQUEST_TEMPLATE.md b/src/Symfony/Contracts/Translation/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 4689c4dad430e..0000000000000
--- a/src/Symfony/Contracts/Translation/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Please do not submit any Pull Requests here. They will be closed.
----
-
-Please submit your PR here instead:
-https://github.com/symfony/symfony
-
-This repository is what we call a "subtree split": a read-only subset of that main repository.
-We're looking forward to your PR there!
diff --git a/src/Symfony/Contracts/Translation/.github/workflows/check-subtree-split.yml b/src/Symfony/Contracts/Translation/.github/workflows/check-subtree-split.yml
deleted file mode 100644
index 16be48bae3113..0000000000000
--- a/src/Symfony/Contracts/Translation/.github/workflows/check-subtree-split.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Check subtree split
-
-on:
- pull_request_target:
-
-jobs:
- close-pull-request:
- runs-on: ubuntu-latest
-
- steps:
- - name: Close pull request
- uses: actions/github-script@v6
- with:
- script: |
- if (context.repo.owner === "symfony") {
- github.rest.issues.createComment({
- owner: "symfony",
- repo: context.repo.repo,
- issue_number: context.issue.number,
- body: `
- Thanks for your Pull Request! We love contributions.
-
- However, you should instead open your PR on the main repository:
- https://github.com/symfony/symfony
-
- This repository is what we call a "subtree split": a read-only subset of that main repository.
- We're looking forward to your PR there!
- `
- });
-
- github.rest.pulls.update({
- owner: "symfony",
- repo: context.repo.repo,
- pull_number: context.issue.number,
- state: "closed"
- });
- }