DiffEditor: detect binary files

Task-number: QTCREATORBUG-15767
Change-Id: Ic9f513ecaeb15b56c90933b1d5e4cf70e045b481
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2018-05-14 14:22:39 +02:00
parent b816992a39
commit d892eaadae

View File

@@ -65,6 +65,7 @@ public:
DiffFileInfo leftFileInfo;
DiffFileInfo rightFileInfo;
FileData::FileOperation fileOperation = FileData::ChangeFile;
bool binaryFiles = false;
};
class DiffFile
@@ -78,7 +79,13 @@ 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);
FileData fileData;
if (!reloadInfo.binaryFiles) {
const QList<Diff> diffList = differ.cleanupSemantics(
differ.diff(reloadInfo.leftText, reloadInfo.rightText));
@@ -102,10 +109,12 @@ public:
const ChunkData chunkData = DiffUtils::calculateOriginalData(
outputLeftDiffList, outputRightDiffList);
FileData fileData = DiffUtils::calculateContextData(chunkData, m_contextLineCount, 0);
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)