Exemplo n.º 1
0
        private static TeamFoundation.Build.Client.IBuildDetailSpec CreateBuildDetailSpec(TeamFoundation.Build.Client.IBuildServer buildServer, string projectName, FilterNode rootFilterNode)
        {
            var detailSpec = default(TeamFoundation.Build.Client.IBuildDetailSpec);

            if (rootFilterNode != null)
            {
                var definitionSpec = buildServer.CreateBuildDefinitionSpec(projectName);
                var definition = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Definition", StringComparison.OrdinalIgnoreCase));
                var number = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Number", StringComparison.OrdinalIgnoreCase));
                var quality = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Quality", StringComparison.OrdinalIgnoreCase));
                var reason = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Reason", StringComparison.OrdinalIgnoreCase));
                var status = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Status", StringComparison.OrdinalIgnoreCase));
                var requestedFor = rootFilterNode.SingleOrDefault(p => p.Key.Equals("RequestedFor", StringComparison.OrdinalIgnoreCase));

                if (definition != null)
                {
                    if (definition.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Build Definition can only be filtered with an equality operator", "en-US", null);
                    }

                    definitionSpec.Name = definition.Value;
                }

                detailSpec = buildServer.CreateBuildDetailSpec(definitionSpec);
                if (number != null)
                {
                    if (number.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Build Number can only be filtered with an equality operator", "en-US", null);
                    }

                    detailSpec.BuildNumber = number.Value;
                }

                if (quality != null)
                {
                    if (quality.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Build Quality can only be filtered with an equality operator", "en-US", null);
                    }

                    detailSpec.Quality = quality.Value;
                }

                if (requestedFor != null)
                {
                    if (requestedFor.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Requested For can only be filtered with an equality operator", "en-US", null);
                    }

                    detailSpec.RequestedFor = requestedFor.Value;
                }

                if (status != null)
                {
                    if (status.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Build Status can only be filtered with an equality operator", "en-US", null);
                    }

                    var statusValue = default(TeamFoundation.Build.Client.BuildStatus);
                    if (Enum.TryParse<TeamFoundation.Build.Client.BuildStatus>(status.Value, out statusValue))
                    {
                        detailSpec.Status = statusValue;
                    }
                }

                if (reason != null)
                {
                    if (reason.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Build Reason can only be filtered with an equality operator", "en-US", null);
                    }

                    var reasonValue = default(TeamFoundation.Build.Client.BuildReason);
                    if (Enum.TryParse<TeamFoundation.Build.Client.BuildReason>(reason.Value, out reasonValue))
                    {
                        detailSpec.Reason = reasonValue;
                    }
                }

                return detailSpec;
            }
            else
            {
                detailSpec = buildServer.CreateBuildDetailSpec(projectName);
            }

            return detailSpec;
        }
