Problem/Motivation
With #1921558: Convert file_get_mimetype() to use Symfony MimeTypeGuessers, the function file_mimetype_mapping() was removed. The mapping was placed as a protected property of the ExtensionMimeTypeGuesser class, as its main purpose was for the guesser to use it. But there are cases when the mapping, or just the list of MIME types, should be used in itself, outside the context of guessing. For instance, a form in the File entity module should present known MIME types for the user.
Proposed resolution
Move the default mapping to a new service and class, Drupal\Core\File\MimeType\MimeTypeMapper, with getter/setter methods.
Introduce an alterMapping() method which invokes the mimetype alter hook upon service instantiation to allow modules to play with MIME type<->extension mapping.
Change the ExtensionMimeTypeGuesser class to use the new mapper; deprecate its ::setMapping method.
Deprecate the file_mimetype_mapping alter hook.
Add tests.
Add tests.
Remaining tasks
Commit
User interface changes
None
API changes
A new service file.mime_type.mapper.
Beta phase evaluation
| Issue category | Bug because functionality in previous version is now missing |
|---|---|
| Issue priority | Major because it is a small regression. In D7 one could access the mapping out of the context of guessing, and could eg get a list of all known mimetypes . After #1921558: Convert file_get_mimetype() to use Symfony MimeTypeGuessers its impossible without extending the class, because the mapping is a protected property |
| Disruption |
None, a BC layer covers the case of custom/contrib classes extending from ExtensionMimeTypeGuesser.
|
| Comment | File | Size | Author |
|---|---|---|---|
| #164 | 2311679-nr-bot.txt | 90 bytes | needs-review-queue-bot |
Issue fork drupal-2311679
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #1
arla commentedComment #2
arla commentedThis patch moves the mapping from ExtensionMimeTypeGuesser to the new MimeTypeMapper, which is a service, and lets ExtensionMimeTypeGuesser use that mapper.
Comment #3
ParisLiakos commentedthanks for opening the issue
I do not see the reason to have this public getter, just retrieve the mapper from the $this->container
Needs an interface, so that its swappable
Comment #4
arla commentedAdjusted from the feedback in #3.
Comment #5
berdirOne thing that we were discussing was if and how much of this logic should move to the mapper?
Right now, there is just getMapping(). But that's a very arbitrary structure, wouldn't it be nice to have getMimeTypes() too, if you just need those?
And if we go there, would it be useful if the mapper would possibly even have a method like getMimeTypeForExtension($extension)? Then this would be re-usable if you'd just have a extension and not an actual file. Not sure if we should consider that at all or in a separate issue...
Why do we need a setter? If you want to alter it, use the hook, this seems strange.
Comment #6
arla commented2. I'm not sure why setMapping() would be needed, but it is tested in MimeTypeTest. I guess testing the alter hook would be more appropriate, and remove setMapping()?
Comment #7
ParisLiakos commentedtotally agreed with 1.
2. is strange indeed and was there pre-conversion, see also #1921558-17: Convert file_get_mimetype() to use Symfony MimeTypeGuessers.
In other words, the hook will only fire if the default mapping is used: The setter overrides the hook.
I very much support to make the hook fire *always* and get rid of the setter...or the other way around
Comment #8
arla commentedHere the Mapper has also getMimeTypes() and getMimeTypeForExtension(). The test for custom mapping is removed. Is it desirable to add a test for the alter hook?
The alter hook is only run on the first call to getMapping(). Unless the guesser is used before registering all hook implementations, this should not be a problem.
Comment #11
alexpott#2388749: Register symfony's mime guessers if they are supported is related.
Comment #12
mondrake#2388749: Register symfony's mime guessers if they are supported has been committed, and it removed
hook_file_mimetype_mapping_alter().Rerolled patch in #8 (see do-not-test patch), and removed the alter call here too. Interdiff against the reroll.
Would love to see this in as there was no straightforward way in contrib to map extensions to mimetypes before #2388749: Register symfony's mime guessers if they are supported and also hacks like this
now no longer (legitimately I'd say) work.
Comment #13
dave reidWhat is the reasoning for removing the alter hook? This hook has been *very* useful for contrib to easily provide support for new file types when adding them to core would take much longer.
Comment #14
mondrake@dave see #2388749-10: Register symfony's mime guessers if they are supported
Comment #16
mondrakeFixed PHPUnit test failure.
Comment #17
ParisLiakos commentedI dont think we should expose the mapping array, it is implementation details.
Instead lets provide methods.
Also added a method addMapping($mimetype, $extension) which adds/overwrites mappings.
If we agree on it i ll go ahead and write tests
Comment #18
mondrake#17
+1, but then I suggest also to have a method to return supported extensions given a MIME type, that would be possible to be done elsewhere with the mapping array exposed, but not otherwise. Done here.
Great! It's what I was suggesting in #2388749-39: Register symfony's mime guessers if they are supported.
+1 :)
Comment #21
alexpott#2388749: Register symfony's mime guessers if they are supported has been reverted
Comment #22
mondrake#21 new patch coming soon.
Comment #23
mondrakeNew patch - combining parts of #8 and parts of #18. Interdiff against #8.
This keeps new methods introduced by @ParisLiakos in #17 and by me in #18, and keeps (but changed to protected) the getMapping method in #8 which is needed to allow the alter call to
hook_file_mimetype_mapping_alter(). I'd say it would be probably better to change the signature of the hook to pass the MimeTypeMapper object and use addMapping() in hook implementations instead of letting hooks manipulate the array by reference, as pointed out in #17. But I guess that needs discussion.Also added some tests for
MimeTypeMapper::getExtensionsForMimeType()andMimeTypeMapper::addMapping().Comment #24
ParisLiakos commentedlets only call getMapping() once and store it in a local variable instead of doing unnecessary function calls in the same method
Good idea!
Comment #25
mondrake#24 done
Comment #26
ParisLiakos commentedcan we add a comment here? why this is needed
and maybe add a small test case for this method
Maybe those docs should refer to the interface methods ;)
Comment #27
mondrake#26 done.
#26.1 - this is needed to make sure that alter hook is invoked before adding any mapping. Maybe I am overcomplicating, but it could be a case that code outside of the hook implementation add a mapping, then the first time any other method is called the hook would fire and may override that mapping.
Also fixed a couple of doc issues.
Comment #28
ParisLiakos commentedNice, thanks..so i guess all we need now is a beta evaluation template and updating https://www.drupal.org/node/2258015 with alter hook change.
other than that, this is rtbc
Comment #29
mondrake#28 updated change record draft
https://www.drupal.org/node/2258015/revisions/view/8067869/8077401
can anybody take care of the beta eval?
Comment #30
ParisLiakos commentedthank you
I think this is a bug since its a regression
Comment #31
alexpottThere's a weird recursion going on here when the alter hook is fired.
This seems pointless - just return $this for a fluent interface.
This is not quite correct anymore.
Comment #32
mondrakeThanks @alexpott.
#31.1 - different approach here, alter hook is invoked at construction time before any method is called. Not sure it is OK.
#31.2 - done
#31.3 - :)
#31.4 - changed
also changed a small doc issue 'Contains \Drupal...' instead of 'Contains Drupal'
Comment #33
ParisLiakos commentedno, we should avoid doing stuff on the constructor other than injecting dependencis, especially invoking a hook.
which is fine since
is called before the hook is called, so the function will just return $this->mapping, it wont do anything else.
Comment #34
alexpottI agree that doing the alter in the constructor is wrong. The alter should only be fired when necessary but also the recursive call during an alter is also weird. Plus we've lost the ability to remove mappings.
Comment #35
mondrakeWe are indeed facing recursion here, because if we call e.g. getMimeTypeForExtension, this will call getMapping which, on first run, will invoke the hook. Hook implementations then will call e.g. addMapping who in turn will call again getMapping. So here we need measures to avoid endless loops. I made a change here to make things I hope more explicit, starting back from #27. If any idea how to circumvent this, feel free :)
Next - adding removeMapping and removeMimeType, will post a patch soon.
Comment #36
mondrakeAdded
::removeMapping()and::removeMimeType()methods.Comment #37
mondrakeI found an alternative, i.e. using the 'calls' parameter in service definition to execute the alter hook separately from other methods, but not in the constructor (kind of 'setter injection' according to Symfony docs). Sorry, I'm learning here...
Comment #38
alexpott@mondrake that looks like a really nice solution.
Comment #39
mondrake#2260061: Responsive image module does not support sizes/picture polyfill 2.2 just introduced the below
which is OKish, but a workaround. With the patch here this could become
is it something to be added to this issue?
Comment #40
mondrakeBased on @yched's comment in #2426757-5: responsive_image_build_source_attributes() calls mime type guesser over and over, added #39. Also added a strtolower($extension) in
MimeTypeMapper::addMappingto keep consistency with other methods.Comment #43
mondrakeRerolled.
Comment #46
mondrakeAny reviewers?
We were at RTBC back in #30 and @alexpott's feedback in #31 was addressed, see #38 also.
BTW we also have a published change record which is giving this for done, so it would have to be at least set back to draft while this is sorted out.
Comment #47
mondrakelazy: truetag to thefile.mime_type.mapperservice, to match mime type guessing services definitionhook_file_mimetype_mapping_alterString::formattoSafeMarkup::formatinMimeTypeTestComment #48
slashrsm commentedComment #49
dave reidComment #52
mondrakeReroll.
Comment #54
mondrakeAdded/updated the proxy classes.
Comment #56
arla commentedComment #57
mondrakeIMO, this needs decision before RC:
hook_file_mimetype_mapping_alter()signature (passing aMimeTypeMapperInterfaceobject instead of the internal mapping array) will be hard to get in during 8.0 because of BCComment #59
mondrakeRerolled, conficts due to #2534066: Allow selecting the original image when creating a responsive image style, then made the logic in
responsive_image_get_mime_typesimpler to follow, and added comments.Comment #60
mondrakeComment #61
mondrakeThis is a soft blocker for ImageMagick, see #2612590: Allow configuring in the UI the image formats supported by the toolkit. It would allow the ImageMagick toolkit to be configurable in terms of image formats accepted. Now the supported file extensions are hardcoded in
ImagemagickToolkit::getSupportedExtensions()similarly to GD core toolkit, but the difference with ImageMagick is that if you want to add support for an image format you do not need to write specific code for that format as in GD - you just have to have a version of the executable that supports the format you need.Comment #62
mondrakeComment #64
mondrakeJust a reroll. However this is now no longer acceptable I think, it breaks BC. This issue is still blocking a stable release for the ImageMagick module.
Comment #65
mondrakeAn attempt to move on without BC break. This restores the
hook_file_mimetype_mapping_alterto its original signature, still keeping the new servicefile.mime_type.mapper.Comment #67
mondrakeComment #69
alexpottAre we sure this needs to be lazy? Given this is already injected into a lazy service that always needs it I'm not sure.
Comment #70
mondrake@alexpott thanks, patch here removes lazy flag and proxy class.
Comment #71
mondrakeComment #73
mondrakeWhoops..
Comment #75
mondrakeLet's see this.
Comment #76
mondrakeComment #77
mondrakeRemoved no longer needed file docblocks. Anyone up for a review?
Comment #79
mondrakeReroll after #2796329: \Drupal\Core\File\MimeType\ExtensionMimeTypeGuesser maps the 'js' extension to the 'application/x-javascript' MIME type instead of 'application/javascript'.
Comment #80
mondrakeA problem with #79 was that, even if existing API were not changed, still any class that was extending from ExtensionMimeTypeGuesser and trying to access its protected $mapping and $defaultMapping properties would fail, since the mapping is moved to the new class.
Here I am using a magic __get method in ExtensionMimeTypeGuesser, so that any get attempt from ExtensionMimeTypeGuesser::$mapping or ExtensionMimeTypeGuesser::defaultMapping will be redirected to the mapper service, and fetched through two public methods there, introduced for BC and marked @internal.
Comment #81
mondrakeComment #82
mondrakeThis issue is pretty much stalled :(
I wonder whether it would make sense to take a different approach in the short/medium term, i.e. just add the methods that would be needed in contrib to the
ExtensionMimeTypeGuesserservice:and postpone introducing the separate service
MimeTypeMapperto D9.Any feedback?
Comment #87
mondrakeComment #88
mondrakeTwo years later... I would still like this to move on. Getting the list of available MIME types or the list of file extensions mapped to a MIME type is not possible, and workarounds are not good.
In the ImageMagick module, at one point I was extending a class from the guesser, but this was forcing the alter hook to be called again. Lately I am using reflection to get the value of the $mapping array after it has been processed by the alter hook, but again this smells bad.
Relaunching here. This patch (sorry no interdiff):
file.mime_type.mapperservice, implemented through aDrupal\Core\File\MimeType\MimeTypeMapperclass (with a supporting Interface), that advocates the execution of thehook_file_mimetype_mapping_alterhook and provides OO methods to retrieve and manipulate the MIME type to extension mapping array.ExtensionMimeTypeGuesserclass to use the new mapper; the::setMappingmethod is deprecated, and deprecation tests are added.hook_file_mimetype_mapping_alterhook to pass the mapper object in addition to the $mapping array. This for BC, in D9 the $mapping array should be removed. Hook implementations can, as of the release after which the changes are made, either manipulate the array directly or use the OO methods to alter the mapping.Comment #89
andypostthis means no BC, so not sure it is possible in minor versions
Comment #90
mondrakeOK, I agree it is confusing. Let me do sth else.
Comment #91
mondrakeInstead of changing the hook signature, this is now deprecating
hook_file_mimetype_mapping_alterand replacing it with ahook_mimetype_alter, where the mapper is passed as an argument.If we agree this is the sustainable way forward, I will add a test for the hook deprecation.
Comment #92
mondrakeUpdated IS.
Comment #93
mondrakeAdded deprecation tests for
hook_file_mimetype_mapping_alter.Comment #95
mondrakeFTR, if anyone interested, I released today a beta1 version of the Sophron module:
Features
Comment #96
mondrakeComment #97
yogeshmpawarComment #98
yogeshmpawarRe-roll of #93.
Comment #100
yogeshmpawarSeems like these test fails are unrelated so setting back to Needs Review & Triggering bots.
Comment #102
avpadernoComment #103
pcambraRe-rolled as patch was not applying on core.services.yml
Patch is smaller due to the similarity from ExtensionMimeTypeGuesser with MimeTypeMapper
Comment #111
quietone commentedThis was a bugsmash triage target. kim.pepper agreed it was a bug. So let's get a reroll here.
Comment #114
bhanu951 commentedComment #115
bhanu951 commentedOne last test failing.
ExtensionMimeTypeGuesserDeprecationTest::testConstructorDeprecationtest is failing due toExtensionMimeTypeGuesser::$mapping or ExtensionMimeTypeGuesser::$defaultMappingare not being redirected to the mapper service.I am not sure if we should add setters or getters as added in #80 to maintain backwards compatibility.
Comment #116
needs-review-queue-bot commentedThe Needs Review Queue Bot tested this issue. It either no longer applies to Drupal core, or fails the Drupal core commit checks. Therefore, this issue status is now "Needs work".
Apart from a re-roll or rebase, this issue may need more work to address feedback in the issue or MR comments. To progress an issue, incorporate this feedback as part of the process of updating the issue. This helps other contributors to know what is outstanding.
Consult the Drupal Contributor Guide to find step-by-step guides for working with issues.
Comment #121
kim.pepperDid a fair amount of cleanup on this issue.
ExtensionMimeTypeGuesseris now using theMimeTypeMappergetMapping()method which was temporary anyway and refactored tests to not call itDrupal\KernelTests\Core\File\MimeTypenamespace to make the namespace underlib/ExtensionMimeTypeGuesser::guessMimeType()Comment #122
kim.pepperAlso created a follow-up #3477946: Generate file extension mime type map with fileeye/mimemap update utility
Comment #123
mfbWhy not allow contrib modules to call getMapping() so they can arbitrarily alter the mapping?
Comment #124
kim.pepperCan't already alter the mapping with the alter hook?
Comment #125
kim.pepperAlso different mapping implementations could use different data structures, so what gets returned from getMapping() could be different.
Comment #126
mfbWell I'm looking at how to still allow File MIME module to work without using the deprecated hook_file_mimetype_mapping_alter(). It looks like the new alter hook doesn't allow a contrib module to get the mapping so it can make various changes, and then apply it via setMapping().
And different data structures? Well that would make it even more difficult for a contrib module to alter the mapping, lol sigh. I confess to not actually following this issue.
Comment #127
kim.pepperfunction hook_mimetype_alter(?MimeTypeMapperInterface $mime_type_mapper = NULL)gives you the ability to add/remove/update mappings by using the API interface rather than the raw data structure, which is better IMO.Comment #128
mfbYes I see it's possible to call addMapping(). But I'd have to iterate through and make hundreds of method calls (if someone configures File MIME module to parse their /etc/mime.types file), with an array_search() in each one, so it just seems slower, that's all. And I'd have to double check there is no behavior change from how it worked previously.
Comment #129
mfbRealized I was being lazy and I should benchmark it. So, I found that implementing the new hook in File MIME module (configured to add all the MIME types from the /etc/mime.types file) adds about 10 milliseconds of execution time. This is probably fine for those cases where the hook is invoked during file uploads - such requests are going to be extremely slow regardless - but not ideal for other pages where the hook might be invoked (e.g. managing display of an entity with a file field). Admittedly, File MIME module doesn't have very many installs (and more installs of the Drupal 7 branch than the current branch).
Comment #130
kim.pepper#128 Thinking about this further, we should probably remove
setMapping()to hide the underlying data structure. Projects like https://www.drupal.org/project/sophron that use the https://github.com/FileEye/MimeMap library have a different data structure.#129 hmm. Shouldn't that hook only get fired on container build? It should be cached after that.
Comment #131
mfb@kim.pepper no, there is nothing caching the map, whether in the container or otherwise. Both the old and new alter hooks run whenever the map is used.
Comment #132
mfbI looked at Sophron module, and it has a totally different mechanism for allowing other modules to alter its mapping - it dispatches an event. I guess you are saying that a future version of Sophron module could start invoking this alter hook?
Comment #133
kim.pepper#131 I don't think that's right.
The hook gets fired when this service is created.
Comment #134
mfbalterMapping is called whenever the
file.mime_type.mapperservice is created (for example when ExtensionMimeTypeGuesser is constructed). So the alter hook fires on any request that needs to create that service.E.g. if a page renders an entity that displays an audio file field, the service is needed and the alter hook fires. But once that entity is cached in the render cache, it will no longer render, and therefore the service won't be created, so the alter hook won't fire. Maybe that is the caching you were referring to, I'm not sure? There are also admin pages where the service is created, and the alter hook fires, without any sort of cache being involved (e.g. managing display of an entity with a file field).
Comment #135
kim.pepper#134 Yeah I guess I was talking about the container cache. I misunderstood what you meant by 'Both the old and new alter hooks run whenever the map is used.' thinking you meant when we call guessMimeType() but it's when the service is created.
I did some more work removing setMapping(). I don't think that's going to cause too many issues.
Comment #136
mfbI was timing the alter hook on requests where the service is created (e.g. because guessMimeType() was called at least once). Since it's when the service is created, the 10ms slowdown only happens at most once per request.
Comment #137
kim.pepperI've done a fair bit of rework to replace the new hook with tagged services. I think triggering hooks during container build is a bit of an antipattern, and this approach uses a more symfony native approach.
Comment #138
mfb@kim.pepper I don't understand why you say "triggering hooks during container build" - the hook was triggered when the service was created, i.e. when a request needs to use it for the first time, not when the container is built.
Comment #139
kim.pepperFair enough.
As for the test fail, I have no idea why
\Drupal\Tests\block\Functional\BlockCacheTest::testCachePerPage()is failing. It's passing locally for me. Could it be a random fail?Comment #140
kim.pepperFound the source of the test fails was a deprecation warning on the legacy
hook_file_mimetype_mapping_alter()infile_test.module. We already test this infile_deprecated_test.moduleso I removed it.Ready for reviews again!
Comment #142
mondrakeI did a review. I am definitely biased by having developed Sophron, feel free to push back.
Also, adding a related issue that should be committed before this IMHO
Comment #143
kim.pepperThanks for the detailed review @mondrake. Much appreciated. I've responded to all your comments and made changes where I agree. I resolved a few where I did not agree, but feel free to re-open those threads if you disagree.
Comment #145
kim.pepperI created a POC MR with a FileEye MIME map implementation to check if our interfaces and factory approach works with 3rd party libs.
Comment #146
needs-review-queue-bot commentedThe Needs Review Queue Bot tested this issue. It no longer applies to Drupal core. Therefore, this issue status is now "Needs work".
This does not mean that the patch necessarily needs to be re-rolled or the MR rebased. Read the Issue Summary, the issue tags and the latest discussion here to determine what needs to be done.
Consult the Drupal Contributor Guide to find step-by-step guides for working with issues.
Comment #147
kim.pepperRebased.
Comment #148
needs-review-queue-bot commentedThe Needs Review Queue Bot tested this issue. It fails the Drupal core commit checks. Therefore, this issue status is now "Needs work".
This does not mean that the patch necessarily needs to be re-rolled or the MR rebased. Read the Issue Summary, the issue tags and the latest discussion here to determine what needs to be done.
Consult the Drupal Contributor Guide to find step-by-step guides for working with issues.
Comment #149
kim.pepperTests are passing.
Comment #150
mondrakeA bunch of nitpickeries from me. I think this is almost ready, cannot RTBC it though.
Comment #151
kim.pepperAddressed all feedback. Thanks again.
Comment #152
godotislateOne small deprecation docblock issue with version numbers.
Comment #153
kim.pepperThanks. Feedback addressed.
Comment #154
godotislateComment #155
kim.pepperAdded tests and answered question.
Comment #156
godotislatelgtm
Comment #160
mondrake#3477346: ExtensionMimeTypeGuesser::guessMimeType returns less accurate MIME type when file extensions have multiple parts went in, and this needs a reroll now.
Comment #161
mondrakeworking on this
Comment #162
mondrakererolled
Comment #163
godotislatelgtm
Comment #164
needs-review-queue-bot commentedThe Needs Review Queue Bot tested this issue. It no longer applies to Drupal core. Therefore, this issue status is now "Needs work".
This does not mean that the patch necessarily needs to be re-rolled or the MR rebased. Read the Issue Summary, the issue tags and the latest discussion here to determine what needs to be done.
Consult the Drupal Contributor Guide to find step-by-step guides for working with issues.
Comment #165
kim.pepperI've merged 11.x into this MR. Looks like the Hook Attributes work that got merged is triggering some deprecations that will need looking at.
Comment #166
kim.pepperThis was just a rebase on 11.x so putting back to RTBC
Comment #167
kim.pepperSpoke to @xjm at DrupalCon Singapore contribution day, and she recommended tagging as Needs framework manager review.
Comment #168
kim.pepperDiscussed with @larowlan and this should be a task.
Comment #169
kim.pepperI squashed all the commits in the MR to make rebasing on 11.x easier.
Comment #170
kim.pepperLooks like we are triggering deprecation errors in
Drupal\Core\File\MimeType\DefaultMimeTypeMap::getMapping()andDrupal\Core\File\MimeType\DefaultMimeTypeMap::setMapping()Comment #171
kim.pepperRemoving 'Needs framework manager review' tag as @larowlan has reviewed.
Comment #172
godotislateA couple comments.
Comment #173
kim.pepperThanks for the review. Addressed feedback.
Comment #174
godotislateApologies, seeing a couple new things with fresh eyes that I missed last pass:
Comment #175
kim.pepperApplied suggestions.
Comment #176
mondrakeJust noticed the CR links redirect to this issue and not to a CR. A CR for this is actually missing.
Comment #177
kim.pepperCreated a draft CR. Will look at changing the links in the morning unless someone else gets there first.
Comment #178
kim.pepperUpdated links to CR.
Comment #179
godotislateLGTM. Nice work, @kim.pepper. Thanks for sticking with this.
Comment #180
mondrakeWorking on BC fixes.
Comment #181
mondrakeNow Sophron is passing tests with this MR applied (deprecation errors are thrown but that is OK). https://github.com/mondrake/d8-unit/actions/runs/12844774697/job/3581814...
We need to keep the protected properties as they are and cannot rely on the new ones (the map and the file system) to be initialised when the methods are called, as the classes that today extend
ExtensionMimeTypeGuesseroverriding the constructor will not have done that.Comment #182
kim.pepperI think we have resolved all threads except one question for @alexpott about changes to
MimeTypeMapFactoryComment #183
godotislateLooks like all the latest feedback has been addressed. Back to RTBC,
Comment #184
alexpottI've updated the MR to leverage \Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait - it'll allow us to remove the module handler property and have less complexity in the constructor.
Comment #185
godotislateThere are test failures in Drupal\Tests\system\FunctionalJavascript\Form\TriggeringElementTest. I'm guessing unrelated, and the tests need re-running.
Comment #186
kim.pepperI re-ran the pipeline a couple of times to see if it was a random failure, but still getting the fails.
Comment #187
catchHead was broken, might need a rebase.
Comment #188
godotislateMaybe the MR branch needs a rebase? Looks like there was a commit to HEAD that broke
TriggeringElementTest, but it was reverted. See #3461309: Refactor FormTestClickedButtonForm::buildForm #16.Comment #189
kim.pepperRebased on 11.x
Comment #190
kim.pepperTests back to green.
Comment #191
alexpottCommitted 37737af and pushed to 11.x. Thanks!
Comment #193
mondrakeSmall issue found in #3519804: DummyMimeTypeMapLoadedSubscriber does not get registered.
Comment #196
cmlaraComing from #3528246: [META] Add support for Drupal 10.5/11.2 where we now have a circular reference fault related to this change..
S3fs implements a decorator of the core file_system service primarily to prevent silent data loss with an added bonus of better performance.
However the decorator needs to obtain the mime type of files in order to set the relevant delivery headers in the S3 bucket.
We hit this once in the past and as such we created a duplicate stand alone instance of the guesser service to avoid, however now that the guesser itself directly requires the file_system service we encounter the circular reference errors again.
Comment #198
xjmSaving a couple missing credits from the sprint.