TFSリポジトリ内のアイテムへのパスと2つのリビジョンを指定して、これら2つの時点でのコンテンツファイルの違いを計算するコードを作成しようとしています。今のところ、コードは次のようになります。
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の文字列へのコピーに問題があります。