Exemplo n.º 2
0
        private static IEnumerable<Build> FilterBuilds(IEnumerable<Build> builds, FilterNode rootFilterNode)
        {
            if (rootFilterNode != null)
            {
                var startTimeParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("StartTime"));
                var finishTimeParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("FinishTime"));
                var buildFinishedParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("BuildFinished"));
                var requestedByParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("RequestedBy"));
                var startTimeValue = default(DateTime);

                if (startTimeParameter != null && DateTime.TryParse(startTimeParameter.Value, out startTimeValue))
                {
                    switch (startTimeParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                            builds = builds.Where(b => b.StartTime.Equals(startTimeValue));
                            break;

                        case FilterExpressionType.NotEqual:
                            builds = builds.Where(b => !b.StartTime.Equals(startTimeValue));
                            break;

                        case FilterExpressionType.GreaterThan:
                            builds = builds.Where(b => b.StartTime > startTimeValue);
                            break;

                        case FilterExpressionType.LessThan:
                            builds = builds.Where(b => b.StartTime < startTimeValue);
                            break;

                        default:
                            throw new NotSupportedException("Start time field can only be filtered with equality, inequality, greater than and less than operators");
                    }
                }

                var finishTimeValue = default(DateTime);
                if (finishTimeParameter != null && DateTime.TryParse(finishTimeParameter.Value, out finishTimeValue))
                {
                    switch (finishTimeParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                            builds = builds.Where(b => b.FinishTime.Equals(finishTimeValue));
                            break;

                        case FilterExpressionType.NotEqual:
                            builds = builds.Where(b => !b.FinishTime.Equals(finishTimeValue));
                            break;

                        case FilterExpressionType.GreaterThan:
                            builds = builds.Where(b => b.FinishTime > finishTimeValue);
                            break;

                        case FilterExpressionType.LessThan:
                            builds = builds.Where(b => b.FinishTime < finishTimeValue);
                            break;

                        default:
                            throw new NotSupportedException("Finish time field can only be filtered with equality, inequality, greater than and less than operators");
                    }
                }

                var buildFinishedValue = default(bool);
                if (buildFinishedParameter != null && bool.TryParse(buildFinishedParameter.Value, out buildFinishedValue))
                {
                    switch (buildFinishedParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                            builds = builds.Where(b => b.BuildFinished == buildFinishedValue);
                            break;

                        case FilterExpressionType.NotEqual:
                            builds = builds.Where(b => b.BuildFinished != buildFinishedValue);
                            break;

                        default:
                            throw new NotSupportedException("Build Finished field can only be filtered with equality and inequality operators");
                    }
                }

                if (requestedByParameter != null)
                {
                    switch (requestedByParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                            builds = builds.Where(b => b.RequestedBy.Equals(requestedByParameter.Value));
                            break;

                        case FilterExpressionType.NotEqual:
                            builds = builds.Where(b => !b.RequestedBy.Equals(requestedByParameter.Value));
                            break;

                        default:
                            throw new NotSupportedException("Requested By field can only be filtered with equality and inequality operators");
                    }
                }
            }

            return builds;
        }
Exemplo n.º 3
0
        private IEnumerable<Build> RequestBuildsByProjectCollection(FilterNode rootFilterNode)
        {
            var teamProjects = this.TfsConnection.CatalogNode.QueryChildren(
                    new Guid[] { CatalogResourceTypes.TeamProject },
                    false,
                    CatalogQueryOptions.None);

            IEnumerable<Build> preliminaryResults = null;
            var buildServer = this.TfsConnection.GetService<TeamFoundation.Build.Client.IBuildServer>();

            if (rootFilterNode != null && rootFilterNode.Count(p => p.Key.Equals("Project", StringComparison.OrdinalIgnoreCase)) > 0)
            {
                var projectParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Project", StringComparison.OrdinalIgnoreCase));
                var spec = CreateBuildDetailSpec(buildServer, projectParameter.Value, rootFilterNode);
                preliminaryResults = buildServer.QueryBuilds(spec).Builds.Select(b => b.ToModel());
            }
            else
            {
                var specs = teamProjects.Select(t => CreateBuildDetailSpec(buildServer, t.Resource.DisplayName, rootFilterNode));
                preliminaryResults = specs.Select(s => buildServer.QueryBuilds(s)).SelectMany(r => r.Builds).Select(b => b.ToModel());
            }

            return FilterBuilds(preliminaryResults, rootFilterNode).ToArray();
        }
Exemplo n.º 4
0
        private static string GetRequestedPath(string branch, string projectName, FilterNode rootFilterNode)
        {
            var path = "$/";
            var branchParameter = default(FilterNode);

            if (rootFilterNode != null)
            {
                branchParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Branch", StringComparison.OrdinalIgnoreCase));
            }

            if (!string.IsNullOrEmpty(branch))
            {
                var branchName = EntityTranslator.DecodePath(branch);
                path = string.Format(CultureInfo.InvariantCulture, branchName.StartsWith("$/", StringComparison.Ordinal) ? "{0}/*" : "$/{0}/*", branchName);
            }
            else if (branchParameter != null && !string.IsNullOrEmpty(branchParameter.Value))
            {
                if (branchParameter.Sign != FilterExpressionType.Equal)
                {
                    throw new DataServiceException(501, "Not Implemented", "Changeset Branch can only be filtered with an equality operator", "en-US", null);
                }

                var branchName = EntityTranslator.DecodePath(branchParameter.Value);
                path = string.Format(CultureInfo.InvariantCulture, branchName.StartsWith("$/", StringComparison.Ordinal) ? "{0}/*" : "$/{0}/*", branchName);
            }
            else if (!string.IsNullOrEmpty(projectName))
            {
                path = string.Format(CultureInfo.InvariantCulture, "$/{0}", projectName);
            }

            return path;
        }
