diff --git a/appsettings.json b/appsettings.json index 1bfc0ef6e..e1ec0f92e 100644 --- a/appsettings.json +++ b/appsettings.json @@ -192,118 +192,138 @@ "FieldMappingTool": { "Enabled": true, "FieldMaps": [ - { - "FieldMapType": "FieldMergeMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], - "targetField": "Custom.FieldC", - "formatExpression": "{0} \n {1}" - }, - { - "FieldMapType": "FieldValueMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "targetField": "System.State", - "defaultValue": "New", - "valueMapping": { - "Active": "InProgress", - "Resolved": "InProgress", - "Closed": "Done" + { + "FieldMapType": "FieldCalculationMap", + "ApplyTo": [ "Bug", "Task" ], + "expression": "[effort] * [rate]", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, + { + "FieldMapType": "FieldMergeMap", + "ApplyTo": [ "SomeWorkItemType" ], + "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], + "targetField": "Custom.FieldC", + "formatExpression": "{0} \n {1}" + }, + { + "FieldMapType": "FieldValueMap", + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "System.State", + "targetField": "System.State", + "defaultValue": "New", + "valueMapping": { + "Active": "InProgress", + "Resolved": "InProgress", + "Closed": "Done" + } + }, + { + "FieldMapType": "FieldToFieldMap", + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "Microsoft.VSTS.Common.BacklogPriority", + "targetField": "Microsoft.VSTS.Common.StackRank", + "defaultValue": 42 } - }, - { - "FieldMapType": "FieldToFieldMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.Common.BacklogPriority", - "targetField": "Microsoft.VSTS.Common.StackRank", - "defaultValue": 42 - } ], "FieldMapSamples": { - "FieldClearMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.FieldC" - }, - "FieldMergeMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], - "targetField": "Custom.FieldC", - "formatExpression": "{0} \n {1}" - }, - "FieldLiteralMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.SomeField", - "value": "New field value" - }, - "MultiValueConditionalMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFieldsAndValues": { - "Field1": "Value1", - "Field2": "Value2" + "FieldCalculationMap": { + "FieldMapType": "FieldCalculationMap", + "ApplyTo": [ "Bug", "Task" ], + "expression": "[effort] * [rate]", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, + "FieldClearMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "targetField": "Custom.FieldC" + }, + "FieldMergeMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], + "targetField": "Custom.FieldC", + "formatExpression": "{0} \n {1}" + }, + "FieldLiteralMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "targetField": "Custom.SomeField", + "value": "New field value" + }, + "MultiValueConditionalMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceFieldsAndValues": { + "Field1": "Value1", + "Field2": "Value2" + }, + "targetFieldsAndValues": { + "Field1": "Value1", + "Field2": "Value2" + } }, "targetFieldsAndValues": { - "Field1": "Value1", - "Field2": "Value2" - } - }, - "targetFieldsAndValues": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.ReflectedWorkItemId" - }, - "FieldValueMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "targetField": "System.State", - "defaultValue": "StateB", - "valueMapping": { - "StateA": "StateB" - } - }, - "FieldToFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.Common.BacklogPriority", - "targetField": "Microsoft.VSTS.Common.StackRank", - "defaultValue": 42 - }, - "FieldToFieldMultiMap": { - "ApplyTo": [ "SomeWorkItemType", "SomeOtherWorkItemType" ], - "SourceToTargetMappings": { - "SourceField1": "TargetField1", - "SourceField2": "TargetField2" + "ApplyTo": [ "SomeWorkItemType" ], + "targetField": "Custom.ReflectedWorkItemId" + }, + "FieldValueMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "System.State", + "targetField": "System.State", + "defaultValue": "StateB", + "valueMapping": { + "StateA": "StateB" + } + }, + "FieldToFieldMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "Microsoft.VSTS.Common.BacklogPriority", + "targetField": "Microsoft.VSTS.Common.StackRank", + "defaultValue": 42 + }, + "FieldToFieldMultiMap": { + "ApplyTo": [ "SomeWorkItemType", "SomeOtherWorkItemType" ], + "SourceToTargetMappings": { + "SourceField1": "TargetField1", + "SourceField2": "TargetField2" + } + }, + "FieldToTagMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "System.State", + "formatExpression": "ScrumState:{0}" + }, + "FieldToTagFieldMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceFields": [ + "System.Description", + "Microsoft.VSTS.Common.AcceptanceCriteria" + ], + "targetField": "System.Description", + "formatExpression": "{0}

