コード例 #1
0
        protected override void ProcessRecord()
        {
            var baseResourceList = new List <DeploymentResource>();
            var projects         = new List <DashboardProjectResource>();
            var environments     = new List <DashboardEnvironmentResource>();
            var releases         = new List <ReleaseResource>();

            //Using the dashboard for this because it involves only 1 API call VS calling Projects/Environmnets.FindByName() plenty of times.
            var rawDashboard = _connection.Repository.Dashboards.GetDashboard();

            if (ProjectName == null)
            {
                projects.AddRange(rawDashboard.Projects);
            }
            else
            {
                foreach (var name in ProjectName)
                {
                    var project = rawDashboard.Projects.FirstOrDefault(p => p.Name == name);
                    if (project != null)
                    {
                        projects.Add(project);
                    }
                    else
                    {
                        //todo Handle this better
                        var message = string.Format("Project not found: {0}", name);
                        WriteObject(message);
                    };
                }
            }

            foreach (var dashboardProject in projects)
            {
                var project = _connection.Repository.Projects.Get(dashboardProject.Id);

                switch (ParameterSetName)
                {
                case ByVersion:
                    foreach (var version in ReleaseVersion)
                    {
                        try
                        {
                            releases.Add(_connection.Repository.Projects.GetReleaseByVersion(project, version));
                        }
                        catch (Exception e)
                        {
                            WriteError(new ErrorRecord(e, "ResourceNotFound", ErrorCategory.ObjectNotFound, e.Message));
                        }
                    }
                    break;

                case ByLatest:

                    var projectReleases = new List <ReleaseResource>();

                    if (LatestReleases > 30)
                    {
                        projectReleases = _connection.Repository.Projects.GetAllReleases(project).ToList();
                    }
                    else
                    {
                        projectReleases = _connection.Repository.Projects.GetReleases(project).Items.ToList();
                    }

                    if (projectReleases.Count > LatestReleases)
                    {
                        releases.AddRange(projectReleases.GetRange(0, LatestReleases));
                    }
                    else
                    {
                        releases.AddRange(projectReleases);
                    }

                    break;

                default:
                    releases.AddRange(_connection.Repository.Projects.GetAllReleases(project).ToList());
                    break;
                }
            }

            if (EnvironmentName == null)
            {
                environments = rawDashboard.Environments;
            }
            else
            {
                foreach (var name in EnvironmentName)
                {
                    var environment = rawDashboard.Environments.FirstOrDefault(e => e.Name == name);
                    if (environment != null)
                    {
                        environments.Add(environment);
                    }
                    else
                    {
                        //todo Handle this better
                        var message = $"Environment not found: {name}";
                        WriteObject(message);
                    }
                }
            }

            var envIds = new HashSet <string>(environments.Select(e => e.Id));

            foreach (var release in releases)
            {
                baseResourceList.AddRange(_connection.Repository.Releases.GetDeployments(release).Items.Where(d => (d.Created > After) && (d.Created < Before) && (envIds.Contains(d.EnvironmentId))).ToList());
            }

            ResourceOnly = false;

            if (ResourceOnly)
            {
                WriteObject(baseResourceList);
            }

            else
            {
                var converter  = new OutputConverter();
                var outputList = converter.GetOctopusDeployment(baseResourceList, environments, projects, releases);

                WriteObject(outputList);
            }
        }