Exemplo n.º 5
0
        private static TeamFoundation.VersionControl.Client.VersionSpec GetRequestedVersionTo(FilterNode rootFilterNode)
        {
            if (rootFilterNode != null)
            {
                if (rootFilterNode.SingleOrDefault(p => p.Key.Equals("Id", StringComparison.OrdinalIgnoreCase)) != null)
                {
                    return GetRequestedIdVersionTo(rootFilterNode);
                }
                else if (rootFilterNode.SingleOrDefault(p => p.Key.Equals("CreationDate", StringComparison.OrdinalIgnoreCase)) != null)
                {
                    return GetRequestedDateVersionTo(rootFilterNode);
                }
            }

            return null;
        }
Exemplo n.º 6
0
        private static TeamFoundation.VersionControl.Client.VersionSpec GetRequestedIdVersionTo(FilterNode rootFilterNode)
        {
            var versionTo = default(TeamFoundation.VersionControl.Client.ChangesetVersionSpec);

            if (rootFilterNode != null)
            {
                var idParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Id", StringComparison.OrdinalIgnoreCase));

                if (idParameter != null)
                {
                    switch (idParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                        case FilterExpressionType.LessThanOrEqual:
                            versionTo = new TeamFoundation.VersionControl.Client.ChangesetVersionSpec(idParameter.Value);
                            break;
                        case FilterExpressionType.LessThan:
                            int versionValue;
                            if (int.TryParse(idParameter.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out versionValue))
                            {
                                versionTo = new TeamFoundation.VersionControl.Client.ChangesetVersionSpec(versionValue - 1);
                            }

                            break;
                        case FilterExpressionType.GreaterThan:
                        case FilterExpressionType.GreaterThanOrEqual:
                            versionTo = null;
                            break;
                        default:
                            throw new DataServiceException(501, "Not Implemented", "Changeset Id can only be filtered with an equality, greater than, less than, greater than or equal and less than or equal operators", "en-US", null);
                    }
                }
            }

            return versionTo;
        }
Exemplo n.º 7
0
        private static TeamFoundation.VersionControl.Client.VersionSpec GetRequestedDateVersionTo(FilterNode rootFilterNode)
        {
            var versionTo = default(TeamFoundation.VersionControl.Client.DateVersionSpec);

            if (rootFilterNode != null)
            {
                var dateParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("CreationDate", StringComparison.OrdinalIgnoreCase));
                var dateTo = default(DateTime);

                if (dateParameter != null && DateTime.TryParse(dateParameter.Value, out dateTo))
                {
                    switch (dateParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                        case FilterExpressionType.LessThan:
                        case FilterExpressionType.LessThanOrEqual:
                            versionTo = new TeamFoundation.VersionControl.Client.DateVersionSpec(dateTo.AddSeconds(1));
                            break;
                        case FilterExpressionType.GreaterThan:
                        case FilterExpressionType.GreaterThanOrEqual:
                            versionTo = null;
                            break;
                        default:
                            throw new DataServiceException(501, "Not Implemented", "Changeset Creation Date can only be filtered with an equality, greater than, less than, greater than or equal and less than or equal operators", "en-US", null);
                    }
                }
            }

            return versionTo;
        }
