diff --git a/editor/js/main.js b/editor/js/main.js index 582a15494..04270f7be 100644 --- a/editor/js/main.js +++ b/editor/js/main.js @@ -131,11 +131,12 @@ var project = RED.projects.getActiveProject(); var message = { "change-branch":"Change to local branch '"+project.git.branches.local+"'", - "abort-merge":"Git merge aborted", + "merge-abort":"Git merge aborted", "loaded":"Project '"+msg.project+"' loaded", "updated":"Project '"+msg.project+"' updated", "pull":"Project '"+msg.project+"' reloaded", - "revert": "Project '"+msg.project+"' reloaded" + "revert": "Project '"+msg.project+"' reloaded", + "merge-complete":"Git merge completed" }[msg.action]; RED.notify("

"+message+"

"); RED.sidebar.info.refresh() @@ -219,6 +220,20 @@ } ] } + } else if (msg.error === "git_merge_conflict") { + RED.nodes.clear(); + RED.sidebar.versionControl.refresh(true); + if (RED.user.hasPermission("projects.write")) { + options.buttons = [ + { + text: "Show merge conflicts", + click: function() { + persistentNotifications[notificationId].hideNotification(); + RED.sidebar.versionControl.showLocalChanges(); + } + } + ] + } } } if (!persistentNotifications.hasOwnProperty(notificationId)) { diff --git a/editor/js/ui/diff.js b/editor/js/ui/diff.js index 012005a9d..2cc6d8027 100644 --- a/editor/js/ui/diff.js +++ b/editor/js/ui/diff.js @@ -21,17 +21,18 @@ RED.diff = (function() { RED.keyboard.add("*","ctrl-shift-f 3","core:show-test-flow-diff-3"); } - function createDiffTable(container) { + function createDiffTable(container,CurrentDiff) { var diffList = $('
    ').appendTo(container); diffList.editableList({ addButton: false, + height: "auto", scrollOnAdd: false, addItem: function(container,i,object) { var localDiff = object.diff; var remoteDiff = object.remoteDiff; var tab = object.tab.n; var def = object.def; - var conflicts = currentDiff.conflicts; + var conflicts = CurrentDiff.conflicts; var tabDiv = $('
    ',{class:"node-diff-tab"}).appendTo(container); tabDiv.addClass('collapsed'); @@ -150,10 +151,10 @@ RED.diff = (function() { } div.addClass("node-diff-node-entry-conflict"); } else { - selectState = currentDiff.resolutions[tab.id]; + selectState = CurrentDiff.resolutions[tab.id]; } // Tab properties row - createNodeConflictRadioBoxes(tab,div,localNodeDiv,remoteNodeDiv,true,!conflicts[tab.id],selectState); + createNodeConflictRadioBoxes(tab,div,localNodeDiv,remoteNodeDiv,true,!conflicts[tab.id],selectState,CurrentDiff); } } // var stats = $('',{class:"node-diff-tab-stats"}).appendTo(titleRow); @@ -162,14 +163,14 @@ RED.diff = (function() { var seen = {}; object.tab.nodes.forEach(function(node) { seen[node.id] = true; - createNodeDiffRow(node,flowStats).appendTo(nodesDiv) + createNodeDiffRow(node,flowStats,CurrentDiff).appendTo(nodesDiv) }); if (object.newTab) { localNodeCount = object.newTab.nodes.length; object.newTab.nodes.forEach(function(node) { if (!seen[node.id]) { seen[node.id] = true; - createNodeDiffRow(node,flowStats).appendTo(nodesDiv) + createNodeDiffRow(node,flowStats,CurrentDiff).appendTo(nodesDiv) } }); } @@ -177,7 +178,7 @@ RED.diff = (function() { remoteNodeCount = object.remoteTab.nodes.length; object.remoteTab.nodes.forEach(function(node) { if (!seen[node.id]) { - createNodeDiffRow(node,flowStats).appendTo(nodesDiv) + createNodeDiffRow(node,flowStats,CurrentDiff).appendTo(nodesDiv) } }); } @@ -269,12 +270,12 @@ RED.diff = (function() { if (flowStats.conflicts > 0) { titleRow.addClass("node-diff-node-entry-conflict"); } else { - selectState = currentDiff.resolutions[tab.id]; + selectState = CurrentDiff.resolutions[tab.id]; } if (tab.id) { var hide = !(flowStats.conflicts > 0 &&(localDiff.deleted[tab.id] || remoteDiff.deleted[tab.id])); // Tab parent row - createNodeConflictRadioBoxes(tab,titleRow,localCell,remoteCell, false, hide, selectState); + createNodeConflictRadioBoxes(tab,titleRow,localCell,remoteCell, false, hide, selectState, CurrentDiff); } } @@ -291,11 +292,8 @@ RED.diff = (function() { var diffHeaders = $('
    ').appendTo(diffPanel); if (options.mode === "merge") { diffPanel.addClass("node-dialog-view-diff-panel-merge"); - var toolbar = $('
    '+ - ' '+ - '
    ').prependTo(diffPanel); } - var diffList = createDiffTable(diffPanel); + var diffList = createDiffTable(diffPanel, diff); var localDiff = diff.localDiff; var remoteDiff = diff.remoteDiff; @@ -512,10 +510,10 @@ RED.diff = (function() { $('',{class:"node-diff-node-label"}).html(nodeLabel).appendTo(contentDiv); return nodeTitleDiv; } - function createNodeDiffRow(node,stats) { - var localDiff = currentDiff.localDiff; - var remoteDiff = currentDiff.remoteDiff; - var conflicted = currentDiff.conflicts[node.id]; + function createNodeDiffRow(node,stats,CurrentDiff) { + var localDiff = CurrentDiff.localDiff; + var remoteDiff = CurrentDiff.remoteDiff; + var conflicted = CurrentDiff.conflicts[node.id]; var hasChanges = false; // exists in original and local/remote but with changes var unChanged = true; // existing in original,local,remote unchanged @@ -703,10 +701,10 @@ RED.diff = (function() { } div.addClass("node-diff-node-entry-conflict"); } else { - selectState = currentDiff.resolutions[node.id]; + selectState = CurrentDiff.resolutions[node.id]; } // Node row - createNodeConflictRadioBoxes(node,div,localNodeDiv,remoteNodeDiv,false,!conflicted,selectState); + createNodeConflictRadioBoxes(node,div,localNodeDiv,remoteNodeDiv,false,!conflicted,selectState,CurrentDiff); row.click(function(evt) { $(this).parent().toggleClass('collapsed'); }); @@ -982,7 +980,7 @@ RED.diff = (function() { }); return nodePropertiesDiv; } - function createNodeConflictRadioBoxes(node,row,localDiv,remoteDiv,propertiesTable,hide,state) { + function createNodeConflictRadioBoxes(node,row,localDiv,remoteDiv,propertiesTable,hide,state,diff) { var safeNodeId = "node-diff-selectbox-"+node.id.replace(/\./g,'-')+(propertiesTable?"-props":""); var className = ""; if (node.z||propertiesTable) { @@ -1019,7 +1017,7 @@ RED.diff = (function() { row.addClass("node-diff-select-remote"); row.removeClass("node-diff-select-local"); } - refreshConflictHeader(); + refreshConflictHeader(diff); } var localSelectDiv = $('