public int Verify(TfsChangesetInfo changeset, bool ignorePathCaseMismatch)
{
Trace.TraceInformation("Comparing TFS changeset " + changeset.ChangesetId + " to git commit " + changeset.GitCommit);
var tfsTree = changeset.Remote.GetChangeset(changeset.ChangesetId).GetTree().ToDictionary(entry => entry.FullName.ToLowerInvariant().Replace("/", @"\"));
var gitTree = changeset.Remote.Repository.GetCommit(changeset.GitCommit).GetTree().ToDictionary(entry => entry.Entry.Path.ToLowerInvariant());
var all = tfsTree.Keys.Union(gitTree.Keys);
var inBoth = tfsTree.Keys.Intersect(gitTree.Keys);
var tfsOnly = tfsTree.Keys.Except(gitTree.Keys);
var gitOnly = gitTree.Keys.Except(tfsTree.Keys);
var foundDiff = GitTfsExitCodes.OK;
foreach (var file in all.OrderBy(x => x))
{
if (tfsTree.ContainsKey(file))
{
if (gitTree.ContainsKey(file))
{
if (Compare(tfsTree[file], gitTree[file], ignorePathCaseMismatch))
foundDiff = Math.Max(foundDiff, GitTfsExitCodes.VerifyContentMismatch);
}
else
{
Trace.TraceInformation("Only in TFS: " + tfsTree[file].FullName);
foundDiff = Math.Max(foundDiff, GitTfsExitCodes.VerifyFileMissing);
}
}
else
{
Trace.TraceInformation("Only in git: " + gitTree[file].FullName);
foundDiff = Math.Max(foundDiff, GitTfsExitCodes.VerifyFileMissing);
}
}
if (foundDiff == GitTfsExitCodes.OK)
Trace.TraceInformation("No differences!");
return foundDiff;
}