protected async override Task <bool> MigrateItemAsync(SingleMigrationWorkItem migrationItem) { var sucessFlag = false; var exponentialBackoffFactor = 5000; var retryCount = 3; await ExecutionSupports.Retry(async() => { await client.UpdateWorkItemFieldsAsync(migrationItem.WorkItemRef.Id, migrationItem.Fields); Insights.Trace($"{migrationItem.WorkItemRef.Id}", migrationItem.Fields); Insights.Debug("$Migrated item: {migrationItem.WorkItemRef.Id}"); sucessFlag = true; }, exception => { Insights.TrackException(exception); sucessFlag = false; }, exponentialBackoffFactor, retryCount); return(sucessFlag); }
protected async Task EnsureRepositoriesExistsAsync( ProjectManifest manifest, RepositoryService repoService, Kdoctl.CliServices.AzDoServices.Dtos.Project project, bool projectWasAbsent) { if (project != null && manifest.Repositories != null && manifest.Repositories.Any()) { foreach (var repo in manifest.Repositories) { if (!string.IsNullOrWhiteSpace(repo.Name)) { var reposCollection = await repoService.GetRepositoryListAsync(project.Id); var repository = reposCollection .FirstOrDefault(r => r.Name.Equals(repo.Name, StringComparison.OrdinalIgnoreCase)); if (repository == null) { using var op = Insights.BeginOperation($"Creating Repository {repo.Name}...", "Repository"); await ExecutionSupports.Retry(async() => { repository = await repoService.CreateAsync(project.Id, repo.Name); }, exception => { Insights.TrackException(exception); }); op.EndWithSuccess("Succeed"); } using var opPermissions = Insights.BeginOperation($"Setting up permissions for repository {repo.Name}...", "RepoPermissions"); await EnsureRepositoryPermissionsAsync(project, repo, repository); } } await DeleteDefaultRepoAsync(repoService, project, projectWasAbsent); } }