예제 #1
0
        private BuildStatus CreateBuildStatus(IBuildDetail buildDetail, IEnumerable <MyTfsBuildDefinition> allBuildDefinitions, bool applyBuildQuality)
        {
            BuildStatusEnum buildStatus  = GetBuildStatusEnum(buildDetail.Status);
            var             buildQuality = GetBuildStatusEnum(buildDetail.Quality);

            if (applyBuildQuality && buildStatus == BuildStatusEnum.Working)
            {
                buildStatus = buildQuality;
            }

            var result = new BuildStatus
            {
                BuildStatusEnum = buildStatus,
                StartedTime     = buildDetail.StartTime == DateTime.MinValue ? (DateTime?)null : buildDetail.StartTime,
                FinishedTime    = buildDetail.FinishTime == DateTime.MinValue ? (DateTime?)null : buildDetail.FinishTime,
            };

            var matchedBuildDefinition = allBuildDefinitions.FirstOrDefault(i => i.Uri == buildDetail.BuildDefinitionUri);

            if (matchedBuildDefinition != null)
            {
                result.Name = matchedBuildDefinition.Name;
                result.BuildDefinitionId = matchedBuildDefinition.Id;
            }
            else
            {
                _log.Error("The server appeared to return a build definition that we are not watching: " + buildDetail.BuildDefinitionUri);
            }

            result.BuildId = buildDetail.Uri.Segments.LastOrDefault();

            SetCheckinInfo(buildDetail, applyBuildQuality, result, buildQuality, matchedBuildDefinition);

            result.Url = _tfsProject.ConvertTfsUriToUrl(buildDetail.Uri);

            return(result);
        }
예제 #2
0
        private BuildStatus CreateBuildStatus(IBuildDetail buildDetail, bool applyBuildQuality)
        {
            BuildStatusEnum status = BuildStatusEnum.Unknown;

            status = GetBuildStatusEnum(buildDetail.Status);
            if (applyBuildQuality && status == BuildStatusEnum.Working)
            {
                status = GetBuildStatusEnum(buildDetail.Quality);
            }

            var result = new BuildStatus
            {
                BuildDefinitionId = buildDetail.BuildDefinitionUri.Segments[buildDetail.BuildDefinitionUri.Segments.Length - 1].ToString(),
                BuildStatusEnum   = status,
                RequestedBy       = buildDetail.RequestedBy != null ? buildDetail.RequestedBy :
                                    buildDetail.RequestedFor != null ? buildDetail.RequestedFor : buildDetail.LastChangedBy,
                StartedTime  = buildDetail.StartTime == DateTime.MinValue ? (DateTime?)null : buildDetail.StartTime,
                FinishedTime = buildDetail.FinishTime == DateTime.MinValue ? (DateTime?)null : buildDetail.FinishTime,
            };

            if (buildDetail.BuildDefinition != null)
            {
                this._UriToName[buildDetail.BuildDefinitionUri.ToString()] = buildDetail.BuildDefinition.Name;
            }

            result.Name    = this._UriToName[buildDetail.BuildDefinitionUri.ToString()];
            result.BuildId = buildDetail.Uri.Segments[buildDetail.Uri.Segments.Length - 1].ToString();

            var changesets = buildDetail.Information.GetNodesByType("AssociatedChangeset");

            if (changesets.Count() > 0)
            {
                HashSet <String> users = new HashSet <String>();
                foreach (var changeset in changesets)
                {
                    users.Add(changeset.Fields["CheckedInBy"]);
                }

                if (users.Count() > 1)
                {
                    result.RequestedBy = "(Multiple Users)";
                }
                else
                {
                    result.RequestedBy = users.First();
                }

                if (changesets.Count() > 1)
                {
                    result.Comment = "(Multiple Changesets)";
                }
                else
                {
                    result.Comment = changesets.First().Fields["Comment"];
                }
            }
            else
            {
                result.Comment = buildDetail.Reason.ToString();
            }

            if (applyBuildQuality &&
                GetBuildStatusEnum(buildDetail.Quality) == BuildStatusEnum.Broken)
            {
                result.Comment =
                    "Build deployment or test failure. Please see test server or test results for details.\n" +
                    result.Comment;
            }

            result.Url = _tfsProject.ConvertTfsUriToUrl(buildDetail.Uri);

            return(result);
        }
예제 #3
0
 public string ConvertTfsUriToUrl(Uri uri)
 {
     return(_myTfsProject.ConvertTfsUriToUrl(uri));
 }