internal void PrescanTwoTrees()
{
var visitor = new AbstractIndexTreeVisitor
{
VisitEntryAux = (treeEntry, auxEntry, indexEntry, file) =>
{
if (treeEntry is Tree || auxEntry is Tree)
{
throw new ArgumentException("Can't pass me a tree!");
}
ProcessEntry(treeEntry, auxEntry, indexEntry);
},
FinishVisitTree = (tree, auxTree, currentDirectory) =>
{
if (currentDirectory.Length == 0) return;
if (auxTree == null) return;
if (_index.GetEntry(currentDirectory) != null)
{
Removed.Add(currentDirectory);
}
}
};
new IndexTreeWalker(_index, _head, _merge, _root, visitor).Walk();
// if there's a conflict, don't list it under
// to-be-removed, since that messed up our next
// section
Removed.RemoveAll(removed => Conflicts.Contains(removed));
foreach (string path in _updated.Keys)
{
if (_index.GetEntry(path) == null)
{
FileSystemInfo file = new FileInfo(Path.Combine(_root.DirectoryName(), path));
if (file.IsFile())
{
Conflicts.Add(path);
}
else if (file.IsDirectory())
{
CheckConflictsWithFile(file);
}
}
}
Conflicts.RemoveAll(conflict => Removed.Contains(conflict));
}