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 = $('