示例#1
0
        private GitreeNode ReadDocument(GitreeStorageFileNode document)
        {
            var(node, wrappedNode) = ReadDocumentNodes(document);
            var item = new GitreeNode(node, wrappedNode, true, ImmutableArray <GitreeListNode> .Empty);

            return(item);
        }
示例#2
0
        public SourceNode ParseNode(GitreeNode gitreeNode)
        {
            var lists    = ParseLists(gitreeNode.Lists);
            var node     = gitreeNode.WrappedNode;
            var assigner = new ListsAssigner(lists);

            return(assigner.Visit(node));
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }