summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorplugin.cpp
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2018-05-14 14:22:39 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2018-06-07 06:57:31 +0000
commitd892eaadae7c3b09f1c69c39c5b69768212e06a8 (patch)
treead5856b64b066e6ebd5df5182a3aa4c6b6f99f48 /src/plugins/diffeditor/diffeditorplugin.cpp
parentb816992a39b77373f09945a64f83cd016fb9c374 (diff)
downloadqt-creator-d892eaadae7c3b09f1c69c39c5b69768212e06a8.tar.gz
DiffEditor: detect binary files
Task-number: QTCREATORBUG-15767 Change-Id: Ic9f513ecaeb15b56c90933b1d5e4cf70e045b481 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/diffeditor/diffeditorplugin.cpp')
-rw-r--r--src/plugins/diffeditor/diffeditorplugin.cpp121
1 files changed, 59 insertions, 62 deletions
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index e3a9ec31f9..4411c84c67 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -65,6 +65,7 @@ public:
DiffFileInfo leftFileInfo;
DiffFileInfo rightFileInfo;
FileData::FileOperation fileOperation = FileData::ChangeFile;
+ bool binaryFiles = false;
};
class DiffFile
@@ -78,34 +79,42 @@ public:
void operator()(QFutureInterface<FileData> &futureInterface,
const ReloadInput &reloadInfo) const
{
+ if (reloadInfo.leftText == reloadInfo.rightText)
+ return; // We show "No difference" in this case, regardless if it's binary or not
+
Differ differ(&futureInterface);
- const QList<Diff> diffList = differ.cleanupSemantics(
- differ.diff(reloadInfo.leftText, reloadInfo.rightText));
-
- QList<Diff> leftDiffList;
- QList<Diff> rightDiffList;
- Differ::splitDiffList(diffList, &leftDiffList, &rightDiffList);
- QList<Diff> outputLeftDiffList;
- QList<Diff> outputRightDiffList;
-
- if (m_ignoreWhitespace) {
- const QList<Diff> leftIntermediate
- = Differ::moveWhitespaceIntoEqualities(leftDiffList);
- const QList<Diff> rightIntermediate
- = Differ::moveWhitespaceIntoEqualities(rightDiffList);
- Differ::ignoreWhitespaceBetweenEqualities(leftIntermediate, rightIntermediate,
- &outputLeftDiffList, &outputRightDiffList);
- } else {
- outputLeftDiffList = leftDiffList;
- outputRightDiffList = rightDiffList;
- }
- const ChunkData chunkData = DiffUtils::calculateOriginalData(
- outputLeftDiffList, outputRightDiffList);
- FileData fileData = DiffUtils::calculateContextData(chunkData, m_contextLineCount, 0);
+ FileData fileData;
+ if (!reloadInfo.binaryFiles) {
+ const QList<Diff> diffList = differ.cleanupSemantics(
+ differ.diff(reloadInfo.leftText, reloadInfo.rightText));
+
+ QList<Diff> leftDiffList;
+ QList<Diff> rightDiffList;
+ Differ::splitDiffList(diffList, &leftDiffList, &rightDiffList);
+ QList<Diff> outputLeftDiffList;
+ QList<Diff> outputRightDiffList;
+
+ if (m_ignoreWhitespace) {
+ const QList<Diff> leftIntermediate
+ = Differ::moveWhitespaceIntoEqualities(leftDiffList);
+ const QList<Diff> rightIntermediate
+ = Differ::moveWhitespaceIntoEqualities(rightDiffList);
+ Differ::ignoreWhitespaceBetweenEqualities(leftIntermediate, rightIntermediate,
+ &outputLeftDiffList, &outputRightDiffList);
+ } else {
+ outputLeftDiffList = leftDiffList;
+ outputRightDiffList = rightDiffList;
+ }
+
+ const ChunkData chunkData = DiffUtils::calculateOriginalData(
+ outputLeftDiffList, outputRightDiffList);
+ fileData = DiffUtils::calculateContextData(chunkData, m_contextLineCount, 0);
+ }
fileData.leftFileInfo = reloadInfo.leftFileInfo;
fileData.rightFileInfo = reloadInfo.rightFileInfo;
fileData.fileOperation = reloadInfo.fileOperation;
+ fileData.binaryFiles = reloadInfo.binaryFiles;
futureInterface.reportResult(fileData);
}
@@ -201,13 +210,9 @@ QList<ReloadInput> DiffCurrentFileController::reloadInputList() const
Utils::TextFileFormat format = textDocument->format();
QString leftText;
- bool leftFileExists = true;
- if (Utils::TextFileFormat::readFile(m_fileName,
- format.codec,
- &leftText, &format, &errorString)
- != Utils::TextFileFormat::ReadSuccess) {
- leftFileExists = false;
- }
+ const Utils::TextFileFormat::ReadResult leftResult
+ = Utils::TextFileFormat::readFile(m_fileName, format.codec,
+ &leftText, &format, &errorString);
const QString rightText = textDocument->plainText();
@@ -219,8 +224,9 @@ QList<ReloadInput> DiffCurrentFileController::reloadInputList() const
reloadInput.leftFileInfo.typeInfo = tr("Saved");
reloadInput.rightFileInfo.typeInfo = tr("Modified");
reloadInput.rightFileInfo.patchBehaviour = DiffFileInfo::PatchEditor;
+ reloadInput.binaryFiles = (leftResult == Utils::TextFileFormat::ReadEncodingError);
- if (!leftFileExists)
+ if (leftResult == Utils::TextFileFormat::ReadIOError)
reloadInput.fileOperation = FileData::NewFile;
result << reloadInput;
@@ -259,14 +265,10 @@ QList<ReloadInput> DiffOpenFilesController::reloadInputList() const
Utils::TextFileFormat format = textDocument->format();
QString leftText;
- bool leftFileExists = true;
const QString fileName = textDocument->filePath().toString();
- if (Utils::TextFileFormat::readFile(fileName,
- format.codec,
- &leftText, &format, &errorString)
- != Utils::TextFileFormat::ReadSuccess) {
- leftFileExists = false;
- }
+ const Utils::TextFileFormat::ReadResult leftResult
+ = Utils::TextFileFormat::readFile(fileName, format.codec,
+ &leftText, &format, &errorString);
const QString rightText = textDocument->plainText();
@@ -278,8 +280,9 @@ QList<ReloadInput> DiffOpenFilesController::reloadInputList() const
reloadInput.leftFileInfo.typeInfo = tr("Saved");
reloadInput.rightFileInfo.typeInfo = tr("Modified");
reloadInput.rightFileInfo.patchBehaviour = DiffFileInfo::PatchEditor;
+ reloadInput.binaryFiles = (leftResult == Utils::TextFileFormat::ReadEncodingError);
- if (!leftFileExists)
+ if (leftResult == Utils::TextFileFormat::ReadIOError)
reloadInput.fileOperation = FileData::NewFile;
result << reloadInput;
@@ -321,14 +324,10 @@ QList<ReloadInput> DiffModifiedFilesController::reloadInputList() const
Utils::TextFileFormat format = textDocument->format();
QString leftText;
- bool leftFileExists = true;
const QString fileName = textDocument->filePath().toString();
- if (Utils::TextFileFormat::readFile(fileName,
- format.codec,
- &leftText, &format, &errorString)
- != Utils::TextFileFormat::ReadSuccess) {
- leftFileExists = false;
- }
+ const Utils::TextFileFormat::ReadResult leftResult
+ = Utils::TextFileFormat::readFile(fileName, format.codec,
+ &leftText, &format, &errorString);
const QString rightText = textDocument->plainText();
@@ -340,8 +339,9 @@ QList<ReloadInput> DiffModifiedFilesController::reloadInputList() const
reloadInput.leftFileInfo.typeInfo = tr("Saved");
reloadInput.rightFileInfo.typeInfo = tr("Modified");
reloadInput.rightFileInfo.patchBehaviour = DiffFileInfo::PatchEditor;
+ reloadInput.binaryFiles = (leftResult == Utils::TextFileFormat::ReadEncodingError);
- if (!leftFileExists)
+ if (leftResult == Utils::TextFileFormat::ReadIOError)
reloadInput.fileOperation = FileData::NewFile;
result << reloadInput;
@@ -380,28 +380,25 @@ QList<ReloadInput> DiffExternalFilesController::reloadInputList() const
format.codec = EditorManager::defaultTextCodec();
QString leftText;
- bool leftFileExists = true;
- if (Utils::TextFileFormat::readFile(m_leftFileName,
- format.codec,
- &leftText, &format, &errorString)
- != Utils::TextFileFormat::ReadSuccess) {
- leftFileExists = false;
- }
-
QString rightText;
- bool rightFileExists = true;
- if (Utils::TextFileFormat::readFile(m_rightFileName,
- format.codec,
- &rightText, &format, &errorString)
- != Utils::TextFileFormat::ReadSuccess) {
- rightFileExists = false;
- }
+
+ const Utils::TextFileFormat::ReadResult leftResult
+ = Utils::TextFileFormat::readFile(m_leftFileName, format.codec,
+ &leftText, &format, &errorString);
+ const Utils::TextFileFormat::ReadResult rightResult
+ = Utils::TextFileFormat::readFile(m_rightFileName, format.codec,
+ &rightText, &format, &errorString);
ReloadInput reloadInput;
reloadInput.leftText = leftText;
reloadInput.rightText = rightText;
reloadInput.leftFileInfo.fileName = m_leftFileName;
reloadInput.rightFileInfo.fileName = m_rightFileName;
+ reloadInput.binaryFiles = (leftResult == Utils::TextFileFormat::ReadEncodingError
+ || rightResult == Utils::TextFileFormat::ReadEncodingError);
+
+ const bool leftFileExists = (leftResult != Utils::TextFileFormat::ReadIOError);
+ const bool rightFileExists = (rightResult != Utils::TextFileFormat::ReadIOError);
if (!leftFileExists && rightFileExists)
reloadInput.fileOperation = FileData::NewFile;
else if (leftFileExists && !rightFileExists)