Commit 9dbc785a authored by Orgad Shaneh's avatar Orgad Shaneh Committed by Orgad Shaneh

DiffEditor: Fix parsing of dirty submodule diff

It has no index.

Change-Id: Ifbc06045f3b39245288d15bdf44f8053fe443bc8
Reviewed-by: default avatarJarek Kobus <jaroslaw.kobus@digia.com>
parent 2259aa12
......@@ -871,6 +871,32 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
QTest::newRow("Multiple renames") << patch
<< fileDataList6;
//////////////
// Dirty submodule
patch = _("diff --git a/src/shared/qbs b/src/shared/qbs\n"
"--- a/src/shared/qbs\n"
"+++ b/src/shared/qbs\n"
"@@ -1 +1 @@\n"
"-Subproject commit eda76354077a427d692fee05479910de31040d3f\n"
"+Subproject commit eda76354077a427d692fee05479910de31040d3f-dirty\n"
);
fileData1 = FileData();
fileData1.leftFileInfo = DiffFileInfo(_("src/shared/qbs"));
fileData1.rightFileInfo = DiffFileInfo(_("src/shared/qbs"));
chunkData1.leftStartingLineNumber = 0;
chunkData1.rightStartingLineNumber = 0;
rows1.clear();
rows1 << RowData(_("Subproject commit eda76354077a427d692fee05479910de31040d3f"),
_("Subproject commit eda76354077a427d692fee05479910de31040d3f-dirty"));
chunkData1.rows = rows1;
fileData1.chunks.clear();
fileData1.chunks << chunkData1;
QList<FileData> fileDataList7;
fileDataList7 << fileData1;
QTest::newRow("Dirty submodule") << patch
<< fileDataList7;
}
void DiffEditor::Internal::DiffEditorPlugin::testReadPatch()
......
......@@ -918,39 +918,39 @@ static FileData readGitHeaderAndChunks(const QString &headerAndChunks,
fileData.rightFileInfo.typeInfo = indexRegExp.cap(2);
patch.remove(0, indexRegExp.matchedLength());
}
const QRegExp leftFileRegExp(QLatin1String("^-{3} ") // "--- "
+ leftFileName // "a/fileName" or "/dev/null"
+ QLatin1String("(?:\\t[^\\n]*)*\\n")); // optionally followed by: \t anything \t anything ...)
const QRegExp rightFileRegExp(QLatin1String("^\\+{3} ") // "+++ "
+ rightFileName // "b/fileName" or "/dev/null"
+ QLatin1String("(?:\\t[^\\n]*)*\\n")); // optionally followed by: \t anything \t anything ...)
const QRegExp binaryRegExp(QLatin1String("^Binary files ")
+ leftFileName
+ QLatin1String(" and ")
+ rightFileName
+ QLatin1String(" differ$"));
// empty or followed either by leftFileRegExp or by binaryRegExp
if (patch.isEmpty() && (fileData.fileOperation == FileData::NewFile
|| fileData.fileOperation == FileData::DeleteFile)) {
readOk = true;
} else if (leftFileRegExp.indexIn(patch) == 0) {
patch.remove(0, leftFileRegExp.matchedLength());
const QRegExp leftFileRegExp(QLatin1String("^-{3} ") // "--- "
+ leftFileName // "a/fileName" or "/dev/null"
+ QLatin1String("(?:\\t[^\\n]*)*\\n")); // optionally followed by: \t anything \t anything ...)
const QRegExp rightFileRegExp(QLatin1String("^\\+{3} ") // "+++ "
+ rightFileName // "b/fileName" or "/dev/null"
+ QLatin1String("(?:\\t[^\\n]*)*\\n")); // optionally followed by: \t anything \t anything ...)
const QRegExp binaryRegExp(QLatin1String("^Binary files ")
+ leftFileName
+ QLatin1String(" and ")
+ rightFileName
+ QLatin1String(" differ$"));
// empty or followed either by leftFileRegExp or by binaryRegExp
if (patch.isEmpty() && (fileData.fileOperation == FileData::NewFile
|| fileData.fileOperation == FileData::DeleteFile)) {
readOk = true;
} else if (leftFileRegExp.indexIn(patch) == 0) {
patch.remove(0, leftFileRegExp.matchedLength());
// followed by rightFileRegExp
if (rightFileRegExp.indexIn(patch) == 0) {
patch.remove(0, rightFileRegExp.matchedLength());
// followed by rightFileRegExp
if (rightFileRegExp.indexIn(patch) == 0) {
patch.remove(0, rightFileRegExp.matchedLength());
fileData.chunks = readChunks(patch,
ignoreWhitespace,
&fileData.lastChunkAtTheEndOfFile,
&readOk);
}
} else if (binaryRegExp.indexIn(patch) == 0) {
readOk = true;
fileData.binaryFiles = true;
fileData.chunks = readChunks(patch,
ignoreWhitespace,
&fileData.lastChunkAtTheEndOfFile,
&readOk);
}
} else if (binaryRegExp.indexIn(patch) == 0) {
readOk = true;
fileData.binaryFiles = true;
}
if (ok)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment