I'm trying to write a code which, given a path to an item in the TFS repository and two revisions, would compute a difference between the contents file had at these two moments. For now the code might look like this:
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();
}
}
But once this code is executed, the variable diff
is an empty string even though I know for sure the file has been modified between minRevision
and maxRevision
.
This code will also throw an exception if the file didn't exist at minRevision
or was deleted in maxRevision
, but this seems to be a problem to solve later, once I get this thing working with files which were only edited.
EDIT
Having checked temp files, I'm sure both versions of the file are downloaded correctly. Something is wrong with the computation of the diff or with writing the diff to a stream or with copying the diff to a string.