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]);
        }
예제 #3
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);
        }