コード例 #1
0
ファイル: ReportBuilder.cs プロジェクト: thomasvt/itinerary
        private static string GetObjectTypeIcon(DiffTreeNode node)
        {
            switch (node.NodeType)
            {
            case NodeType.File:
                return("<i class=\"fas fa-file\" style=\"color: #909292;\"></i>");

            case NodeType.Directory:
                return("<i class=\"fas fa-folder-open\" style=\"color: #D8AC6A;\"></i>");

            case NodeType.Message:
                return("<i class=\"fas fa-comment\" style=\"color: #909292;\"></i>");

            case NodeType.Namespace:
                return("<i class=\"fas fa-code\" style=\"color: #909292;\"></i>");

            case NodeType.Class:
                return("<i class=\"fas fa-project-diagram\" style=\"color: #F8D96E;\"></i>");

            case NodeType.Method:
                return("<i class=\"fas fa-cube\" style=\"color: #6C4A86;\"></i>");

            case NodeType.Property:
                return("<i class=\"fas fa-wrench\" style=\"color: #909292;\"></i>");

            case NodeType.Field:
                return("<i class=\"fas fa-inbox\" style=\"color: #4478A6;\"></i>");

            case NodeType.CSharp:
                return(null);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #2
0
        public void Expand(DiffTreeNode node)
        {
            var leftTree  = GetSemanticTree(node.LeftFullPath);
            var rightTree = GetSemanticTree(node.RightFullPath);

            node.ChildNodes = BuildCSharpTree(leftTree, rightTree).ToList();
        }
コード例 #3
0
ファイル: ReportBuilder.cs プロジェクト: thomasvt/itinerary
        public void BuildReport(DiffTreeNode root, string filename)
        {
            var doc      = new HtmlDocument();
            var htmlNode = doc.DocumentNode.AppendChild(HtmlNode.CreateNode("<html>"));
            var headNode = htmlNode.AppendChild(HtmlNode.CreateNode("<head>"));

            headNode.AppendChild(HtmlNode.CreateNode(
                                     "<link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.1.1/css/all.css\" integrity=\"sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ\" crossorigin=\"anonymous\">"));
            var bodyNode =
                htmlNode.AppendChild(HtmlNode.CreateNode("<body style=\"font-family: Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace;\">"));

            AddNodesToHtmlDoc(new [] { root }, bodyNode);
            doc.Save(File.Open(filename, FileMode.Create));
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: thomasvt/itinerary
        private static void BuildReportForFolderPair(string leftFolder, string rightFolder)
        {
            var diffTreeBuilder = CreateDiffTreeBuilder();
            var root            = new DiffTreeNode(".", leftFolder, rightFolder, NodeType.Directory);

            diffTreeBuilder.BuildTree(root);
            var filename      = rightFolder + ".html";
            var reportBuilder = new ReportBuilder()
            {
                ShowAll = CmdLnOptions.ShowAll
            };

            reportBuilder.BuildReport(root, filename);
            Console.WriteLine("Created " + filename);
        }
コード例 #5
0
        private void AddFileNodes(string leftFolder, string rightFolder, List <DiffTreeNode> nodes)
        {
            var leftFileList = leftFolder != null?GetFiles(leftFolder) : new List <string>();

            var rightFileList = rightFolder != null?GetFiles(rightFolder) : new List <string>();

            var changes = OrderedListComparer.Compare(leftFileList, rightFileList, (left, right) => string.Compare(left, right, StringComparison.InvariantCultureIgnoreCase));

            foreach (var change in changes)
            {
                var node = new DiffTreeNode(change.LeftItem ?? change.RightItem, leftFolder, rightFolder, NodeType.File)
                {
                    ChangeType = change.ChangeType
                };
                nodes.Add(node);
            }
        }
コード例 #6
0
ファイル: DiffTreeBuilder.cs プロジェクト: thomasvt/itinerary
        private void ExpandNode(DiffTreeNode node)
        {
            var expander = _expanders.FirstOrDefault(e => e.CanExpand(node));

            if (expander == null)
            {
                return;
            }

            try
            {
                expander.Expand(node);
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"{expander.GetType().Name} returned an error while expanding:");
                Console.WriteLine($" Item:        {node.Name}");
                Console.WriteLine($" LeftParent:  {node.LeftParent}");
                Console.WriteLine($" RightParent: {node.RightParent}");
                Console.WriteLine($" {e.Message}");
                Console.ForegroundColor = ConsoleColor.White;
                node.ChildNodes         = new List <DiffTreeNode> {
                    new DiffTreeNode($"#err#{expander.GetType().Name}#{e.Message}#", null, null, NodeType.Message)
                };
            }

            if (!expander.IsLeafExpander)
            {
                foreach (var childNode in node.ChildNodes)
                {
                    ExpandNode(childNode);
                }
            }

            if (node.ChangeType == ChangeType.Unmodified && node.ChildNodes.Any(cn => cn.ChangeType != ChangeType.Unmodified))
            {
                node.ChangeType = ChangeType.Modified;
            }
        }
コード例 #7
0
ファイル: DiffTreeBuilder.cs プロジェクト: thomasvt/itinerary
 /// <summary>
 /// Builds the tree by recursibely expanding your rootnode into childnodes using expanders on each new node.
 /// The first matching expander is executed per node.
 /// </summary>
 public void BuildTree(DiffTreeNode rootNode)
 {
     ExpandNode(rootNode);
 }
コード例 #8
0
 public bool CanExpand(DiffTreeNode node)
 {
     return(node.NodeType == NodeType.File && Path.GetExtension(node.Name) == FileExtension);
 }
コード例 #9
0
 public void Expand(DiffTreeNode node)
 {
     node.ChangeType = FileUtils.FileContentsAreEqual(node.LeftFullPath, node.RightFullPath) ? ChangeType.Unmodified : ChangeType.Modified;
 }
コード例 #10
0
 public bool CanExpand(DiffTreeNode node)
 {
     return(node.NodeType == NodeType.File);
 }
コード例 #11
0
 public void Expand(DiffTreeNode node)
 {
     node.ChildNodes = GetNodesForFolderPair(Path.Combine(node.LeftParent, node.Name ?? ""), Path.Combine(node.RightParent, node.Name ?? ""));
 }
コード例 #12
0
 public bool CanExpand(DiffTreeNode node)
 {
     return(node.NodeType == NodeType.Directory);
 }