コード例 #1
0
        private static void AddTreeNode(SourceControlDirectory root, string fullPath, IRepository repositoryOpt)
        {
            var segments = PathUtilities.Split(fullPath);

            var node = root;

            for (int i = 0; i < segments.Length; i++)
            {
                int index = node.FindChildIndex(segments[i]);
                if (index >= 0)
                {
                    node = node.OrderedChildren[index];
                }
                else
                {
                    var newNode = new SourceControlDirectory(segments[i]);
                    node.OrderedChildren.Insert(~index, newNode);
                    node = newNode;
                }

                if (i == segments.Length - 1)
                {
                    node.SetRepository(fullPath, repositoryOpt);
                }
            }
        }
コード例 #2
0
        // internal for testing
        internal static SourceControlDirectory GetContainingRepository(string fullPath, SourceControlDirectory root)
        {
            var segments = PathUtilities.Split(fullPath);

            Debug.Assert(segments.Length > 0);

            Debug.Assert(root.RepositoryFullPath == null);
            SourceControlDirectory containingRepositoryNode = null;

            var node = root;

            for (int i = 0; i < segments.Length - 1; i++)
            {
                int index = node.FindChildIndex(segments[i]);
                if (index < 0)
                {
                    break;
                }

                node = node.OrderedChildren[index];
                if (node.RepositoryFullPath != null)
                {
                    containingRepositoryNode = node;
                }
            }

            return(containingRepositoryNode);
        }
コード例 #3
0
        internal static SourceControlDirectory BuildDirectoryTree(IRepository repository)
        {
            var repoRoot = Path.GetFullPath(repository.Info.WorkingDirectory);

            var treeRoot = new SourceControlDirectory("");

            AddTreeNode(treeRoot, repoRoot, repository);

            foreach (var submodule in repository.Submodules)
            {
                string fullPath;

                try
                {
                    fullPath = Path.GetFullPath(Path.Combine(repoRoot, submodule.Path));
                }
                catch
                {
                    // ignore submodules with bad paths
                    continue;
                }

                AddTreeNode(treeRoot, fullPath, repositoryOpt: null);
            }

            return(treeRoot);
        }