public static Task <BuildDefinitionTemplate> AddTemplateAsync(this BuildHttpClient source, TeamProject project, BuildDefinitionTemplate template, CancellationToken cancellationToken) => source.SaveTemplateAsync(template, project.Id, template.Name, cancellationToken: cancellationToken);
private async Task <ICollection <BuildDefinitionTemplate> > GetBuildTemplatesAsync(TfsMajorVersion tfsVersion, bool fromBuildDefinitions) { var buildTemplates = new List <BuildDefinitionTemplate>(); using (var dialog = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, false)) { var result = dialog.ShowDialog(Application.Current.MainWindow.GetIWin32Window()); if (result == System.Windows.Forms.DialogResult.OK && dialog.SelectedProjects != null && dialog.SelectedProjects.Length > 0) { var teamProjectCollection = dialog.SelectedTeamProjectCollection; var teamProject = dialog.SelectedProjects.First(); var buildServer = teamProjectCollection.GetClient <BuildHttpClient>(); if (fromBuildDefinitions) { var buildDefinitions = new List <BuildDefinition>(); if (tfsVersion == TfsMajorVersion.TeamServices) { // Use a single API call if available. var projectBuildDefinitions = await buildServer.GetFullDefinitionsAsync(project : teamProject.Name); buildDefinitions.AddRange(projectBuildDefinitions); } else { // Otherwise get the base info first and then individual details. var baseBuildDefinitions = await buildServer.GetDefinitionsAsync(project : teamProject.Name); foreach (var baseBuildDefinition in baseBuildDefinitions.Where(b => b.Type == DefinitionType.Build)) { var buildDefinition = await buildServer.GetDefinitionAsync(project : teamProject.Name, definitionId : baseBuildDefinition.Id); buildDefinitions.Add(buildDefinition); } } buildDefinitions = buildDefinitions.Where(b => b.Type == DefinitionType.Build).OrderBy(b => b.Name).ToList(); if (!buildDefinitions.Any()) { MessageBox.Show("The selected Team Project does not contain any build definitions.", "No Build Definitions", MessageBoxButton.OK, MessageBoxImage.Information); } else { foreach (var buildDefinition in buildDefinitions) { var template = new BuildDefinitionTemplate { Id = buildDefinition.Name.Replace(" ", ""), Name = buildDefinition.Name, Description = "Build template based on build definition \"{0}\" in Team Project \"{1}\"".FormatCurrent(buildDefinition.Name, teamProject.Name), Template = buildDefinition }; buildTemplates.Add(template); } } } else { var buildTemplatesFromProject = await buildServer.GetTemplatesAsync(project : teamProject.Name); buildTemplatesFromProject = buildTemplatesFromProject.Where(t => t.Template != null && t.Template.Project != null).OrderBy(t => t.Name).ToList(); if (!buildTemplatesFromProject.Any()) { MessageBox.Show("The selected Team Project does not contain any build templates.", "No Build Templates", MessageBoxButton.OK, MessageBoxImage.Information); } else { foreach (var buildTemplate in buildTemplatesFromProject) { buildTemplates.Add(buildTemplate); } } } } } if (buildTemplates.Any()) { var picker = new ItemsPickerDialog(); picker.ItemDisplayMemberPath = nameof(BuildDefinitionTemplate.Name); picker.Owner = Application.Current.MainWindow; picker.Title = fromBuildDefinitions ? "Select the build definitions to import" : "Select the build templates to import"; picker.SelectionMode = SelectionMode.Multiple; picker.AvailableItems = buildTemplates; if (picker.ShowDialog() == true) { return(picker.SelectedItems.Cast <BuildDefinitionTemplate>().ToArray()); } } return(new BuildDefinitionTemplate[0]); }
public MigratedBuildTemplate(BuildDefinitionTemplate template) { Name = template.Name; }
private async Task <MigratedBuildTemplate> MigrateTemplateAsync(MigrationContext context, BuildDefinitionTemplate template, IEnumerable <BuildDefinitionTemplate> existingTemplates, CancellationToken cancellationToken) { Logger.StartActivity($"Migrating build template '{template.Name}'"); var migratedItem = new MigratedBuildTemplate(template); using (var logger = Logger.BeginScope("MigrateBuildTemplate")) { try { //Does the template already exist var existingItem = existingTemplates.FirstOrDefault(t => String.Compare(t.Name, template.Name, true) == 0); if (existingItem != null) { Logger.Info($"Build template '{migratedItem.Name}' already exists, skipping"); migratedItem.Skipped = true; return(migratedItem); } ; template = await context.TargetService.AddTemplateAsync(context.TargetProject, template, cancellationToken).ConfigureAwait(false); Logger.Debug($"Created build template '{template.Name}' with Id '{template.Id}'"); } catch (Exception e) { migratedItem.Error = e; Logger.Error(e); }; }; return(migratedItem); }