forked from qt-creator/qt-creator
DiffEditor: detect binary files
Task-number: QTCREATORBUG-15767 Change-Id: Ic9f513ecaeb15b56c90933b1d5e4cf70e045b481 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user