private GitreeNode ReadDocument(GitreeStorageFileNode document) { var(node, wrappedNode) = ReadDocumentNodes(document); var item = new GitreeNode(node, wrappedNode, true, ImmutableArray <GitreeListNode> .Empty); return(item); }
public SourceNode ParseNode(GitreeNode gitreeNode) { var lists = ParseLists(gitreeNode.Lists); var node = gitreeNode.WrappedNode; var assigner = new ListsAssigner(lists); return(assigner.Visit(node)); }
public GitreeNode ReadItemFolder(GitreeStorageFolderNode folder) { var children = folder.GetFolders().Select(ReadListFolder).ToImmutableArray(); var nodeDocument = folder.GetDocuments().Single(); var(node, wrappedNode) = ReadDocumentNodes(nodeDocument); var blobItem = new GitreeNode(node, wrappedNode, false, children); return(blobItem); }
public string WriteItem(GitreeNode blobItem, DirectoryInfo directory) { INodeWithCore <NodeCore> node = blobItem.Datablob; var filename = GetFilename(blobItem); using (var fileStream = File.CreateText(Path.Combine(directory.FullName, filename))) { Serializer.Serialize(fileStream, node.Core); } if (blobItem.IsLeaf) { return(filename); } PruneUnusedFiles(directory, new[] { filename }.ToHashSet()); var usedNames = new HashSet <string>(); foreach (var childList in blobItem.Lists) { var dirName = WriteList(childList, directory); dirName.MatchSome(x => usedNames.Add(x)); } PruneUnusedDirectories(directory, usedNames); return(filename); }