Учитывая конкретный путь папки в tfs, я должен рекурсивно найти все файлы и папки в папке для данного changeset. Другими словами, я должен получить переходное закрытие пути в tfs для данного changeset. Проблема, с которой я сталкиваюсь при этом, перечисляет содержание конкретной папки в tfs.. Как это было бы возможно в C#?
Я предполагаю, что вам нужно «содержимое папки из набора изменений X», а не «содержимое папки, которое было частью набора изменений X»
GetItems - правильный вызов для использования, просто передайте спецификацию версии для интересующего вас набора изменений.
http://msdn.microsoft.com/en-US/library/bb138911.aspx
так что, если у вас уже есть ссылка на экземпляр VersionControlServer:
var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);
Если я неправильно понял, и вы захотите «содержимое папки, которое было частью набора изменений X», есть несколько разных способов сделать это, но получить набор изменений с помощью GetChangeset и просто отфильтровать Изменения довольно просто.
Что-то вроде этого может быть больше тем, что вы ищете. Это получает все изменения в наборе изменений и итерирует их, определяя те, которые находятся по заданному пути. Это можно сократить с помощью linq-запроса, но я оставляю это в более развернутом виде, чтобы передать суть того, что я пытаюсь сказать:
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
Changeset cs = vcs.GetChangeset(6284868);
foreach (Change change in cs.Changes)
{
if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src"))
{
System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}",
cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString()));
}
}
Думаю, что-то вроде этого сработает ..
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService();
ItemSet items;
items = vcs.GetItems(tfsPath, RecursionType.Full);
Если у вас есть другие идеи, опубликуйте их ..
Вы можете использовать веб-службу набора изменений, чтобы получить XML-документ, содержащий все измененные элементы для определенного набора изменений. Затем просто прокрутите список измененных элементов и посмотрите, находятся ли они на том пути, который вы ищете.
Вот URL-адрес веб-службы набора изменений:
http: // your_tfs_server
/VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number
& webView = true