Problem/Motivation
In #3252386: Use PHP attributes instead of doctrine annotations we added support for attribute based plugin discovery.
As part of that issue we converted block and action plugins.
This issue is to convert \Drupal\migrate\Annotation\MigrateSourceplugins to use Attributes.
There was work that converted MigrateSource discovery to attributes with multiple providers previously done in #3424509: Update MigratePluginManager to include both attribute and annotation class, but that had to be reverted. The work that needs to be done again, at minimum, is:
- Create the
MigrateSourceattribute class - Update
MigrateSourcePluginManagerto support attribute discovery - Maintain backwards compatibility with multiple/automated providers via annotations (
AnnotatedClassDiscoveryAutomatedProviders) - Update migrate API documentation to change references of "annotation" to "attribute" for migrate source plugins
- Convert the migrate source plugin classes that live in the core
migratemodule so that the annotations are replaced with attributes
Blockers and questions that need to be resolved
- The
source_moduleproperty in source Annotations is specific tomigrate_drupal. Should thesource_moduleproperty be excluded from the new Attribute, especially sincemigrate_drupalis slated to be removed? See #53 and #3009349: Revert migrate_drupal source annotations to attributes conversion - Core plugin discovery by attributes uses Reflection. When Reflection is instantiated on classes that use unknown Traits, for example, a plugin class in one module using a Trait from another module that is uninstalled, PHP will fatal error. There are four plugin classes in the
menu_link_content,block_content, andtaxonomymodules that use theI18nQueryTraitin thecontent_translationmodule. To convert these plugins to use attributes, either core plugin discovery needs to be fixed to be able to handle missing Traits without a fatal error, or these 4 plugins and the trait need to be moved to live in the same module (see #3258581: Move I18nQueryTrait from content_translation to migrate_drupal). Alternatively, should these plugins (and/or all D6/D7 source plugins) remain unconverted and just keep using annotations untilmigrate_drupalis removed?
(Tangential side note: if Reflection is instantiated on a class that extends an unknown parent class or implements an unknown interface, an exception is thrown. Work to handle that exception was completed in #3458177: Changing plugins from annotations to attributes in contrib leads to error if plugin extends from a missing dependency) - If the D6/D7 migrate_drupal plugins are not being moved, does the automated/multiple provider discovery need to be recreated for Attributes? Implementing this functionality in attribute discovery and maintaining backwards compatibility for annotations with automated providers leads to very complicated code. Or should this functionality be handled generally for all core plugins using attribute discovery in a separate issue, so that it is not specific to migrate source discovery?
Proposed resolution
- Recreate automated multiple provider discovery for migrate source plugins based on attributes
- Convert all plugin class annotations to attributes
- Update API documentation to change "annotation" to "attribute"
Remaining tasks
Review
Commit
When this issue is fixed un-postpone #3009349: Revert migrate_drupal source annotations to attributes conversion.
Publish CR
User interface changes
API changes
Data model changes
Release notes snippet
| Comment | File | Size | Author |
|---|---|---|---|
| #79 | source-plugins-3421014.txt | 53.44 KB | benjifisher |
| #79 | source-plugins-11.x.txt | 45.89 KB | benjifisher |
Issue fork drupal-3421014
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 #4
mstrelan commentedComment #5
smustgrave commentedSeems to have test failures.
Comment #6
mohit_aghera commentedNote: BC approach to handle annotations and attributes in
MigratePluginManagerclass is being evaluated in https://www.drupal.org/project/drupal/issues/3424509We should revisit and rebase this PR after this is resolved.
Slack thread for comms
Comment #7
godotislateBlocked on #3424509: Update MigratePluginManager to include both attribute and annotation class
Comment #8
catchComment #10
godotislateThere are currently 5 source plugins that do not have
source_modulein their annotations, all in test modules. One plugin, with IDno_source_moduleis meant to throw an exception for missing source module inDrupal\Tests\migrate_drupal_ui\Functional\SourceProviderTest. Otherwise the source_module in source plugins were optional, except if migrate_drupal is enabled and the migrations are tagged and configured to be enforced. SeeDrupal\migrate_drupal\MigrationPluginManager::processDefinition()and::getEnforcedSourceModuleTags(). Now thatsource_moduleis a required property in the MigrateSource attribute from #3424509: Update MigratePluginManager to include both attribute and annotation class, this functionality becomes redundant. Is requiringsource_modulealso a BC break? It's somewhat mitigated, since contrib or custom source plugins missing that property in the annotation can have that property added when they are converted to attributes. But maybe a CR is needed to document the new requirement?Comment #11
quietone commentedsource_module has been required since 8.5, see https://www.drupal.org/node/2911881 and https://www.drupal.org/node/2914530. However, it should just been when migrate_drupal is installed.
Comment #12
quietone commentedComment #13
alexpottComment #14
godotislateAdded the part of the reverted commit for #3424509: Update MigratePluginManager to include both attribute and annotation class that handled migrate source plugins and automated/multiple providers.
As for what to do about the
source_moduleproperty in the migrate source attribute? I think there are two options:source_modulean optional propertysource_modulefrommigratetomigrate_drupalIMO, we can make source_module an optional property now. There is code in the
migrate_drupalmodule (SeeDrupal\migrate_drupal\MigrationPluginManager::processDefinition()and::getEnforcedSourceModuleTags()) that already requires that property on migrate_drupal sources.Deprecating the property from the attribute can be handled in #3009349: Revert migrate_drupal source annotations to attributes conversion if needed there. There may also be BC concerns if contrib/custom modules have implemented source plugins that use
source_modulesomehow in a custom way that has nothing to do with migrate_drupal.Comment #15
godotislateMade changes to the migrate source attribute:
I believe all the remaining tests failures are occurring because there are source plugins using the
Drupal\content_translation\Plugin\migrate\source\I18nQueryTraitfrom thecontent_translationmodule that is not enabled. These are the plugins:An fatal error occurs when
Drupal\Component\Plugin\Discovery\AttributeClassDiscovery::parseClass()tries to instantiate a ReflectionClass on these plugin classes using that trait. This is similar to #3255804: Hidden dependency on block_content in layout_builder. Likely there will be need to be an overall solution for plugin classes.Comment #16
quietone commentedI think we could make a MigrateSourceDrupal attribute that has the source_module. I have make a test of that at https://git.drupalcode.org/project/drupal/-/merge_requests/5316. Unfortunately that has failing functional tests and those tests pass locally. I don't know why yet.
Comment #17
godotislateMade an effort to see if I could at least get tests to pass:
Drupal\field\Plugin\migrate\source\d6\FieldInstancePerViewModeextendingDrupal\node\Plugin\migrate\source\d6\ViewModeBaseI'm not sure why some tests are still failing in CI. I've run a couple of them locally and they pass.
In any case, there does need to be a solution for any plugin class that either:
Handling extends is straightforward, since an exception is thrown in that case, but unknown interfaces and traits lead to fatal errors. Does it make sense to create a separate issue for that?
Comment #18
berdirLeft some comments on hopefully pragmatic solutions for these cases.
If that doesn't work out somehow then +1 to skip problematic ones in this first pass and deal with them in a separate and smaller issue, so that we can unblock the deprecation of plugin managers that don't support attributes.
Comment #19
quietone commentedComment #20
godotislateMade the change to move the trait to the migrate module, and removed all the annotations from the plugin classes in question. I've also added a CR for the trait move.
I'm not sure what's going on, because the functional tests failing in CI are passing on my local.
The functional javascript failures I can reproduce on local, but I'm failing to see how they're related. They're also failing in the same way on my local against 11.x, so I'm not sure what's going on there.
Remaining todo:
Comment #21
berdirThere are some HEAD test fails that have been fixed and also some known random fails (#3438424: [random test failures] Race condition in state when individual keys are set with an empty cache but I also can't reproduce the migrate fails locally.
You can download the artifact of e.g. https://git.drupalcode.org/issue/drupal-3421014/-/jobs/1261546 and look at the browser output, but I'm not seeing anything obvious from that from a quick look.
Comment #22
godotislateI did take a look at the browser output yesterday, and what's happening is that on CI, when posting to the ID Conflict form, somehow it's being redirected back to first step. Locally, this redirect isn't happening. I assume the code responsible is this, but I have no idea why: https://git.drupalcode.org/project/drupal/-/blob/11.x/core/modules/migra...
Comment #23
godotislateI was wrong about which code is leading to the redirect. It's actually a bit further down in the same method: https://git.drupalcode.org/project/drupal/-/blob/11.x/core/modules/migra...
What is expected is that
$translated_content_conflictsshould not be empty, but it looks like migration discovery from the previous form (CredentialForm.php) is not finding the same migration plugins on CI as on my local (ddev).I've pushed some debug code to try to see what's going on, but no conclusions yet.
Comment #24
godotislateIt's been a couple days since I last took a crack at it, but an update for others who might work on this:
I still haven't found the root cause for the test failures. I have found that certain migration plugins, such as
d6_actionare found byYamlDirectoryDiscoveryinMigrationPluginManager::getDiscovery(), but those plugins are then filtered out by theNoSourcePluginDecorator. This means that the source plugins those migrations are using are not being found.I've also found that the list of source plugins returned from
$definitions = $this->getDiscovery()->getDefinitions();inMigrateSourcePluginManager::findDefinitions()is unchanged after being filtered by theProviderFilterDecorator, so it seems that setting multiple providers on the attribute recursively by namespace seems to be working correctly. But I'm not sure why discovery is not picking up the source plugins before that, and I still haven't been able to reproduce the failures locally. Since I run the local tests individually, but CI runs them serially, I had a guess that perhaps there was an issue with the file cache persisting incorrectly between tests, , but that does not seem to be the case.Comment #25
godotislateTests are finally all green. It was the file cache after all. For any plugin extending a class from an uninstalled module, catching the exception and returning NULL values was resulting in the file cache storing NULL as the value for the plugin definition. Since the cache persists as long as the file is not changed, this meant that even installing the relevant modules did not make the plugin definition discoverable. So instead of catching the exception in
parseClass, the exception is caught by the calling function and the plugin is skipped from being stored in file cache. I'm still not completely sure why this wasn't happening locally, but I'll take the win.I think this should be ready for review. Unless the deprecation of the I18nQueryTrait needs a test?
Comment #26
quietone commented@godotislate, thanks for working on this. I skimmed through the MR and I appreciate the clear comments throughout. There are two comments on the MR that need attention.
Because of the extra changes needed to make source plugin work as attributes I think it would help other reviewers if the Issue Summary was updated with the key findings and changes.
Comment #27
godotislateI believe latest review comments have been addressed. Updated IS and putting back for review.
Comment #28
godotislateComment #29
godotislateComment #30
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 #31
godotislateRebased, added deprecation test for I18nQueryTrait.
Comment #32
godotislateWhoops, meant to put back in Needs Review.
Comment #33
smustgrave commentedShould the changes to Discovery files be done in separate issue? Since it'll apply to everything.
Comment #34
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 #35
quietone commentedComment #36
godotislateThat can be done if needed or preferred, but MigrateSource plugins currently are the only type with multiple providers, so the discovery changes only affect those and are a blocker.
Comment #37
smustgrave commentedGuess no need to break out and delay this ticket as probably important to include in 11.x and 10.3.x
Rebased just to make sure none of the recent change broke anything, didn't obviously.
This has gone through a few reviews it seems so believe this is good
Comment #38
alexpottWe've had this issue with plugins and implicit dependencies before. The way in which static reflection allows you to load code that depends on non-existing things is extremely problematic. I think we need to come up with a better way to support this via discovery than eating exceptions. Or if we're going to eat exceptions then only do this in the migrate source case for now and open a follow-up issue to fix this in a better way.
Comment #39
godotislateMade a change so that the exception is eaten only for migrate source in the attribute automated providers discovery classes. Made an effort to do that while minimizing code duplication, but it's still pretty ugly. I also tried to limit the exception being eaten based on the error message matching "Interface X not found" or "Class X not found."
I can open a follow up for a better general solution if this approach for migrate source looks fine for now. Or maybe that can be part of #2786355: Convert multiple provider plugin work from migrate into plugin dependencies in core?
Comment #40
larowlanLeft a review on the MR - nice work - this looks like a gnarly one
Comment #41
godotislateBlocked on deprecating I18nQueryTrait and the plugin classes that use it, and moving them to migrate_drupal in #3258581: Move I18nQueryTrait from content_translation to migrate_drupal.
Updated IS with remaining tasks
Comment #44
godotislateI tried a POC on an alternate approach for attribute discovery in MR 8070.
The idea is that since only the attributes are needed, parsing can be done like this:
PhpToken::tokenize()on the plugin class file{}to the stringSo basically, core/modules/block_content/src/Plugin/migrate/source/d6/BoxTranslation.php:
gets copied to /tmp/BoxTranslationadfrghq.php with these contents:
and reflection is instantiated on
Drupal\block_content\Plugin\migrate\source\d6\BoxTranslationhhgsagp, so the attributes can be read, without concern of inheriting from any unknown class, interface, or trait.This seemed to work OK with some limited local testing, but CI caught a significant error (among some other failures I haven't investigated). For a class like core/modules/system/tests/modules/cron_queue_test/src/Plugin/QueueWorker/CronQueueTestSuspendQueue.php:
When the class contents are removed, the constant PLUGIN_ID is undefined, so
self::PLUGIN_IDin the attribute causes an error. I'm not sure how to get around this, so I think this approach might need to be abandoned. I thought I'd document it here regardless.Comment #45
godotislateGot my POC work in MR 8070 to go green. So along with the steps taken in #44 , the next thing I did was eliminate the idea of multiple and automated providers altogether in plugin attribute-based discovery and introduce the idea of manually defined dependencies instead. Complete summary looks something like this:
PhpToken::tokenize()on the plugin class file{}to the stringThis does require developers who write plugin classes to manually account for any implicit dependencies by listing them with the attribute, instead of having discovery determine the providers automatically. While this can be bit of a hassle, I don't think this is a major obstacle, because usually you can determine what dependencies need to be declared by checking the use statements.
This is still POC-ish, but putting back into Needs Review to get feedback on whether this is a good approach. If approach looks good, it might make sense to split out the core discovery part of the work to either #2786355: Convert multiple provider plugin work from migrate into plugin dependencies in core or #3395260: Investigate possibilities to parse attributes without reflection first before continuing here. But it was useful to test first with all the converted Migrate Source plugins here. Beyond that, there are probably some tests that need to be written for the revised discovery as well.
Comment #46
godotislateUpdated IS with summary of alternate suggested approach.
Comment #47
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 #48
godotislateRebased MR 6780. There's also a question from #3258581: Move I18nQueryTrait from content_translation to migrate_drupal about how/whether to deprecate I18nQueryTrait (and the classes that use it), given that migrate_drupal will be moved out of core before D12.
Note that I have a proposed alternative approach in MR 8070 that doesn't require the files be moved at all, and I'd appreciate any feedback on whether it's worth going that route.
Comment #49
godotislateComment #50
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 #51
godotislateRebased for #50.
Comment #52
smustgrave commentedAppears most feedback has been addressed but not 100% I can mark this one. But am moving to NW for the deprecations to be updated, unfortunately missed 10.3
Comment #53
mikelutzcross posting from #3009349: Revert migrate_drupal source annotations to attributes conversion
I think we need to rethink this, and #3009349: Revert migrate_drupal source annotations to attributes conversion in light of #3371229: [Policy] Migrate Drupal and Migrate Drupal UI after Drupal 7 EOL
Comment #55
godotislateBased on #53, I created MR 9571 that differs from previous in the following ways:
source_moduleproperty was removed from the MigrateSource attributeUnfortunately, removing the source_module property from the converted plugins embedded_data and content_entity is causing test failures.
Comment #56
godotislateAdded a commit to MR 9571 that populates the "source_module" property to the definition via the attribute
::get()method. It is kind of ugly, but it does make it easier to remove with the removal of migrate_drupal. Tests are passing again.I can also update the IS if this route of not converting d6/d7 plugins to attributes is preferred. Putting back in Needs Review for now for feedback.
Comment #57
benjifisherThat MR is marked as a draft, and I also see MR 9571. I am adding the tag for an issue summary update to clarify the situation.
Comment #58
godotislatePer conversation with @benjifisher on Slack, setting this back to Needs work for IS update. Will solicit for feedback on best approach again after IS is updated.
Comment #60
godotislateRebased MR 6780 and updated the IS.
Comment #61
godotislateComment #62
godotislateComment #63
benjifisherI am adding two more related issues mentioned in the issue summary.
Comment #64
benjifisherComment #65
godotislateAdded #3490322: Use nickic/php-parser for attribute-based plugin discovery to avoid errors as related issue - trying to handle missing trait dependency for all plugin discovery. It might make sense to postpone this issue on that one?
Also added #3443882: Allow attribute-based plugins to discover supplemental attributes to set additional properties because it would provided a way to address the
source_moduleproperty.Comment #66
godotislateUpdated the IS. Removed references to MR 8070, because solutions to hitting fatal errors during plugin discovery from missing traits are being explored in #3490322: Use nickic/php-parser for attribute-based plugin discovery to avoid errors.
Comment #68
benjifisherQuestions from the issue summary:
That seems like a good idea, but I would like to decouple it from the other problems we have to handle in this issue. If we can get this issue done, then I think we can have a separate issue to remove
source_modulefromDrupal\migrate\Attribute\MigrateSource, create amigrate_drupalclass that extends it, and addsource_modulethere.Why do we have to move the four source plugins? Isn't it enough to move the trait to
migrate_drupal?Are we going to start issuing deprecation notices when plugins use annotations instead of attributes? If so, then leaving a bunch of core plugins un-converted will break a lot of automated testing.
We have to continue to support contrib and custom plugins, one way or another. I am not sure whether the automated discovery should be in Core,
migrate, ormigrate_drupal. In order to control scope, it might make sense to keep it in themigratemodule for this issue, and then consider it along with thesource_moduleattribute.Comment #69
godotislateInvestigated this and found that an exception is thrown for missing DrupalSqlBase which prevents the fatal error, if only the trait is moved. That work is in MR 10426 for #3258581: Move I18nQueryTrait from content_translation to migrate_drupal and is in Needs Revew.
Comment #70
larowlanComment #71
benjifisher@godotislate: If I understand Comment #69, then we do not need to move those four source plugins. We just need to move the trait and update the source plugins, which is done in #3258581: Move I18nQueryTrait from content_translation to migrate_drupal.
Let's mark this issue as postponed until #3258581 is Fixed, at which point the MR here will have to be updated. I just marked that issue RTBC.
Are we still using the convention of updating the title of postponed issues? I hope I got it right, adding "[PP-1]".
Comment #72
benjifisherComment #73
benjifisherComment #74
benjifisherNow that #3258581: Move I18nQueryTrait from content_translation to migrate_drupal is Fixed, we can un-postpone this one. The MR needs to be updated (simplified) after the work in that issue.
This issue still needs an issue summary update, now that we have agreed on the approach. (Again, that means simplifying.) This issue already has the tag for that.
Comment #75
godotislateWith #3258581: Move I18nQueryTrait from content_translation to migrate_drupal in, I've rebased MR 6780 and updated it for a couple new additional fixes to get tests passing.
This MR includes converting all existing migrate source plugins from annotations to attributes, though two new test plugins have been added with annotations to test backwards compatibility. In addition, the
source_moduleproperty is included in the new MigrateSource attribute. There's been discussion that it should not be included because it is strictly for Migrate Drupal, but something like #3443882: Allow attribute-based plugins to discover supplemental attributes to set additional properties would need to get in forsource_moduleto split from the MigrateSource attribute. Currently that issue does not have much momentum, and I'm not sure this issue should continue to be blocked just to wait on that one.That being said, MR 6780 also adapts the multiple/automated provider discovery from annotations to attributes, which leads to some tangled pseudo-multiple-hierarchical code. Work in either #3502913: Add a fallback classloader that can handle missing traits for attribute discovery or #3490322: Use nickic/php-parser for attribute-based plugin discovery to avoid errors would help simplify this, but it's possible to move forward here regardless and then re-work once one of those issues gets in.
Regardless, MR 6780 has sat a while, so it's worth looking it over again to see if some things can be improved or simplified. I don't have time to do that right away, so I'm leaving this in NW for now for anyone to pick it up.
Comment #76
quietone commentedRebased, wrapped one line to 80 chars and an issue summary update.
Comment #77
quietone commentedComment #78
benjifisherI have reviewed most of the changes in the MR. So far, I think all my suggestions are related to comments (including doc blocks).
There are about 115 files where the only changes are replacing annotations with attributes. Even if I ignore all the source plugins, that leaves 18 files, +468/-54 lines, which is more than enough for one MR. So I am convinced that dealing with
source_modulein a separate issue is the right decision.I want to spend some more time reviewing the new automated tests, and I want to do some manual testing. Other than that, and the comment changes I suggested on the MR, I think this issue is ready to go. It is a good sign that the existing tests needed only minor updates.
Given the complexity of this MR and that it is close to ready, I think we should finish this issue instead of waiting on other issues that might make it simpler. We still have a nearly three months before 11.2.0-alpha1 is released. That should give us time to work on some of those issues after this one is fixed.
Comment #79
benjifisherIn addition to the comment changes I requested yesterday, I think the new test needs a little change. Back to NW for that, but I think those are all easy changes to make.
I did some manual testing:
standardprofile.migratemodule.drush phpto exercise the plugin manager.migrate_drupalmodule.In Steps 4 and 6, I used the following commands. I am adding linebreaks here for readability, but I used one line to reduce the output.
I am attaching the results as two text files (one for 11.x, one for the feature branch).
I see the following differences:
'provider'key is an array. In the feature branch, that array is assigned to'providers', and the value of the'provider'key is the first element of that array."minimum_version" => null,.content_entityincludes"deriver" => "\Drupal\migrate\Plugin\migrate\source\ContentEntityDeriver",. In the feature branch, the leading'\'is missing.content_entityincludes"source_module" => "migrate",. In the feature branch, it is"source_module" => "migrate_drupal",.Of these, (1) is intentional. (2) may not be important, but perhaps it is worth being consistent. Probably it is worth changing (3). And (4) is a problem: #3498915: Move content_entity source plugin to migrate module moved the
content_entitysource plugin to themigratemodule and updated thesource_moduleannotation, but the current MR missed that. This issue definitely NW for that.Comment #80
quietone commentedAccepted 2 suggestions and added a change record.
Comment #81
benjifisherI did some more testing today.
Locally, I merged with the current 11.x branch.
Testing with
migrate_drupalFirst, I installed a Drupal 7 site and a Drupal 11 site (using the feature branch). On the Drupal 7 site, I created 100 article and page nodes, using the
devel_generatemodule. On the Drupal 11 site, I installed themigrate_drupal_uimodule. I then imported everything from the Drupal 7 site.There were just a couple of migration messages (from the user migration, which ran into some unsupported permissions, and the
d7_system_filemigration). I got the same messages when I repeated the test with the 11.x branch.All the content (users, files, taxonomy terms, nodes) imported as expected.
Testing with
migrate_plusI re-installed Drupal 11 (using the feature branch). I then added the Import CSV Recipe, which installs some contrib modules (
migrate_plus,migrate_source_csv,migrate_source_ui) and a fewmigrate_plus.migration.*config entities. Following the instructions in the README, I created some users, taxonomy terms, and nodes using the example CSV files from the recipe. It all worked as expected.Summary
I see no problems in today's manual testing.
Comment #82
godotislateI believe all latest MR feedback comments have been addressed.
Comment #83
benjifisher@godotislate:
Thanks for the updates. I agree: you have addressed all my comments on the MR.
The only changes since my last round of testing (Comment #81; see also Comment #79) are a couple of comments and one test file, so I do not need to re-test.
Let's move this issue along!
Comment #85
catchThis looks good.
Some of the test coverage added depends on migrate_drupal which we're intending to deprecate for removal in 12.x but it won't be the only test coverage depending on migrate_drupal so can be handled as part of that process.
There are a couple of things that are quite complex here but they're covered by existing open issues and/or the eventual deprecation of annotations.
Committed/pushed to 11.x, thanks!