DiffEditor: Fix detection of subsequent renames

Change-Id: Ie47c5a7ca91752b0da40b46f780ee5e0b3b6ce29
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
This commit is contained in:
Orgad Shaneh
2014-09-29 12:14:15 +03:00
committed by Orgad Shaneh
parent c3c19aaab6
commit 0b1b080cb3
2 changed files with 55 additions and 5 deletions

View File

@@ -820,6 +820,56 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
QTest::newRow("Blank line followed by No newline") << patch QTest::newRow("Blank line followed by No newline") << patch
<< fileDataList5; << fileDataList5;
//////////////
// Based on 953cdb97
patch = _("diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/textdocument.h\n"
"similarity index 100%\n"
"rename from src/plugins/texteditor/basetextdocument.h\n"
"rename to src/plugins/texteditor/textdocument.h\n"
"diff --git a/src/plugins/texteditor/basetextdocumentlayout.cpp b/src/plugins/texteditor/textdocumentlayout.cpp\n"
"similarity index 79%\n"
"rename from src/plugins/texteditor/basetextdocumentlayout.cpp\n"
"rename to src/plugins/texteditor/textdocumentlayout.cpp\n"
"index 0121933..01cc3a0 100644\n"
"--- a/src/plugins/texteditor/basetextdocumentlayout.cpp\n"
"+++ b/src/plugins/texteditor/textdocumentlayout.cpp\n"
"@@ -2,5 +2,5 @@ void func()\n"
" A\n"
" B\n"
"-C\n"
"+Z\n"
" D\n"
" \n"
);
fileData1 = FileData();
fileData1.leftFileInfo = DiffFileInfo(_("src/plugins/texteditor/basetextdocument.h"));
fileData1.rightFileInfo = DiffFileInfo(_("src/plugins/texteditor/textdocument.h"));
fileData1.fileOperation = FileData::RenameFile;
fileData2 = FileData();
fileData2.leftFileInfo = DiffFileInfo(_("src/plugins/texteditor/basetextdocumentlayout.cpp"), _("0121933"));
fileData2.rightFileInfo = DiffFileInfo(_("src/plugins/texteditor/textdocumentlayout.cpp"), _("01cc3a0"));
fileData2.fileOperation = FileData::RenameFile;
chunkData2.leftStartingLineNumber = 1;
chunkData2.rightStartingLineNumber = 1;
rows2.clear();
rows2 << RowData(_("A"));
rows2 << RowData(_("B"));
rows2 << RowData(_("C"), _("Z"));
rows2 << RowData(_("D"));
rows2 << RowData(_(""));
chunkData2.rows = rows2;
fileData2.chunks.clear();
fileData2.chunks << chunkData2;
QList<FileData> fileDataList6;
fileDataList6 << fileData1 << fileData2;
QTest::newRow("Multiple renames") << patch
<< fileDataList6;
} }
void DiffEditor::Internal::DiffEditorPlugin::testReadPatch() void DiffEditor::Internal::DiffEditorPlugin::testReadPatch()

View File

@@ -741,7 +741,7 @@ static QList<ChunkData> readChunks(const QString &patch,
chunkData.rightStartingLineNumber = rightStartingPos - 1; chunkData.rightStartingLineNumber = rightStartingPos - 1;
chunkData.contextInfo = contextInfo; chunkData.contextInfo = contextInfo;
chunkDataList.append(chunkData); chunkDataList.append(chunkData);
} while ((pos = chunkRegExp.indexIn(patch, pos)) != -1); } while ((pos = chunkRegExp.indexIn(patch, pos, QRegExp::CaretAtOffset)) != -1);
if (endOfLastChunk > 0) { if (endOfLastChunk > 0) {
const QString lines = patch.mid(endOfLastChunk); const QString lines = patch.mid(endOfLastChunk);
@@ -1037,8 +1037,8 @@ static QList<FileData> readGitPatch(const QString &patch, bool ignoreWhitespace,
QList<FileData> fileDataList; QList<FileData> fileDataList;
const int simpleGitPos = simpleGitRegExp.indexIn(patch, 0); int simpleGitPos = simpleGitRegExp.indexIn(patch);
const int similarityPos = similarityRegExp.indexIn(patch, 0); int similarityPos = similarityRegExp.indexIn(patch);
bool simpleGitMatched = false; bool simpleGitMatched = false;
int pos = -1; int pos = -1;
@@ -1104,8 +1104,8 @@ static QList<FileData> readGitPatch(const QString &patch, bool ignoreWhitespace,
break; // either copy or rename, otherwise broken break; // either copy or rename, otherwise broken
} }
const int simpleGitPos = simpleGitRegExp.indexIn(patch, pos); simpleGitPos = simpleGitRegExp.indexIn(patch, pos, QRegExp::CaretAtOffset);
const int similarityPos = similarityRegExp.indexIn(patch, pos); similarityPos = similarityRegExp.indexIn(patch, pos, QRegExp::CaretAtOffset);
simpleGitMatched = false; simpleGitMatched = false;
pos = -1; pos = -1;