Как узнать, кто сломал последнюю сборку в TFS 2010 - PullRequest
0 голосов
/ 14 февраля 2011

Привет
Есть ли способ узнать, кто сломал последнюю сборку в TFS 2010.
Я знаю, что можно подписаться на событие сбоя сборки, но я бы хотел запросить TFS, чтобы получить последнююсборка и состояние сборки и если она сломалась, кто ее сломал.

/ Джимми

1 Ответ

9 голосов
/ 14 февраля 2011

Следующий код даст вам самую последнюю сборку.Это 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, "");
    }

Это даст вам список возможных наборов изменений, которые могли нарушить сборку.Это будут люди, с которыми вы бы хотели поговорить.

Это, вероятно, настолько, насколько вы хотели бы пойти с этим.Вы можете попытаться сделать что-то волшебное, сопоставив сбойный проект в журнале сборки с файлами в наборе изменений, но это будет означать разбор потенциально большого файла журнала сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...