Я пытаюсь написать код, который, учитывая путь к элементу в репозитории TFS и две ревизии, вычислил бы разницу между содержимым файла в эти два момента. На данный момент код может выглядеть так:
using (var projectCollection = new TfsTeamProjectCollection(new Uri(repositoryUrl)))
{
projectCollection.EnsureAuthenticated();
var versionControlServer = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));
string path = "$/MyProject/path/to/file.xml"
var before = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(minRevision.ToString(), null));
var after = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(maxRevision.ToString(), null));
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
{
var options = new DiffOptions();
options.Flags = DiffOptionFlags.EnablePreambleHandling;
options.OutputType = DiffOutputType.Unified;
options.TargetEncoding = Encoding.UTF8;
options.SourceEncoding = Encoding.UTF8;
options.StreamWriter = writer;
Difference.DiffFiles(versionControlServer, before, after, options, path, true);
writer.Flush();
var reader = new StreamReader(stream);
var diff = reader.ReadToEnd();
}
}
Но как только этот код будет выполнен, переменная diff
будет пустой строкой, хотя я точно знаю, что файл был изменен между minRevision
и maxRevision
.
Этот код также выдаст исключение, если файл не существует в minRevision
или был удален в maxRevision
, но это, кажется, проблема, которую нужно решить позже, как только я получу эту вещь, работая с файлами, которые были только редактируется.
ИЗМЕНИТЬ
Проверяя временные файлы, я уверен, что обе версии файла загружены правильно. Что-то не так с вычислением diff или с написанием diff потоку или с копированием diff в строку.