Problem/Motivation
In contrib (and even in core itself), there is a lot of boilerplate repeated when a migrate source deriver wants to add fields to an source migrate deriver for a fieldable entity. Let's make the code for discovering and adding fields generic and by creating a re-usable service. This will reduce the duplication of code copy/paste spread across all the derivers, not only in core but also in contrib.
Paragraphs and Commerce would use this. Node, user and taxonomy term in core could also.
Proposed resolution
Take a look at node source deriver, make a service and then implement it for node, user and taxonomy.
Remaining tasks
Code it
Run existing tests
- Commit it
User interface changes
API changes
Data model changes
Comments
Comment #2
heddnComment #3
mikelutzThrowing this here to see how many tests I broke. After building out the trait, I really felt like a base class was a better solution for both dependency injection and access to the class derivatives property. Anyway, this needs a bit of refactoring for coding standards among other things, so just a WIP.
Comment #4
mikelutzComment #5
quietone commented@mikelutz, thanks, this is coming together nicely. I'm not doing a review, only asking a question. It looks like this will work fine for entities with bundles but what about the cases where there are no bundles, like user?
Comment #6
mikelutz@quietone Good point, perhaps I do need to at least pull part of this into a trait that can be used by the user field migration. I may be working on two separate things actually. Shared code for bundlable entities that need a deriver, and shared code for fieldable entities that need to scan and load fields. The bundle stuff definitely makes more sense as a deriver base class, but the field stuff would better make a trait. Let me take another pass at this with that mindset, I bet I can do it in a way that makes more sense.
Comment #7
heddnIs this an intentional change to these tags?
Comment #8
mikelutzIt was intentional, though again, I just threw this up here to see how many tests I broke. There's no consistency in the tags and revision and translation checks. All the tags are uppercase except for 'translation', d7 node checks if it's a translation migration with a tag, and if it's a revision migration with a hard-coded id check, d6 checks for translations with a hard coded id check and no tags, and it doesn't make any sense. It would be nice for a contrib deriver to be able to use the tags in a consistent way and get the translation check and the dependency addition by tagging their migrations.
I don't think there would be any issue with adding a Revisions tag to revision migrations. Changing the case on the translation tag or adding it to the d6_node_translation migration I suspected might be a little more problematic. I just wanted to see how problematic it would be.
Comment #9
mikelutzSo, let's try this again. I was trying to do too much in one issue before. This patch is limited to the issue scope of moving code related to fieldable entities into a trait. I do still think some of the bundle deriver code should be moved into a base class, but that is not what this issue is about.
Comment #10
heddnI think this logic could be used in more locations. Let's open a follow-up to do that if that is the case.
Is this how things are currently for user and other non-bundable entities?
Since MigrationDeriverTrait is included in FieldMigrationTrait, I don't think we need both? Yup, User doesn't do this, so I think the extra import can disappear.
I noticed cleanup of class properties in Taxonomy the others, but not here? Why is that?
Comment #11
mikelutz1) I agree, that's why I put it in it's own trait. It really feels like it should be a method on Migration, but it only makes sense on Drupal migrations and we have no Drupal specific migration class. Then I thought about a static method somewhere, but nowhere made sense. I'm still not sure a trait is the right spot for what is effectively a static utility function, but it had to go somewhere.
2) User doesn't currently check against bundle, but non-bundlable entities get their entity type as a bundle, so I call from user using that. Another option might be to provide a default empty string for the bundle and only set it on the source if provided, but I chose to require the bundle to be passed in explicitly to simplify the logic and reduce the chance for errors.
3) MigrationDeriverTrait is not included in FieldMigrationTrait. That trait contains a method bundle derivers use to collect bundles, which is why user does not need it.
4) User has no properties to clean up. User extends FieldMigration which contains the dependency injection.
Comment #12
mikelutzHere's an update. It cleans up some comments, and deals a bit more with bundles/no bundles.
For non-bundleable entities it no longer requires you to submit a bundle.
For bundleable entities, It gets and caches all fields on the first go, because it is being called inside a loop in a deriver. There's no need to create a source migration and database call for each bundle.
Comment #14
mikelutzMeh. Too many names for bundles over the years..
Comment #15
heddnI'd like to see how this works with consumers like commerce or field collections, so I'm adding a manual testing tag.
Comment #16
heddnNot per se a contrib module blocker, but its the closest tag match in combo with DX to signify this will greatly improve the life of contrib modules.
Comment #17
quietone commentedOnly time for a few comments.
These should probably case insensitive?
I think this type of thing is usually documented to refer to the source not 'from'. Something like 'The core version of the source database.
Similar with the entity_type comment.
The tests using $core are different. What is going on here?
This is on my list to test.
Comment #18
quietone commentedApplied the patch in #14 and tested it by converting the 2 derivers, ProductDeriver and ProductVariationDeriver, in commerce_migrate. It took a bit to figure out how to have two different source entity types involved for these derivers. Two are needed because the entity type names changed from Commerce1 to Commerce2. In d7 a product is a node entity but it is a commerce_product entity in d8 and a d7 commerce_product entity is a d8 commerce_product_variation entity.
This can be accomplished by just using getFields, for the case of a Commerce 1 product, to use 'node' for the source but 'commerce_product' for the destination, as shown here:
$this->fields[$core]['commerce_product'] = $this->getFields($core, 'node');Comment #19
mikelutz@quietone, That shouldn't be necessary. Commerce migrate should reduce with the attached patch (which passed the deriver tests for me locally, though I didn't run the full commerce_migrate suite)
FWIW the field_collections and paragraphs migrations work as well with this patch in a similar way.
Comment #20
quietone commentedOh, oops. Sorry, mikelutz. You are correct. I fixed my errors and, like you, both deriver tests run successfully. Then I ran the migration tests for Product and ProductVariation. The ProductVariationTest passes but not ProductTest, which among other things is dependent on d7_user.
This is the error and I can't look further into it now.
Comment #21
mikelutz@quietone I saw that too, let me check into it more in the morning. I got the failure without applying the commerce_migrate patch, but it's green on d.o. as of a few days ago, so let me make sure that the core patch isn't causing the failure. I don't see why it would, it looks like unmet requirements on the migrate test at first glance, but I definitely want to check it out and know where it is coming from.
A quick response to #17,
1) I think the tag is set with that capitalization and checked against that capitilization in other places, but let me know if I'm wrong.
2) I'll update the comments and post a new patch tomorrow.
3) I've always fallen in the pro-ternary camp, the if statements above set values in the array, and I personally like the ternary for the scaler later, but I can refactor and set that identifier value in the core check blocks above. In this case it may be more readable, I can put everything I need to differentiate between the d6 and d7 migrations in the same spot.
Comment #22
quietone commented#17.1 I'm not sure either. I don't think at most it is a convention. What do others think?
#17.3 It is about the type used not the ternary. I should have said, "Why are some testing string and not strict, and others testing integer"?
Comment #23
mikelutzAh! good call, that '6' should have been a string. I'll fix that in tomorrow's update too.
Comment #24
mikelutzComment #25
mikelutzI found the issue with the commerce_migrate test, I didn't realize the user getProcess() reused a stub migration definition later in the function to test for the profile module, and I had inadvertently removed it.
commerce_migrate must have profile enabled in their fixture, while the core fixture doesn't. Because of this, core tests went to the requirements check, threw an exception on the missing profile module, which is caught and life went on. Commerce migrate passed the source check, which moved to the destination check, which threw the uncaught exception due to the incomplete definition.
I enabled the profile module for the core user test so that this bug will have a failing test in the future.
I also updated the comments, moved the bundle identifier setting into the other core version checks and removed the integer check.
Finally, WRT 17.1 Drupal\migrate_drupal\MigrationConfigurationTrait::getMigrations() uses
This tag feeds into MigrationPluginManager::createInstancesByTag() which uses the same
check to generate the migration plugins, so I think the capitalization is fine.
Comment #26
mikelutzTypo fix...
Comment #27
quietone commentedThanks for tracking down the commerce_migrate failure. I haven't retested yet. And I realized this morning that there is an issue to document the yml file properties,, and when that gets done it should include that tags are capitalized. #2911781: Document migration yml properties
Looked at the comments and found some things. There is inconsistent capitalization on Field, Plugin and Migration in the comments. I haven't identified them all but they need to be corrected. And the summary lines beginning with a verb "should be in third person singular present tense, such as "Handles file uploads." "
Needs to be more descriptive. 'Provides common functionality for migrations' or some such.
s/false/FALSE/
s/A trait to provide/Provides/
The migration plugin manager.
s/Get/Gets/
When I read Migratable I think this method is doing some sort of checking and will only return a subset of all possible fields. Should be 'Gets the fields for a given entity type'.
Can we expand on what is actually in this array. And remove 'to migrate'.
Extra space before The
I prefer "The source entity type".
Same as above
s/find add/ the plugin and add/ ?
Probably one per line though can't find a standard for that. There isn't another in core with two traits on one line.
Comment #28
quietone commentedWith the latest patch, the commerce_migration tests ProductDeriverTest, ProductVariationDeriverTest, ProductVariationTest and ProductTest pass locally.
Comment #29
heddnManual testing had been done. Removing tag. Still needs work for the latest feedback.
Comment #30
mikelutzFeedback addressed. I appreciate the comments on the comments, It should help me be more consistent in the future.
Comment #31
heddnWe're getting pretty close now. I've tagged this as still needing a CR. And a couple nits. But looking nice.
I think we should pass TRUE as 3rd argument to in_array. Or comment why we aren't.
I typically see this as:
use Foo;
use Bar;
Comment #32
mikelutzThere ya go.
Comment #33
heddnAll feedback is addressed. We have change records. We have tests. We've done manual testing. I think this is ready. Hopefully, this can receive a backport to 8.5?
Comment #34
mikelutzComment #36
MixologicTemporary testbot hiccup.
Comment #37
alexpottI really like what this patch is doing but I think doing it as a trait is risky for BC processes and kinda unnecessary. Could we add a service to migrate_drupal that does this for migrations instead. That way everything would be nicely encapsulated and we less risk of any BC breaks.
Comment #38
heddnComment #39
jofitzConverted Trait into Service.
Comment #40
maxocub commentedAssigning for review.
Comment #41
phenaproximaA definite DX improvement, and nice-looking patch. I think we can streamline it some, though...
Let's rename the service to migrate_drupal.field_discovery. The word "manager" is a bit overloaded in Drupal, and field_discovery better explains what the service does.
This doc comment needs more detail. What kind of data is contained in the cache? What does "fields" mean in this context?
We don't need these methods; services can and should have their dependencies injected directly in the constructor.
Same here.
We should mention that '6' and '7' are the only allowed values.
What does this mean?
Nit -- empty blank line. Also, let's rename $entity_type to $entity_type_id, for clarity and consistency with other parts of core.
This should probably go...
We should inject a logger service and log debugging info here.
Comment #42
maxocub commentedComment #43
heddnThis should account for the feedback in the last review.
Comment #44
phenaproximaLooking great! I see nothing seriously wrong here.
Let's get a little more specific -- this is only for migrations from D6 and D7.
Nit: We need a blank line after "FieldDiscovery constructor."
Supernit: "cck" should be "CCK".
Let's rephrase this -- "The entity type ID to which the fields are attached."
I love it!
Return type should be string|bool.
Should be elseif.
Typo in 'appropriate'.
Because this is a protected method, I'm not sure we'll need this. If we do, it should throw \InvalidArgumentException instead of returning an empty array.
===
content module is only a thing in D6. Maybe we should rephrase this as "If checkRequirements() failed, the source database did not support fields (i.e., CCK is not installed in D6 or Field is not installed in D7)."
Description should be prefixed by (optional).
What if getCoreVersion() returns FALSE?
Boy, I can't wait until we can rip the cckfield stuff out of Migrate Drupal...I swear, core will instantly shed 30 pounds.
Nit: Should end with a period.
What is this being used for?
Comment #45
jofitzMade corrections suggested by @phenaproxima in #44, highlights include:
9. & 13. Tweaked the condition.
16. fieldDiscovery is only used in User.php so moved code to there.
Comment #46
phenaproximaThanks for fixing my complaints, @Jo Fitzgerald. I see nothing else to block this from landing. Explicit test coverage might be good, but we already have plenty of implicit tests. So I'm not worried about it.
Comment #47
alexpottLet's not add a trait with one usage in this issue. If we want we can add a follow-up to add the trait and use it in multiple places.
Constructs a User migration.
Looking at FieldMigration - can we use this new service there and inject into into the constructor there so we don't have to override all this in the User migration.
Comment #48
jofitzI believe this will meet @alexpott's requirements from #47, but I would be interested to know if anyone could suggest a more elegant way to integrate the FieldDiscovery service into FieldMigration.
Comment #50
jofitzFixed the test failures.
Corrected the coding standards errors.
Comment #51
jofitzAttempt at a more elegant version, based on the code removed from FieldMigration.
Comment #54
quietone commentedI'll do a review.
Comment #55
heddnFirst, let's do a re-roll.
Comment #56
jofitzRe-rolled.
Comment #58
jofitzRe-rolled patch from #51.
Comment #60
jofitzFix the failures and a couple of coding standards errors.
Comment #61
quietone commentedSweet, this looks nice. All items from #47 are fixed, so really close.
I just found a few small things.
s/bundlable/bundleable/
s/appropiate/appropriate/
Probably should be a property instead of declaring dynamically.
Needs an @return.
Comment #62
quietone commentedComment #63
jofitzComment #64
heddnLooks like all feedback from #61 is addressed. Back to RTBC.
Comment #66
heddnBack to NW. The CRs need updates.
Comment #67
heddnI changed out a couple words in the CR to swap out 'trait' for 'service'. And got rid of the second CR that discussed the drupal version trait that got moved into the service as a protected method. I think this can go RTBC again.
Comment #68
heddnComment #69
heddnComment #70
alexpottThis is deprecated - should we trigger a deprecation is this code is used? Also having the cck field plugin manager as the second argument makes it more awkward to remove. I think we need to deprecate the property and argument.
The cckPluginManager is no longer used. Should we remove or deprecate it?
This removal makes \Drupal\migrate_drupal\Plugin\migrate\CckMigration completely obsolete. And it also means that \Drupal\migrate_drupal\Plugin\migrate\FieldMigration::PLUGIN_METHOD should be deprecated because it is not used.
As a service it should have an interface so it can be decorated etc... and typehints will continue to work.
Comment #71
heddn#70.4 seems to be calling for tests, so tagging.
Comment #72
mikelutzThis blocks #2970108: Fix "MigrateCckField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField instead." deprecation error as it refactors and consolidates the code that calls the deprecated CckPlugins.
Comment #73
mikelutzComment #74
mikelutzRegarding 70.1, I'm of the opinion that the CCKPluginManager should not be injected at all. This plugin manager should only be instantiated as a BC shim to support modules that may have created a CCKPlugin or an old migration that was created with one. We have a pending subtask in #2959269: [meta] Core should not trigger deprecated code except in tests and during updates to remove the 'MigrateCckFieldPluginManager is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateFieldPluginManager instead.' deprecation message from the global ignore list, and in order for that to happen, the deprecated service shouldn't be injected.
It makes more sense to me to call this service directly, and only if it's needed (which, after #2970108: Fix "MigrateCckField is deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x. Use \Drupal\migrate_drupal\Annotation\MigrateField instead." deprecation error won't happen anywhere in the core test suite outside of legacy tests. This patch adds this in.
for 70.2, Both CCKPluginManager and FieldPluginManager are no longer needed in FieldMigration. The D7Comment Migration extends FieldMigration and accesses the FieldPluginManager, but it should be using this service instead. The problem is the D7 Comment Migration does not currently respect bundles (see #3005718: D7 comment migration does not properly migrate fields by comment bundle.) and can't use this service as it sits. This patch takes both FieldPluginManager and CCKPluginManager out of FieldMigration, and adds FieldPluginManager directly into D7 Comment, with the intention that that migration is fixed up to respect bundles and use this service in #3005718: D7 comment migration does not properly migrate fields by comment bundle., making this issue a blocker for that as well.
I have not dug into the ramifications of 70.3 yet.
I have not created service tests for 70.4 yet.
I added an interface for 70.5
Comment #75
mikelutzI offer: Test Coverage.
Comment #76
mikelutzA few typehints changed from FieldDiscovery to FieldDiscoveryInterface, and I added a deprecated annotation to the constant referenced in 70.3
Comment #77
mikelutzAnd removing two helper functions I added to the test base that I didn't end up using.
Comment #78
mikelutzComment #79
mikelutzCompletely uninteresting doc and formatting fixes.
Comment #80
mikelutzAnd a couple more..
Comment #81
heddnVery good, easy to ready patch. Wonderful work. Just a couple small things.
Nit: a couple extra periods seem to have made there way into here.
Maybe a protected method,
getDefinitionCan we move this into some protected functions, maybe
getSourcePluginIdandgetBundlePropertyMaybe a protected method
getFieldsordoGetFields$manager variable could be null if an exception gets thrown. Can we move its definition or these conditionals?
Should this be call_user_func or some such?
Comment #82
mikelutzTestbot fodder, please ignore.
Comment #83
mikelutzMore testbot food. Getting closer. Needs more tests.
Comment #84
heddnNit: 80 chars.
We need to be more clear about the difference between these methods and why one would choose one over another. I know it has to do with if the destination entity has a bundle or not. But what is allFields about?
This I think I think should be marked internal since it is for field plugins specifically. The rest are for consumers of the API, so leave them non-internal.
I wonder if we should remove this. We already check the tags, why do we want to check again? Especially since there are reports of D5 migrations to D8 using the D6 templates. Let's not add too many checks here, unless we have good reason.
Comment #85
heddnThese same values are stored as config keys in
migrate_drupal.settings.enforce_source_module_tags. And we want to use those values in #2826742: Expose migration types in Migrate UI. Shall we create a small task to just add these as a constants somewhere and then put a TODO here to use them?Comment #86
mikelutzAdding some more work here. Addressed some feedback and made some more changes. I still need more tests to be added.
I used the new deprecated service injection trait for cck field manager, but I was forced to create the d6 phone and number plugins to avoid triggering its error message. I will repurpose the related issue for a cleanup of the d6 field migration processes.
I addressed some of the feedback, but I need to go over it again. Removed the checkcore method, it was redundant. I still need to go through all the documentation though.
Comment #87
mikelutzNeed to enable modules providing field plugins so they are discovered and we don't trigger the deprecation errors.
Comment #88
heddnCould we break these two fields out to their own issue? I hate to postpone this on that, but I feel that will make this much easier to read and understand.
/me Sighs. I think this won't be very nice. We have worked very hard to reduce this list to the smallest possible. Is there any way around this be just adding these to the extended implementations of this base class?
Line wrap these comments to 80 chars.
Comment #89
mikelutzI've pretty much decided to not use the deprecated service injector here, since it is clearly require more cleanup than I want to inject into this issue. Going back to a custom private getter for the cck field plugin manager will kick the can down the road, but we still need to deal with the problem with the field plugin dependencies.
Not enabling the field modules in the migration tests is a problem. Nearly all of the normal tests around the migration system start with the field/field instance migrations and if you run those migrations without the modules holding the field plugins enabled, then you are not running them correctly, and who knows how it will affect tests. The whole thing may speak to a bigger requirements problem around the field plugins in that those migrations can be run at all without the field plugins against a database that has those fields, but either way, if we are going to run those migrations in a core test, then the field modules that support them should be enabled, even more so because we have to avoid falling back to the deprecated cck stuff.
Other potential solutions I can branstorm in no particular order and without much regard for their consequences:
Move all field plugins into the field module - Possible, but would require additional requirement checks somewhere, as the field plugins would be enabled but the module containing the field type might not be. The advantage being that we could detect that and decide on an explicit action, a warning, or something saying that you can't run this migration without the 'link' module enabled, or an option to skip all link fields, or something..
Create a private means of discovering a list CCK field plugins without triggering a deprecation error, and only create the manager if the plugin is on this list. If feels odd writing this much code to support a deprecated system, but if it was private and isolated, it would ensure that in core only tests that we don't trigger the deprecated code, since we won't find a cck plugin. still a little sketchy, since the remaining deprecated cck plugins trigger the error in the file and not the constructor, but those could maybe be fixed.
A hard coded list of field plugins provided by core modules, and we don't check the cck manager for plugins on that list. Potential bc break, and just stinks of a bad idea.
Some broader requirements improvements, but again, BC becomes an issue. The migrations shouldn't necessarily fail because the core field module isn't enabled.
Comment #90
heddnTriaging issue queue.
Comment #91
mikelutzAssigning to myself to work on this week.
Comment #92
mikelutzThis patch is a reset patch. I removed the new field plugins and deprecated service injector, and I'll revisit them in a separate issue. I kept the additional tests, rerolled, adjusted some tests around some recent fixture changes. Hopefully it's back to green, and I can add the last couple tests I want and get a real review.
Comment #94
mikelutzWell, who deprecated a perfectly good test trait while I wasn't looking??
Comment #95
mikelutzBack to passing tests, keeping assigned to myself for another go-over before submitting for review.
Comment #96
rakesh.gectcrAssigning myself for Reviewing on migrate meeting
Comment #97
rakesh.gectcrComment #98
rakesh.gectcrLooks good, Moving to RTBC
Comment #99
quietone commented@rakesh.gectcr, did you also review both Change Records as well?
Comment #100
rakesh.gectcr@quietone Sorry, I am not reviewed the CR.
Comment #101
quietone commentedOK, thanks for making that clear.
Then let's set this to NR for a review of the CRs.
Comment #102
quietone commentedI agree with rakesh.gectcr, this is looking so good. I'm eager to get this in. I started looking at the CR's, which I think are fine but could use another set of eye on them as well, and realized I really need to look at the patch as it has been a long while since I last looked at it. Maybe it is the late hour but I am finding it difficult to track that fixes were made for each issue raised. I'll try again on the weekend, I hope.
I'd like to see an IS update. It seems to me there is valuable history in the comments that should be in the IS. Like why are there changes to the comment and user tests? And are there any followups or todos. So, I'm adding that tag.
And I found a few things.
Line greater than 80 characters.
line > 80 characters
#85 suggests using these values from which "are stored as config keys in migrate_drupal.settings.enforce_source_module_tags." Is there a followup for that?
s/->/to/
Can you MigrateDumpAlterInterface for this. An example is in d6\MigrateFileTest
The same doc bloc is used for addAllFieldProcesses and addEntityFieldProcesses and it is hard to know the difference. And thenaddBundleFieldProcesses is spartan with no explanation. They could use some improved comments, maybe even including an example migration where each is used.
Sorry, back to NW
Comment #103
quietone commentedWanted to keep this moving along and decided to fix items 1-5 in #102. It also include a doc block for assertSourcePlugin.
Comment #104
heddnThis has been very close for a long time. Let' see if we can slip it in soon. The last round of feedback is almost now all addressed. I've updated the IS too, so removing that tag.
This need an actual follow-up issue opened.
Needs an issue opened for the TODO.
Is this really necessary here? Profile is a D6 module that is hidden in D7. Can we just not do this change or do it in a follow-up?
Comment #105
mikelutzComment #106
mikelutzSee comment #25 about why #104.3 was added. It increases the amount of code covered by MigrateUserTest, and without coverage over that section, I was able to introduce a bug that wasn't caught by tests.
Comment #107
heddnRe #106: is #2859315: SQL error from profile_fields when migrating d6 (or d7) to d8 without Profile module the real fix for this?
Comment #108
quietone commentedMaybe, instead of altering MigrateUserTest that should be done here, #3030931: User profile migration needs tests , which hopefully will expose the problem.
Comment #109
quietone commented#104.1. Issue made #3032317: Remove use of MigrateCckFieldInterface in FieldDiscovery service
Comment #110
heddnOK, let's get those new issues mentioned into the patch here as TODOs and get this done.
Comment #111
quietone commented104.2 - Issue made #3033733: Prevent discovery of CckPlugins in Drupal 9
What is left is to sort out MigrateUserTest. There is something bothering me about it but I'm not seeing it right now.
Comment #112
quietone commentedActually, I don't see that the IS was updated. @heddn, looks like your changes to the IS in #104 weren't saved. :-( Correct me if I am wrong.
Comment #113
heddnLet's remove the changes to MigrateUserTest and see if tests pass still now that #2859315: SQL error from profile_fields when migrating d6 (or d7) to d8 without Profile module has landed.
Comment #114
quietone commentedRemove the changes to the user test.
Comment #116
quietone commentedFix the tests and the coding standard errors.
Comment #117
heddnI think we cleared up the confusion about the user tests. Removing the IS update tag. And since all we are missing for RTBC is the links to #3032317: Remove use of MigrateCckFieldInterface in FieldDiscovery service and #3033733: Prevent discovery of CckPlugins in Drupal 9, I've uploaded that small change and moved this to RTBC.
We're running up close against the 8.7 deadline, but this would be really nice to see land.
Comment #118
quietone commented@heddn, thanks for the prompt review.
Yes, lets get this in!
Comment #119
alexpottAdding credit to @phenaproxima and myself for code review.
Comment #120
alexpottCommitted and pushed a916e4d4fa to 8.8.x and fa94a4df4f to 8.7.x. Thanks!
Comment #121
quietone commentedWoohoo! Thanks everyone!!
Comment #122
heddnYes, thank you.
Comment #123
mikelutzWooHoo!! Very glad to see this one make it in.
Comment #126
andypostIt needs follow-up to fix broken pgsql tests https://www.drupal.org/node/3060/qa
Comment #127
andypostnot clear why 6 & 7 tests are so different
Comment #128
andypostFiled follow-up #3038899: Fix postgresql tests after 2951550
Comment #129
mikelutzThe tests aren't really different. The first line tests that all fieldable entities are found for the version, which for d6 are only nodes, and for d7 includes users, taxonomy, and comments, then we check that expected bundles show up then check some field counts under some bundle. The real difference is that since there are only node bundles in d6, we just checked that all the expected ones were there in a single array check, while we did a couple spot checks in d7 because there were more entity types and bundles to manage.