TFS 2010: получение списка идентификаторов набора изменений
Мне нужно создать два метода следующим образом:
- Извлеките все изменения в TFS.
- Извлеките все изменения в новее, чем указанный набор изменений.
Я сделал несколько поисковых запросов и нашел несколько ссылок и сумел придумать какой-то код. Кажется, я не могу выработать метод вызова, чтобы получить полный список элементов набора изменений. Я повредил что-то вместе, чтобы понять это, но задавался вопросом, может ли кто-нибудь помочь мне:
TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://mydomain.com:8080/tfs"));
VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>();
int latestId = versionControl.GetLatestChangesetId();
List<Changeset> changesetList = new List<Changeset>();
for (int i = 1; i < latestId; i++)
{
try
{
Changeset cs = versionControl.GetChangeset(i);
if (cs != null)
{
changesetList.Add(cs);
}
}
catch (ResourceAccessException)
{
}
}
Получение набора изменений для некоторого идентификатора вызывает исключение "ResourceAccessException", поэтому обработчик был добавлен.
Любые идеи о том, как это сделать "правильно"?
Я использую Visual Studio 2010 с TFS 2010. Приложение написано на С# в качестве приложения .Net 4.0.
ТИА
Ответы
Ответ 1
Попробуйте следующее:
// Replace with your setup
var tfsServer = @"http://tfsserver:8080/tfs/SW";
var serverPath = @"$/PCSW/ProjectX/Main";
// Connect to server
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer));
tfs.Connect(ConnectOptions.None);
var vcs = tfs.GetService<VersionControlServer>();
// Create versionspec's. Example start with changeset 529
VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null);
// If you want all changesets use this versionFrom:
// VersionSpec versionFrom = null;
VersionSpec versionTo = VersionSpec.Latest;
// Get Changesets
var changesets = vcs.QueryHistory(
serverPath,
VersionSpec.Latest,
0,
RecursionType.Full,
null,
versionFrom,
versionTo,
Int32.MaxValue,
true,
false
).Cast<Changeset>();
Ответ 2
В случае, если это только номера наборов изменений в требуемом диапазоне, может использоваться следующий код.
foreach (var changeset in changesets)
{
Console.WriteLine(changeset.ChangesetId);
}