private async Task ExecuteValidation(CommandOption validate) { bool showedHelp = false; ConfigJson configJson = null; try { string configFileName = validate.Value(); ConfigReaderJson configReaderJson = new ConfigReaderJson(configFileName); configJson = configReaderJson.Deserialize(); var validatorContext = new ValidationContext(configJson); using (var heartbeat = new ValidationHeartbeatLogger(validatorContext.WorkItemsMigrationState, validatorContext, validatorContext.Config.HeartbeatFrequencyInSeconds)) { await new Validator(validatorContext).Validate(); heartbeat.Beat(); } } catch (CommandParsingException e) { Logger.LogError(LogDestination.All, e, "Invalid command line option(s):"); commandLineApplication.ShowHelp(); showedHelp = true; } catch (Exception e) when(e is ValidationException) { Logger.LogError(LogDestination.All, e, "Validation error:"); } catch (Exception e) { Logger.LogError(LogDestination.All, e, "Unexpected error:"); } finally { if (!showedHelp && configJson != null) { SendSummaryEmail(configJson); } } }
private async Task ExecuteMigration(CommandOption migrate) { bool showedHelp = false; ConfigJson configJson = null; try { string configFileName = migrate.Value(); ConfigReaderJson configReaderJson = new ConfigReaderJson(configFileName); configJson = configReaderJson.Deserialize(); var validatorContext = new ValidationContext(configJson); using (var heartbeat = new ValidationHeartbeatLogger(validatorContext.WorkItemsMigrationState, validatorContext, validatorContext.Config.HeartbeatFrequencyInSeconds)) { await new Validator(validatorContext).Validate(); heartbeat.Beat(); } //TODO: Create a common method to take the validator context and created a migration context var migrationContext = new MigrationContext(configJson); migrationContext.WorkItemIdsUris = validatorContext.WorkItemIdsUris; migrationContext.WorkItemTypes = validatorContext.TargetTypesAndFields; migrationContext.IdentityFields = validatorContext.IdentityFields; migrationContext.TargetAreaPaths = validatorContext.TargetAreaPaths; migrationContext.TargetIterationPaths = validatorContext.TargetIterationPaths; migrationContext.WorkItemsMigrationState = validatorContext.WorkItemsMigrationState; migrationContext.TargetIdToSourceHyperlinkAttributeId = validatorContext.TargetIdToSourceHyperlinkAttributeId; migrationContext.ValidatedWorkItemLinkRelationTypes = validatorContext.ValidatedWorkItemLinkRelationTypes; migrationContext.SourceFields = validatorContext.SourceFields; migrationContext.FieldsThatRequireSourceProjectToBeReplacedWithTargetProject = validatorContext.FieldsThatRequireSourceProjectToBeReplacedWithTargetProject; using (var heartbeat = new MigrationHeartbeatLogger(migrationContext.WorkItemsMigrationState, migrationContext.Config.HeartbeatFrequencyInSeconds)) { await new Migrator(migrationContext).Migrate(); heartbeat.Beat(); } } catch (CommandParsingException e) { Logger.LogError(LogDestination.All, e, "Invalid command line option(s):"); commandLineApplication.ShowHelp(); showedHelp = true; } catch (Exception e) when(e is ValidationException) { Logger.LogError(LogDestination.All, e, "Validation error:"); } catch (Exception e) when(e is MigrationException) { Logger.LogError(LogDestination.All, e, "Migration error:"); } catch (Exception e) { Logger.LogError(LogDestination.All, e, "Unexpected error:"); } finally { if (!showedHelp && configJson != null) { SendSummaryEmail(configJson); } } }