From 028d66befc524630d8e230473ca6bbfa75ad8bf9 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 11 Dec 2017 17:05:27 +0000 Subject: [PATCH] Add suitable message when not displaying binary files --- editor/js/ui/diff.js | 272 +++++++++++++++++++++++-------------------- 1 file changed, 143 insertions(+), 129 deletions(-) diff --git a/editor/js/ui/diff.js b/editor/js/ui/diff.js index 8e9fdbbd3..0d8a5cfbd 100644 --- a/editor/js/ui/diff.js +++ b/editor/js/ui/diff.js @@ -1678,9 +1678,10 @@ RED.diff = (function() { function createUnifiedDiffTable(files,commitOptions) { var diffPanel = $('
'); + console.log(files); files.forEach(function(file) { var hunks = file.hunks; - + var isBinary = file.binary; var codeTable = $("").appendTo(diffPanel); $('').appendTo(codeTable); var codeBody = $('').appendTo(codeTable); @@ -1744,142 +1745,148 @@ RED.diff = (function() { }) } + if (isBinary) { + var diffBinaryRow = $('').appendTo(codeBody); + var binaryContent = $('').appendTo(diffBinaryRow); + $('').text("Cannot show binary file contents").appendTo(binaryContent); - hunks.forEach(function(hunk) { - var diffRow = $('').appendTo(codeBody); - var content = $('').appendTo(diffRow); - var label = $('').text(hunk.header).appendTo(content); - var isConflict = hunk.conflict; - var localLine = hunk.localStartLine; - var remoteLine = hunk.remoteStartLine; - if (isConflict) { - unresolvedConflicts++; - } - - hunk.lines.forEach(function(lineText,lineNumber) { - // if (lineText[0] === '\\' || lineText === "") { - // // Comment line - bail out of this hunk - // break; - // } - - var actualLineNumber = hunk.diffStart + lineNumber; - var isMergeHeader = isConflict && /^..(<<<<<<<|=======$|>>>>>>>)/.test(lineText); - var diffRow = $('').appendTo(codeBody); - var localLineNo = $('').appendTo(codeBody); + var content = $('').appendTo(diffRow); + var label = $('').text(hunk.header).appendTo(content); + var isConflict = hunk.conflict; + var localLine = hunk.localStartLine; + var remoteLine = hunk.remoteStartLine; if (isConflict) { - prefixEnd = 2; + unresolvedConflicts++; } - if (!isMergeHeader) { - var changeMarker = lineText[0]; - if (isConflict && !commitOptions.unmerged && changeMarker === ' ') { - changeMarker = lineText[1]; - } - $('').text(changeMarker).appendTo(line); - var handledlLine = false; - if (isConflict && commitOptions.unmerged) { - $('').text(lineText[1]).appendTo(line); - if (lineText[0] === '+') { - localLineNo.text(localLine++); - handledlLine = true; - } - if (lineText[1] === '+') { - remoteLineNo.text(remoteLine++); - handledlLine = true; - } + + hunk.lines.forEach(function(lineText,lineNumber) { + // if (lineText[0] === '\\' || lineText === "") { + // // Comment line - bail out of this hunk + // break; + // } + + var actualLineNumber = hunk.diffStart + lineNumber; + var isMergeHeader = isConflict && /^..(<<<<<<<|=======$|>>>>>>>)/.test(lineText); + var diffRow = $('').appendTo(codeBody); + var localLineNo = $('
').appendTo(diffRow); - var remoteLineNo; - if (!isMergeHeader) { - remoteLineNo = $('').appendTo(diffRow); - } else { - localLineNo.attr('colspan',2); - } - var line = $('').appendTo(diffRow); - var prefixStart = 0; - var prefixEnd = 1; + } else { + hunks.forEach(function(hunk) { + var diffRow = $('
').appendTo(diffRow); + var remoteLineNo; + if (!isMergeHeader) { + remoteLineNo = $('').appendTo(diffRow); } else { - if (lineText[0] === '+' || (isConflict && lineText[1] === '+')) { - localLineNo.addClass("added"); - remoteLineNo.addClass("added"); - line.addClass("added"); - remoteLineNo.text(remoteLine++); - handledlLine = true; - } else if (lineText[0] === '-' || (isConflict && lineText[1] === '-')) { - localLineNo.addClass("removed"); - remoteLineNo.addClass("removed"); - line.addClass("removed"); - localLineNo.text(localLine++); - handledlLine = true; - } + localLineNo.attr('colspan',2); } - if (!handledlLine) { - line.addClass("unchanged"); - if (localLine > 0 && lineText[0] !== '\\' && lineText !== "") { - localLineNo.text(localLine++); - } - if (remoteLine > 0 && lineText[0] !== '\\' && lineText !== "") { - remoteLineNo.text(remoteLine++); - } + var line = $('').appendTo(diffRow); + var prefixStart = 0; + var prefixEnd = 1; + if (isConflict) { + prefixEnd = 2; } - $('').text(lineText.substring(prefixEnd)).appendTo(line); - } else { - diffRow.addClass("mergeHeader"); - var isSeparator = /^..(=======$)/.test(lineText); - if (!isSeparator) { - var isOurs = /^..<<<<<<').text("<<<<<<< Local Changes").appendTo(line); - hunk.localChangeStart = actualLineNumber; + if (!isMergeHeader) { + var changeMarker = lineText[0]; + if (isConflict && !commitOptions.unmerged && changeMarker === ' ') { + changeMarker = lineText[1]; + } + $('').text(changeMarker).appendTo(line); + var handledlLine = false; + if (isConflict && commitOptions.unmerged) { + $('').text(lineText[1]).appendTo(line); + if (lineText[0] === '+') { + localLineNo.text(localLine++); + handledlLine = true; + } + if (lineText[1] === '+') { + remoteLineNo.text(remoteLine++); + handledlLine = true; + } } else { - hunk.remoteChangeEnd = actualLineNumber; - $('').text(">>>>>>> Remote Changes").appendTo(line); - + if (lineText[0] === '+' || (isConflict && lineText[1] === '+')) { + localLineNo.addClass("added"); + remoteLineNo.addClass("added"); + line.addClass("added"); + remoteLineNo.text(remoteLine++); + handledlLine = true; + } else if (lineText[0] === '-' || (isConflict && lineText[1] === '-')) { + localLineNo.addClass("removed"); + remoteLineNo.addClass("removed"); + line.addClass("removed"); + localLineNo.text(localLine++); + handledlLine = true; + } } - diffRow.addClass("mergeHeader-"+(isOurs?"ours":"theirs")); - $('') - .appendTo(line) - .click(function(evt) { - evt.preventDefault(); - resolvedConflicts++; - var addedRows; - var midRow; - if (isOurs) { - addedRows = diffRow.nextUntil(".mergeHeader-separator"); - midRow = addedRows.last().next(); - midRow.nextUntil(".mergeHeader").remove(); - midRow.next().remove(); - } else { - addedRows = diffRow.prevUntil(".mergeHeader-separator"); - midRow = addedRows.last().prev(); - midRow.prevUntil(".mergeHeader").remove(); - midRow.prev().remove(); - } - midRow.remove(); - diffRow.remove(); - addedRows.find(".linetext").addClass('added'); - conflictHeader.empty(); - $(''+resolvedConflicts+' of '+unresolvedConflicts+' conflicts resolved').appendTo(conflictHeader); - - conflictResolutions[file.file] = conflictResolutions[file.file] || {}; - conflictResolutions[file.file][hunk.localChangeStart] = { - changeStart: hunk.localChangeStart, - separator: hunk.changeSeparator, - changeEnd: hunk.remoteChangeEnd, - selection: isOurs?"A":"B" - } - if (commitOptions.resolveConflict) { - commitOptions.resolveConflict({ - conflicts: unresolvedConflicts, - resolved: resolvedConflicts, - resolutions: conflictResolutions - }); - } - }) + if (!handledlLine) { + line.addClass("unchanged"); + if (localLine > 0 && lineText[0] !== '\\' && lineText !== "") { + localLineNo.text(localLine++); + } + if (remoteLine > 0 && lineText[0] !== '\\' && lineText !== "") { + remoteLineNo.text(remoteLine++); + } + } + $('').text(lineText.substring(prefixEnd)).appendTo(line); } else { - hunk.changeSeparator = actualLineNumber; - diffRow.addClass("mergeHeader-separator"); + diffRow.addClass("mergeHeader"); + var isSeparator = /^..(=======$)/.test(lineText); + if (!isSeparator) { + var isOurs = /^..<<<<<<').text("<<<<<<< Local Changes").appendTo(line); + hunk.localChangeStart = actualLineNumber; + } else { + hunk.remoteChangeEnd = actualLineNumber; + $('').text(">>>>>>> Remote Changes").appendTo(line); + + } + diffRow.addClass("mergeHeader-"+(isOurs?"ours":"theirs")); + $('') + .appendTo(line) + .click(function(evt) { + evt.preventDefault(); + resolvedConflicts++; + var addedRows; + var midRow; + if (isOurs) { + addedRows = diffRow.nextUntil(".mergeHeader-separator"); + midRow = addedRows.last().next(); + midRow.nextUntil(".mergeHeader").remove(); + midRow.next().remove(); + } else { + addedRows = diffRow.prevUntil(".mergeHeader-separator"); + midRow = addedRows.last().prev(); + midRow.prevUntil(".mergeHeader").remove(); + midRow.prev().remove(); + } + midRow.remove(); + diffRow.remove(); + addedRows.find(".linetext").addClass('added'); + conflictHeader.empty(); + $(''+resolvedConflicts+' of '+unresolvedConflicts+' conflicts resolved').appendTo(conflictHeader); + + conflictResolutions[file.file] = conflictResolutions[file.file] || {}; + conflictResolutions[file.file][hunk.localChangeStart] = { + changeStart: hunk.localChangeStart, + separator: hunk.changeSeparator, + changeEnd: hunk.remoteChangeEnd, + selection: isOurs?"A":"B" + } + if (commitOptions.resolveConflict) { + commitOptions.resolveConflict({ + conflicts: unresolvedConflicts, + resolved: resolvedConflicts, + resolutions: conflictResolutions + }); + } + }) + } else { + hunk.changeSeparator = actualLineNumber; + diffRow.addClass("mergeHeader-separator"); + } } - } + }); }); - }); + } if (commitOptions.unmerged) { conflictHeader = $(''+resolvedConflicts+' of '+unresolvedConflicts+' conflicts resolved').appendTo(content); } @@ -2041,7 +2048,9 @@ RED.diff = (function() { } else { lines = diff.split("\n"); } + var diffHeader = /^diff --git a\/(.*) b\/(.*)$/; var fileHeader = /^\+\+\+ b\/(.*)\t?/; + var binaryFile = /^Binary files /; var hunkHeader = /^@@ -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @@ ?(.*)$/; var conflictHunkHeader = /^@+ -((\d+)(,(\d+))?) -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @+/; var files = []; @@ -2050,16 +2059,21 @@ RED.diff = (function() { var currentHunk; for (var i=0;i