nkdAgility/azure-devops-migration-tools

[Bug]: Area and Iteration mappings appear to get overwritten by another processor

sonofhammer opened this issue · 2 comments

Version

  • I confirm that I am using the latest version

Source Version

Azure DevOps Service

Target Version

Azure DevOps Service

Relevant configuration

{
      "$type": "WorkItemMigrationConfig",
      "Enabled": true,
      "ReplayRevisions": true,
      "PrefixProjectToNodes": false,
      "UpdateCreatedDate": true,
      "UpdateCreatedBy": true,
      "WIQLQueryBit": "AND [System.WorkItemType] IN ('Test Case')",
      "WIQLOrderBit": "[System.ChangedDate] desc",
      "LinkMigration": true,
      "AttachmentMigration": true,
      "AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
      "FixHtmlAttachmentLinks": true,
      "SkipToFinalRevisedWorkItemType": false,
      "WorkItemCreateRetryLimit": 5,
      "FilterWorkItemsThatAlreadyExistInTarget": true,
      "PauseAfterEachWorkItem": false,
      "AttachmentMaxSize": 480000000,
      "AttachRevisionHistory": true,
      "LinkMigrationSaveEachAsAdded": false,
      "GenerateMigrationComment": false,
      "WorkItemIDs": null,
      "MaxRevisions": 0,
      "UseCommonNodeStructureEnricherConfig": false,
      "StopMigrationOnMissingAreaIterationNodes": false,
      "NodeBasePaths": [],
      "AreaMaps": {
        "^OldProject.*": "NewProject\\",
        "AnotherOldProject": "NewProject\\"
      },
      "IterationMaps": {
        "^OldProject.*": "NewProject\\Descoped",
        "AnotherOldProject.*": "NewProject\\Descoped"
      },
      "MaxGracefulFailures": 0,
      "SkipRevisionWithInvalidIterationPath": false,
      "SkipRevisionWithInvalidAreaPath": false
    },
    {
      "$type": "TestPlansAndSuitesMigrationConfig",
      "Enabled": true,
      "PrefixProjectToNodes": false,
      "OnlyElementsWithTag": null,
      "TestPlanQueryBit": null,
      "RemoveAllLinks": false,
      "MigrationDelay": 0,
      "UseCommonNodeStructureEnricherConfig": false,
      "NodeBasePaths": [],
      "AreaMaps": null,
      "IterationMaps": null,
      "RemoveInvalidTestSuiteLinks": false,
      "FilterCompleted": false
    },

Relevant log output

No response

What happened?

I have two processors. A WorkItemMigrationConfig and TestPlansAndSuitesMigrationConfig

WorkItemMigrationConfig has Mappings for Area maps and Iteration maps, TestPlansAndSuitesMigrationConfig does not.

When both are enabled, WorkItemMigrationConfig fails to use its maps, and is instead uses maps from TestPlansAndSuitesMigrationConfig, and FAILS to map missing iterations because TestPlansAndSuitesMigrationConfig mappings are null.

When TestPlansAndSuitesMigrationConfig is disabled, WorkItemMigrationConfig uses its correct mappings and works correctly.

When I add identical area and iteration maps to the TestPlansAndSUitesMigrationConfig, and enable both processors, the WorkItemMigrationConfig works as expected, leading me to believe that WorkItemMigrationConfig is using maps from TestPlansAndSuitesMigrationConfig.

Debug in Visual Studio

  • Visual Studio Debug

Both WorkItemMigrationConfig abd TestPlansAndSuitesMigrationConfig use the same instance of NodeStructureEnricherConfig. Your second processor is overriding the config of the first.

If you want to use both processors in the same config I recommend that you use UseCommonNodeStructureEnricherConfig and config the modes there.

That makes sense. Thank you.