Подтвердить что ты не робот

Программно получить разницу между двумя версиями файла в TFS

Я пытаюсь написать код, который, учитывая путь к элементу в репозитории 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 в строку.

4b9b3361

Ответ 1

решаемая. Проблема была у читателя. После того как я изменил последние две строки на

var diff = Encoding.UTF8.GetString(stream.ToArray());

Наконец-то я получил некоторую разницу.

Ответ 2

Я знаю, что вы приняли свой ответ, и это было задано в 2012 году, но я недавно должен был сделать то же самое, но предпочитаю использовать StreamReader vs .ToArray()

Ответ заключается в том, что перед тем, как вы начнете читать, вы должны reset MemoryStream.

добавить это

stream.Position = 0;

сразу после того, как вы запустили запись