internal ITree Write()
{
CheckWritten();
iWritten = true;
List<TreeItem> list = new List<TreeItem>();
if (iTree != null)
{
foreach (ITreeEntry item in iTree.Items)
{
string id = item.Id;
string mode = item.Mode;
string name = item.Name;
if (iDeleteList.Contains(name))
{
continue;
}
if (iModeChangeList.ContainsKey(name))
{
mode = iModeChangeList[name];
}
if (iTreeModifyList.ContainsKey(name))
{
TreeModifiable modified = iTreeModifyList[name];
ITree tree = modified.Write();
if (modified.Modified)
{
id = tree.Id;
iModified = true;
}
}
else if (iBlobModifyList.ContainsKey(name))
{
IBlob blob = iBlobModifyList[name].Write();
id = blob.Id;
}
list.Add(new TreeItem(iRepository, id, mode, name));
}
}
foreach (TreeModifiableNew item in iTreeAddList.Values)
{
ITree tree = item.Write();
list.Add(new TreeItem(iRepository, tree.Id, item.Mode, item.Name));
}
foreach (BlobModifiableNew item in iBlobAddList.Values)
{
IBlob blob = item.Write();
list.Add(new TreeItem(iRepository, blob.Id, item.Mode, item.Name));
}
if (iModified | iTree == null)
{
iTree = Tree.Write(iRepository, list);
}
return (iTree);
}