Exemplo n.º 8
0
        private static string GetRequestedCommitter(FilterNode rootFilterNode)
        {
            var committer = default(string);

            if (rootFilterNode != null)
            {
                var committerParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Committer", StringComparison.OrdinalIgnoreCase));
                if (committerParameter != null)
                {
                    if (committerParameter.Sign != FilterExpressionType.Equal)
                    {
                        throw new DataServiceException(501, "Not Implemented", "Changeset committer can only be filtered with an equality operator", "en-US", null);
                    }

                    committer = committerParameter.Value;
                }
            }

            return committer;
        }
Exemplo n.º 9
0
        private static IEnumerable<Changeset> FilterChangesetsByOwner(IEnumerable<Changeset> changesets, FilterNode rootFilterNode)
        {
            if (rootFilterNode.Count(p => p.Key.Equals("Owner")) > 0)
            {
                var ownerParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("Owner"));
                switch (ownerParameter.Sign)
                {
                    case FilterExpressionType.Equal:
                        changesets = ownerParameter != null
                            ? changesets.Where(c => c.Owner != null && c.Owner.Equals(ownerParameter.Value, StringComparison.OrdinalIgnoreCase))
                            : changesets.Where(c => c.Owner == null);
                        break;
                    case FilterExpressionType.NotEqual:
                        changesets = ownerParameter != null
                            ? changesets.Where(c => c.Owner == null || !c.Owner.Equals(ownerParameter.Value, StringComparison.OrdinalIgnoreCase))
                            : changesets.Where(c => c.Owner != null);
                        break;
                    default:
                        throw new NotSupportedException("Changeset Owner can only be filtered with an equal or not equal operator");
                }
            }

            return changesets;
        }
Exemplo n.º 10
0
        private static IEnumerable<Changeset> FilterChangesetsByCreationDate(IEnumerable<Changeset> changesets, FilterNode rootFilterNode)
        {
            if (rootFilterNode.Count(p => p.Key.Equals("CreationDate")) > 0 && rootFilterNode.Count(p => p.Key.Equals("Id")) > 0)
            {
                // We could not filter by both parameters using the API. So we filter programmatically
                var dateParameter = rootFilterNode.SingleOrDefault(p => p.Key.Equals("CreationDate"));
                var dateValue = default(DateTime);

                if (DateTime.TryParse(dateParameter.Value, out dateValue))
                {
                    switch (dateParameter.Sign)
                    {
                        case FilterExpressionType.Equal:
                            changesets = dateParameter != null
                                ? changesets.Where(c => c.CreationDate != null && RoundDateToSeconds(c.CreationDate).Equals(dateValue))
                                : changesets.Where(c => c.CreationDate == null);
                            break;
                        case FilterExpressionType.GreaterThan:
                            changesets = dateParameter != null
                                ? changesets.Where(c => c.CreationDate != null && RoundDateToSeconds(c.CreationDate) > dateValue)
                                : changesets.Where(c => c.CreationDate != null);
                            break;
                        case FilterExpressionType.GreaterThanOrEqual:
                            changesets = dateParameter != null
                                ? changesets.Where(c => c.CreationDate != null && RoundDateToSeconds(c.CreationDate) >= dateValue)
                                : changesets.Where(c => c.CreationDate != null);
                            break;
                        case FilterExpressionType.LessThan:
                            changesets = dateParameter != null
                                ? changesets.Where(c => c.CreationDate != null && RoundDateToSeconds(c.CreationDate) < dateValue)
                                : changesets.Where(c => c.CreationDate != null);
                            break;
                        case FilterExpressionType.LessThanOrEqual:
                            changesets = dateParameter != null
                                ? changesets.Where(c => c.CreationDate != null && RoundDateToSeconds(c.CreationDate) <= dateValue)
                                : changesets.Where(c => c.CreationDate != null);
                            break;
                        default:
                            throw new DataServiceException(501, "Not Implemented", "Changeset Creation Date can only be filtered with an equality, greater than, less than, greater than or equal and less than or equal operators", "en-US", null);
                    }
                }
            }

            return changesets;
        }