我怎样才能让谁破坏了TFS 2010中的最后一次构建

时间:2011-02-14 10:01:26

标签: tfs tfs2010 tfsbuild

您好
有没有办法查询谁破坏了TFS 2010中的最后一个版本 我知道可以订阅构建失败的事件,但是我想查询TFS以获取最后的构建和构建的状态,如果它破坏了,谁破坏了它。

/麦

1 个答案:

答案 0 :(得分:9)

以下代码将为您提供最新版本。这是TFS2008,但调用也应该在TFS2010下正常工作。

    public static IBuildDetail GetMostRecentBuild(TeamFoundationServer tfs, string teamProject, string buildName)
    {
        IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

        IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(teamProject, buildName);

        buildDetailSpec.MaxBuildsPerDefinition = 1;
        buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending;
        buildDetailSpec.Status = BuildStatus.Failed | BuildStatus.PartiallySucceeded | BuildStatus.Stopped | BuildStatus.Succeeded;

        IBuildQueryResult results = buildServer.QueryBuilds(buildDetailSpec);

        if (results.Failures.Length != 0)
        {
            throw new ApplicationException("this needs to go away and be handled more nicely");
        }

        if (results.Builds.Length == 1)
        {
            return results.Builds[0];
        }
        else
        {
            return null;
        }

    }

尽管如此,试图看看谁破坏了构建并不会那么简单。您需要做的是通过results.Builds[]数组,找到最后一个有效的构建。完成后,您可以在团队项目中查询自上次成功构建以来发生的所有变更集。以下代码将允许您这样做:

    public static List<Changeset> GetChangesetsSinceDate(TeamFoundationServer tfs, DateTime date, string path)
    {
        VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

        VersionSpec versionFrom = GetDateVSpec(date);
        VersionSpec versionTo = GetDateVSpec(DateTime.Now);

        IEnumerable results = vcs.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, "", versionFrom, versionTo, int.MaxValue, false, true);


        List<Changeset> changes = new List<Changeset>();

        foreach (Changeset changeset in results)
        {
            changes.Add(changeset);
        }

        return changes;
    }

    private static VersionSpec GetDateVSpec(DateTime date)
    {
        //Format is Dyyy-MM-ddTHH:mm  example:  D2009-11-16T14:32
        string dateSpec = string.Format("D{0:yyy}-{0:MM}-{0:dd}T{0:HH}:{0:mm}", date);
        return VersionSpec.ParseSingleSpec(dateSpec, "");
    }

这将为您提供可能已破坏构建的候选变更集列表。这些人就是你想与之交谈的人。

这可能就像你想要的那样。您可以尝试通过将构建日志中的失败项目与变更集中的文件进行匹配来做一些魔术,但这意味着要解析出可能很大的构建日志文件。