Следующий код даст вам самую последнюю сборку.Это 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, "");
}
Это даст вам список возможных наборов изменений, которые могли нарушить сборку.Это будут люди, с которыми вы бы хотели поговорить.
Это, вероятно, настолько, насколько вы хотели бы пойти с этим.Вы можете попытаться сделать что-то волшебное, сопоставив сбойный проект в журнале сборки с файлами в наборе изменений, но это будет означать разбор потенциально большого файла журнала сборки.