Acceptance Criteria

{1}" + }, + "RegexFieldMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "COMPANY.PRODUCT.Release", + "targetField": "COMPANY.DEVISION.MinorReleaseVersion", + "pattern": "PRODUCT \\d{4}.(\\d{1})", + "replacement": "$1" + }, + "FieldValueToTagMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "sourceField": "Microsoft.VSTS.CMMI.Blocked", + "pattern": "Yes", + "formatExpression": "{0}" + }, + "TreeToTagMap": { + "ApplyTo": [ "SomeWorkItemType" ], + "toSkip": 3, + "timeTravel": 1 } - }, - "FieldToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "formatExpression": "ScrumState:{0}" - }, - "FieldToTagFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ - "System.Description", - "Microsoft.VSTS.Common.AcceptanceCriteria" - ], - "targetField": "System.Description", - "formatExpression": "{0}

Acceptance Criteria

{1}" - }, - "RegexFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "COMPANY.PRODUCT.Release", - "targetField": "COMPANY.DEVISION.MinorReleaseVersion", - "pattern": "PRODUCT \\d{4}.(\\d{1})", - "replacement": "$1" - }, - "FieldValueToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.CMMI.Blocked", - "pattern": "Yes", - "formatExpression": "{0}" - }, - "TreeToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "toSkip": 3, - "timeTravel": 1 - } } }, "TfsChangeSetMappingTool": { diff --git a/docs/_data/reference.fieldmaps.fieldcalculationmap.yaml b/docs/_data/reference.fieldmaps.fieldcalculationmap.yaml index be7d1c87a..22f018eeb 100644 --- a/docs/_data/reference.fieldmaps.fieldcalculationmap.yaml +++ b/docs/_data/reference.fieldmaps.fieldcalculationmap.yaml @@ -26,7 +26,31 @@ configurationSamples: - name: sample order: 1 description: - code: There is no sample, but you can check the classic below for a general feel. + code: >- + { + "MigrationTools": { + "Version": "16.0", + "CommonTools": { + "FieldMappingTool": { + "FieldMaps": [ + { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + } + ] + } + } + } + } sampleFor: MigrationTools.Tools.FieldCalculationMapOptions - name: classic order: 3 @@ -34,11 +58,16 @@ configurationSamples: code: >- { "$type": "FieldCalculationMapOptions", - "expression": null, - "parameters": {}, - "targetField": null, + "expression": "[effort] * [rate]", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost", "ApplyTo": [ - "*" + "*", + "Bug", + "Task" ] } sampleFor: MigrationTools.Tools.FieldCalculationMapOptions diff --git a/docs/_data/reference.tools.fieldmappingtool.yaml b/docs/_data/reference.tools.fieldmappingtool.yaml index 4b58d116f..6c0b9c556 100644 --- a/docs/_data/reference.tools.fieldmappingtool.yaml +++ b/docs/_data/reference.tools.fieldmappingtool.yaml @@ -33,6 +33,19 @@ configurationSamples: "FieldMappingTool": { "Enabled": "True", "FieldMaps": [ + { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, { "ApplyTo": [ "SomeWorkItemType" @@ -70,6 +83,19 @@ configurationSamples: } ], "FieldMapSamples": { + "FieldCalculationMap": { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, "FieldClearMap": { "ApplyTo": [ "SomeWorkItemType" diff --git a/docs/collections/_reference/reference.fieldmaps.fieldcalculationmap.md b/docs/collections/_reference/reference.fieldmaps.fieldcalculationmap.md index de6f197f0..e279d960a 100644 --- a/docs/collections/_reference/reference.fieldmaps.fieldcalculationmap.md +++ b/docs/collections/_reference/reference.fieldmaps.fieldcalculationmap.md @@ -27,7 +27,31 @@ configurationSamples: - name: sample order: 1 description: - code: There is no sample, but you can check the classic below for a general feel. + code: >- + { + "MigrationTools": { + "Version": "16.0", + "CommonTools": { + "FieldMappingTool": { + "FieldMaps": [ + { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + } + ] + } + } + } + } sampleFor: MigrationTools.Tools.FieldCalculationMapOptions - name: classic order: 3 @@ -35,11 +59,16 @@ configurationSamples: code: >- { "$type": "FieldCalculationMapOptions", - "expression": null, - "parameters": {}, - "targetField": null, + "expression": "[effort] * [rate]", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost", "ApplyTo": [ - "*" + "*", + "Bug", + "Task" ] } sampleFor: MigrationTools.Tools.FieldCalculationMapOptions diff --git a/docs/collections/_reference/reference.tools.fieldmappingtool.md b/docs/collections/_reference/reference.tools.fieldmappingtool.md index 823af7d4f..59943b49d 100644 --- a/docs/collections/_reference/reference.tools.fieldmappingtool.md +++ b/docs/collections/_reference/reference.tools.fieldmappingtool.md @@ -34,6 +34,19 @@ configurationSamples: "FieldMappingTool": { "Enabled": "True", "FieldMaps": [ + { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, { "ApplyTo": [ "SomeWorkItemType" @@ -71,6 +84,19 @@ configurationSamples: } ], "FieldMapSamples": { + "FieldCalculationMap": { + "ApplyTo": [ + "Bug", + "Task" + ], + "expression": "[effort] * [rate]", + "FieldMapType": "FieldCalculationMap", + "parameters": { + "effort": "Custom.EstimatedHours", + "rate": "Custom.HourlyRate" + }, + "targetField": "Custom.EstimatedCost" + }, "FieldClearMap": { "ApplyTo": [ "SomeWorkItemType" diff --git a/src/MigrationTools.ConsoleDataGenerator/ClassDataLoader.cs b/src/MigrationTools.ConsoleDataGenerator/ClassDataLoader.cs index 2a945a067..b00e3a6ad 100644 --- a/src/MigrationTools.ConsoleDataGenerator/ClassDataLoader.cs +++ b/src/MigrationTools.ConsoleDataGenerator/ClassDataLoader.cs @@ -188,8 +188,12 @@ static string ConvertSectionWithPathToJson(IConfiguration configuration, IConfig if (currentObject[key] is JArray array) { JObject itemObject = sectionObject as JObject ?? new JObject(); - // Add ObjectName and OptionFor to the object - itemObject.AddFirst(new JProperty(option.ConfigurationMetadata.ObjectName, option.ConfigurationMetadata.OptionFor)); + if (!itemObject.ContainsKey(option.ConfigurationMetadata.ObjectName)) + { + // Add ObjectName and OptionFor to the object + itemObject.AddFirst(new JProperty(option.ConfigurationMetadata.ObjectName, option.ConfigurationMetadata.OptionFor)); + } + array.Add(itemObject); } } diff --git a/src/MigrationTools.ConsoleDataGenerator/appsettings.json b/src/MigrationTools.ConsoleDataGenerator/appsettings.json deleted file mode 100644 index 1bfc0ef6e..000000000 --- a/src/MigrationTools.ConsoleDataGenerator/appsettings.json +++ /dev/null @@ -1,504 +0,0 @@ -{ - "Serilog": { - "Using": [ - "Serilog.Sinks.Console" - ], - "MinimumLevel": { - "Default": "Information", - "Override": { - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Verbose" - } - } - }, - "MigrationTools": { - "EndpointDefaults": { - "TfsEndpoint": { - "Collection": "", - "Project": "", - "AllowCrossProjectLinking": false, - "ReflectedWorkItemIdField": "Custom.ReflectedWorkItemId", - "Authentication": { - "AuthenticationMode": "AccessToken", - "AccessToken": "", - "NetworkCredentials": { - "UserName": "", - "Password": "", - "Domain": "" - } - }, - "AuthenticationMode": "AccessToken", - "LanguageMaps": { - "AreaPath": "Area", - "IterationPath": "Iteration" - } - }, - "TfsTeamProjectEndpoint": { - "Collection": "", - "Project": "", - "AllowCrossProjectLinking": false, - "ReflectedWorkItemIdField": "Custom.ReflectedWorkItemId", - "Authentication": { - "AuthenticationMode": "AccessToken", - "AccessToken": "", - "NetworkCredentials": { - "UserName": "", - "Password": "", - "Domain": "" - } - }, - "AuthenticationMode": "AccessToken", - "LanguageMaps": { - "AreaPath": "Area", - "IterationPath": "Iteration" - } - } - }, - "EndpointSamples": { - "TfsTeamProjectEndpoint": { - "Collection": "https://dev.azure.com/nkdagility-preview/", - "Project": "migrationSource1", - "AllowCrossProjectLinking": false, - "ReflectedWorkItemIdField": "Custom.ReflectedWorkItemId", - "Authentication": { - "AuthenticationMode": "AccessToken", - "AccessToken": "jklsadhjksahfkjsdhjksahsadjhksadhsad", - "NetworkCredentials": { - "UserName": "", - "Password": "", - "Domain": "" - } - } - }, - "TfsEndpoint": { - "Collection": "https://dev.azure.com/nkdagility-preview/", - "Project": "migrationSource1", - "AllowCrossProjectLinking": false, - "ReflectedWorkItemIdField": "Custom.ReflectedWorkItemId", - "Authentication": { - "AuthenticationMode": "AccessToken", - "AccessToken": "jklsadhjksahfkjsdhjksahsadjhksadhsad", - "NetworkCredentials": { - "UserName": "", - "Password": "", - "Domain": "" - } - }, - "LanguageMaps": { - "AreaPath": "Area", - "IterationPath": "Iteration" - } - }, - "AzureDevOpsEndpoint": { - "AuthenticationMode": "AccessToken", - "AccessToken": "jklsadhjksahfkjsdhjksahsadjhksadhsad", - "Organisation": "https://dev.azure.com/xxx/", - "Project": "myProject", - "ReflectedWorkItemIdField": "Custom.ReflectedWorkItemId" - } - }, - "CommonTools": { - "FieldMappingTool": { - "Enabled": false, - "FieldMaps": [], - "FieldMapDefaults": { - "ApplyTo": [ "*" ] - } - }, - "TfsChangeSetMappingTool": { - "Enabled": false, - "File": null - }, - "TfsNodeStructureTool": { - "Enabled": true, - "Areas": { - "Filters": [], - "Mappings": { - } - }, - "Iterations": { - "Filters": [], - "Mappings": { - } - }, - "ShouldCreateMissingRevisionPaths": true, - "ReplicateAllExistingNodes": true - }, - "TfsTeamSettingsTool": { - "Enabled": true, - "MigrateTeamSettings": true, - "UpdateTeamSettings": true, - "MigrateTeamCapacities": true, - "Teams": [] - }, - "TfsWorkItemLinkTool": { - "Enabled": true, - "FilterIfLinkCountMatches": true, - "SaveAfterEachLinkIsAdded": false - }, - "TfsRevisionManagerTool": { - "Enabled": true, - "ReplayRevisions": true, - "MaxRevisions": 0 - }, - "TfsAttachmentTool": { - "RefName": "TfsAttachmentTool", - "Enabled": true, - "ExportBasePath": "c:\\temp\\WorkItemAttachmentExport", - "MaxAttachmentSize": 480000000 - }, - "StringManipulatorTool": { - "Enabled": true, - "MaxStringLength": 1000000, - "Manipulators": [] - }, - "TfsUserMappingTool": { - "Enabled": false, - "UserMappingFile": "C:\\temp\\userExport.json", - "IdentityFieldsToCheck": [ - "System.AssignedTo", - "System.ChangedBy", - "System.CreatedBy", - "Microsoft.VSTS.Common.ActivatedBy", - "Microsoft.VSTS.Common.ResolvedBy", - "Microsoft.VSTS.Common.ClosedBy" - ] - }, - "WorkItemTypeMappingTool": { - "Enabled": false, - "Mappings": { - "Source Work Item Type Name": "Target Work Item Type Name" - } - }, - "TfsWorkItemEmbededLinkTool": { - "Enabled": true - }, - "TfsEmbededImagesTool": { - "Enabled": true - }, - "TfsGitRepositoryTool": { - "Enabled": true, - "Mappings": { - } - } - }, - "CommonToolSamples": { - "TfsGitRepositoryTool": { - "Enabled": true, - "Mappings": { - "RepoInSource": "RepoInTarget" - } - }, - "FieldMappingTool": { - "Enabled": true, - "FieldMaps": [ - { - "FieldMapType": "FieldMergeMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], - "targetField": "Custom.FieldC", - "formatExpression": "{0} \n {1}" - }, - { - "FieldMapType": "FieldValueMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "targetField": "System.State", - "defaultValue": "New", - "valueMapping": { - "Active": "InProgress", - "Resolved": "InProgress", - "Closed": "Done" - } - }, - { - "FieldMapType": "FieldToFieldMap", - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.Common.BacklogPriority", - "targetField": "Microsoft.VSTS.Common.StackRank", - "defaultValue": 42 - } - ], - "FieldMapSamples": { - "FieldClearMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.FieldC" - }, - "FieldMergeMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ "Custom.FieldA", "Custom.FieldB" ], - "targetField": "Custom.FieldC", - "formatExpression": "{0} \n {1}" - }, - "FieldLiteralMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.SomeField", - "value": "New field value" - }, - "MultiValueConditionalMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFieldsAndValues": { - "Field1": "Value1", - "Field2": "Value2" - }, - "targetFieldsAndValues": { - "Field1": "Value1", - "Field2": "Value2" - } - }, - "targetFieldsAndValues": { - "ApplyTo": [ "SomeWorkItemType" ], - "targetField": "Custom.ReflectedWorkItemId" - }, - "FieldValueMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "targetField": "System.State", - "defaultValue": "StateB", - "valueMapping": { - "StateA": "StateB" - } - }, - "FieldToFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.Common.BacklogPriority", - "targetField": "Microsoft.VSTS.Common.StackRank", - "defaultValue": 42 - }, - "FieldToFieldMultiMap": { - "ApplyTo": [ "SomeWorkItemType", "SomeOtherWorkItemType" ], - "SourceToTargetMappings": { - "SourceField1": "TargetField1", - "SourceField2": "TargetField2" - } - }, - "FieldToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "System.State", - "formatExpression": "ScrumState:{0}" - }, - "FieldToTagFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceFields": [ - "System.Description", - "Microsoft.VSTS.Common.AcceptanceCriteria" - ], - "targetField": "System.Description", - "formatExpression": "{0}

Acceptance Criteria

{1}" - }, - "RegexFieldMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "COMPANY.PRODUCT.Release", - "targetField": "COMPANY.DEVISION.MinorReleaseVersion", - "pattern": "PRODUCT \\d{4}.(\\d{1})", - "replacement": "$1" - }, - "FieldValueToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "sourceField": "Microsoft.VSTS.CMMI.Blocked", - "pattern": "Yes", - "formatExpression": "{0}" - }, - "TreeToTagMap": { - "ApplyTo": [ "SomeWorkItemType" ], - "toSkip": 3, - "timeTravel": 1 - } - } - }, - "TfsChangeSetMappingTool": { - "Enabled": true, - "File": "c:\\changesetmappings.json" - }, - "TfsNodeStructureTool": { - "Enabled": true, - "Areas": { - "Filters": [ "*\\Team 1,*\\Team 1\\**" ], - "Mappings": { - "^migrationSource1([\\\\]?.*)$": "MigrationTest5$1", - "^Skypoint Cloud([\\\\]?.*)$": "MigrationTest5$1", - "^7473924d-c47f-4089-8f5c-077c728b576e([\\\\]?.*)$": "MigrationTest5$1" - } - }, - "Iterations": { - "Filters": [ "*\\Sprint*", "*\\Sprint*\\**" ], - "Mappings": { - "^migrationSource1([\\\\]?.*)$": "MigrationTest5$1", - "^Skypoint Cloud([\\\\]?.*)$": "MigrationTest5$1", - "^7473924d-c47f-4089-8f5c-077c728b576e([\\\\]?.*)$": "MigrationTest5$1" - } - }, - "ShouldCreateMissingRevisionPaths": true, - "ReplicateAllExistingNodes": true - }, - "TfsTeamSettingsTool": { - "Enabled": true, - "MigrateTeamSettings": true, - "UpdateTeamSettings": true, - "MigrateTeamCapacities": true, - "Teams": [ "Team 1", "Team 2" ] - }, - "TfsWorkItemLinkTool": { - "Enabled": true, - "FilterIfLinkCountMatches": true, - "SaveAfterEachLinkIsAdded": false - }, - "TfsRevisionManagerTool": { - "Enabled": true, - "ReplayRevisions": true, - "MaxRevisions": 0 - }, - "TfsAttachmentTool": { - "RefName": "TfsAttachmentTool", - "Enabled": true, - "ExportBasePath": "c:\\temp\\WorkItemAttachmentExport", - "MaxAttachmentSize": 480000000 - }, - "StringManipulatorTool": { - "Enabled": true, - "MaxStringLength": 1000000, - "Manipulators": [ - { - "$type": "RegexStringManipulator", - "Enabled": true, - "Pattern": "[^( -~)\n\r\t]+", - "Replacement": "", - "Description": "Remove invalid characters from the end of the string" - } - ] - }, - "TfsUserMappingTool": { - "Enabled": true, - "UserMappingFile": "C:\\temp\\userExport.json", - "IdentityFieldsToCheck": [ - "System.AssignedTo", - "System.ChangedBy", - "System.CreatedBy", - "Microsoft.VSTS.Common.ActivatedBy", - "Microsoft.VSTS.Common.ResolvedBy", - "Microsoft.VSTS.Common.ClosedBy" - ] - }, - "WorkItemTypeMappingTool": { - "Enabled": true, - "Mappings": { - "User Story": "Product Backlog Item" - } - }, - "TfsWorkItemEmbededLinkTool": { - "Enabled": true - }, - "TfsEmbededImagesTool": { - "Enabled": true - } - }, - "ProcessorDefaults": { - "AzureDevOpsPipelineProcessor": { - "Enabled": false, - "MigrateBuildPipelines": true, - "MigrateReleasePipelines": true, - "MigrateTaskGroups": true, - "MigrateVariableGroups": true, - "MigrateServiceConnections": true, - "BuildPipelines": null, - "ReleasePipelines": null, - "SourceName": "sourceName", - "TargetName": "targetName" - }, - "TfsWorkItemMigrationProcessor": { - "Enabled": false, - "UpdateCreatedDate": true, - "UpdateCreatedBy": true, - "WIQLQuery": "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan','Shared Steps','Shared Parameter','Feedback Request') ORDER BY [System.ChangedDate] desc", - "FixHtmlAttachmentLinks": true, - "WorkItemCreateRetryLimit": 5, - "FilterWorkItemsThatAlreadyExistInTarget": false, - "PauseAfterEachWorkItem": false, - "AttachRevisionHistory": false, - "GenerateMigrationComment": true, - "SourceName": "Source", - "TargetName": "Target", - "WorkItemIDs": [], - "MaxGracefulFailures": 0, - "SkipRevisionWithInvalidIterationPath": false, - "SkipRevisionWithInvalidAreaPath": false - } - }, - "ProcessorSamples": { - "AzureDevOpsPipelineProcessor": { - "Enabled": false, - "MigrateBuildPipelines": true, - "MigrateReleasePipelines": true, - "MigrateTaskGroups": true, - "MigrateVariableGroups": true, - "MigrateServiceConnections": true, - "BuildPipelines": null, - "ReleasePipelines": null, - "SourceName": "sourceName", - "TargetName": "targetName" - }, - "TfsWorkItemMigrationProcessor": { - "Enabled": false, - "WIQLQuery": "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan','Shared Steps','Shared Parameter','Feedback Request') ORDER BY [System.ChangedDate] desc", - "FilterWorkItemsThatAlreadyExistInTarget": false, - "SourceName": "Source", - "TargetName": "Target" - }, - "ExportUsersForMappingProcessor": { - "Enabled": true, - "WIQLQuery": "SELECT [System.Id] FROM WorkItems WHERE [System.TeamProject] = @TeamProject AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan','Shared Steps','Shared Parameter','Feedback Request') ORDER BY [System.ChangedDate] desc", - "OnlyListUsersInWorkItems": true, - "SourceName": "Source", - "TargetName": "Target" - } - }, - "Infrastructure": { - "ClassNameChangeMappings": { - "TfsGitRepositoryTool": "TfsGitRepositoryTool", - "TfsTeamSettingsEnricher": "TfsTeamSettingsTool", - "TfsWorkItemLinkEnricher": "TfsWorkItemLinkTool", - "TfsAttachmentEnricher": "TfsAttachmentTool", - "StringManipulatorEnricher": "StringManipulatorTool", - "TfsUserMappingEnricher": "TfsUserMappingTool", - "FieldBlankMap": "FieldClearMap", - "FieldtoTagMap": "FieldToTagFieldMap", - "TreeToTagMap": "TreeToTagFieldMap", - "TeamMigration": "TfsTeamSettingsProcessor", - "WorkItemQueryMigration": "TfsSharedQueryProcessor", - "WorkItemMigration": "TfsWorkItemMigrationProcessor", - "WorkItemMigrationContext": "TfsWorkItemMigrationProcessor", - "TfsTeamProjectConfig": "TfsTeamProjectEndpoint", - "WorkItemGitRepoMappingTool": "TfsGitRepositoryTool", - "WorkItemFieldMappingTool": "FieldMappingTool", - "CreateTeamFolders": "TfsCreateTeamFoldersProcessor", - "ExportProfilePicture": "TfsExportProfilePictureFromADProcessor", - "ExportProfilePictureFromAD": "TfsExportProfilePictureFromADProcessor", - "ImportProfilePicture": "TfsImportProfilePictureProcessor", - "ImportProfilePictureFromAD": "TfsImportProfilePictureProcessor", - "ExportUsersForMapping": "TfsExportUsersForMappingProcessor", - "ExportUsersForMappingContext": "TfsExportUsersForMappingProcessor", - "ExportTeamListProcessor": "TfsExportTeamListProcessor", - "ExportTeamList": "TfsExportTeamListProcessor", - "ExportUsersForMappingProcessor": "TfsExportUsersForMappingProcessor", - "TestConfigurationsMigration": "TfsTestConfigurationsMigrationProcessor", - "TestConfigurationsMigrationProcessor": "TfsTestConfigurationsMigrationProcessor", - "TestConfigurationsMigrationContext": "TfsTestConfigurationsMigrationProcessor", - "TestPlansAndSuitesMigration": "TfsTestPlansAndSuitesMigrationProcessor", - "TestPlansAndSuitesMigrationProcessor": "TfsTestPlansAndSuitesMigrationProcessor", - "TestPlansAndSuitesMigrationContext": "TfsTestPlansAndSuitesMigrationProcessor", - "TestVariablesMigration": "TfsTestVariablesMigrationProcessor", - "TestVariablesMigrationProcessor": "TfsTestVariablesMigrationProcessor", - "TestVariablesMigrationContext": "TfsTestVariablesMigrationProcessor", - "WorkItemBulkEditProcessor": "TfsWorkItemBulkEditProcessor", - "WorkItemUpdate": "TfsWorkItemBulkEditProcessor", - "WorkItemDelete": "TfsWorkItemDeleteProcessor", - "WorkItemDeleteProcessor": "TfsWorkItemDeleteProcessor", - "WorkItemPostProcessingContext": "TfsWorkItemOverwriteProcessor", - "WorkItemPostProcessing": "TfsWorkItemOverwriteProcessor", - "WorkItemPostProcessingProcessor": "TfsWorkItemOverwriteProcessor", - "WorkItemUpdateAreasAsTagsContext": "TfsWorkItemOverwriteProcessor", - "WorkItemUpdateAreasAsTagsProcessor": "TfsWorkItemOverwriteProcessor" - } - } - } -}