diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2015-08-24 20:30:18 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2015-08-25 06:48:49 +0000 |
commit | d618c05e3a71f5978a9619415e7241d2e18dacbe (patch) | |
tree | 05600d136a2e20858e04252d51af5c12569d80bc | |
parent | 9bd066cb94f0b56b96c90a2bad375572190031d3 (diff) | |
download | qt-creator-d618c05e3a71f5978a9619415e7241d2e18dacbe.tar.gz |
DiffEditor: Support mode change in Git diff
Task-number: QTCREATORBUG-14963
Change-Id: I5d26ae810add657a94fb40a5d4437e2d17a1625a
Reviewed-by: Jarek Kobus <jaroslaw.kobus@theqtcompany.com>
-rw-r--r-- | src/plugins/diffeditor/diffeditorplugin.cpp | 18 | ||||
-rw-r--r-- | src/plugins/diffeditor/diffutils.cpp | 4 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp index 7915ebaad4..11c9e459d7 100644 --- a/src/plugins/diffeditor/diffeditorplugin.cpp +++ b/src/plugins/diffeditor/diffeditorplugin.cpp @@ -541,6 +541,17 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data() "similarity index 99%\n" "rename from file a.txt\n" "rename to file b.txt\n" + "diff --git a/file.txt b/file.txt\n" + "old mode 100644\n" + "new mode 100755\n" + "index 1234567..9876543\n" + "--- a/file.txt\n" + "+++ b/file.txt\n" + "@@ -20,3 +20,3 @@\n" + " A\n" + "-B\n" + "+C\n" + " D\n" ); FileData fileData1; @@ -641,8 +652,13 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data() fileData8.rightFileInfo = DiffFileInfo(_("file b.txt")); fileData8.fileOperation = FileData::RenameFile; + FileData fileData9; + fileData9.leftFileInfo = DiffFileInfo(_("file.txt"), _("1234567")); + fileData9.rightFileInfo = DiffFileInfo(_("file.txt"), _("9876543")); + fileData9.chunks << chunkData7; QList<FileData> fileDataList1; - fileDataList1 << fileData1 << fileData2 << fileData3 << fileData4 << fileData5 << fileData6 << fileData7 << fileData8; + fileDataList1 << fileData1 << fileData2 << fileData3 << fileData4 << fileData5 + << fileData6 << fileData7 << fileData8 << fileData9; QTest::newRow("Git patch") << patch << fileDataList1; diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp index 9bc5d3a75e..9b136df250 100644 --- a/src/plugins/diffeditor/diffutils.cpp +++ b/src/plugins/diffeditor/diffutils.cpp @@ -892,6 +892,8 @@ static FileData readGitHeaderAndChunks(const QString &headerAndChunks, // will be followed by: index shasha..0000000, file "b" replaced by "/dev/null", @@ -m,n +0,0 @@ const QRegExp deletedFileMode(QLatin1String("^deleted file mode \\d+\\n")); // deleted file mode octal + const QRegExp modeChangeRegExp(QLatin1String("^old mode \\d+\\nnew mode \\d+\\n")); + const QRegExp indexRegExp(QLatin1String("^index (\\w+)\\.{2}(\\w+)(?: \\d+)?(\\n|$)")); // index cap1..cap2(optionally: octal) QString leftFileName = QLatin1String("a/") + fileName; @@ -905,6 +907,8 @@ static FileData readGitHeaderAndChunks(const QString &headerAndChunks, fileData.fileOperation = FileData::DeleteFile; rightFileName = devNull; patch.remove(0, deletedFileMode.matchedLength()); + } else if (modeChangeRegExp.indexIn(patch) == 0) { + patch.remove(0, modeChangeRegExp.matchedLength()); } if (indexRegExp.indexIn(patch) == 0) { |