From b8df1a9b55f34e11d507d76eead145c45f8094d3 Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Sun, 8 Jun 2014 23:34:01 +0300
Subject: [PATCH] DiffEditor: Support patch with empty new/deleted file

Change-Id: Ic0341239309be3eae1ab2faf296bc6a698acebb0
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
---
 src/plugins/diffeditor/diffeditorplugin.cpp | 16 +++++++++++++++-
 src/plugins/diffeditor/diffutils.cpp        |  6 ++++--
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index a8c2c46b64c..7dbf1bb28b7 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -468,6 +468,12 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
                                 "+++ /dev/null\n"
                                 "@@ -1 +0,0 @@\n"
                                 "-foo\n"
+                                "diff --git a/empty b/empty\n"
+                                "new file mode 100644\n"
+                                "index 0000000..e69de29\n"
+                                "diff --git a/empty b/empty\n"
+                                "deleted file mode 100644\n"
+                                "index e69de29..0000000\n"
                                   );
 
     FileData fileData1;
@@ -551,8 +557,16 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
     chunkData4.rows = rows4;
     fileData4.chunks.append(chunkData4);
 
+    FileData fileData5;
+    fileData5.leftFileInfo = DiffFileInfo(QLatin1String("empty"), QLatin1String("0000000"));
+    fileData5.rightFileInfo = DiffFileInfo(QLatin1String("empty"), QLatin1String("e69de29"));
+
+    FileData fileData6;
+    fileData6.leftFileInfo = DiffFileInfo(QLatin1String("empty"), QLatin1String("e69de29"));
+    fileData6.rightFileInfo = DiffFileInfo(QLatin1String("empty"), QLatin1String("0000000"));
+
     QList<FileData> fileDataList;
-    fileDataList << fileData1 << fileData2 << fileData3 << fileData4;
+    fileDataList << fileData1 << fileData2 << fileData3 << fileData4 << fileData5 << fileData6;
 
     QTest::newRow("Git patch") << patch
                                << fileDataList;
diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp
index 06e3c2c5781..f6b8de8c67a 100644
--- a/src/plugins/diffeditor/diffutils.cpp
+++ b/src/plugins/diffeditor/diffutils.cpp
@@ -847,8 +847,10 @@ static FileData readGitHeaderAndChunks(const QString &headerAndChunks,
                                    + rightFileName
                                    + QLatin1String(" differ$)"));
 
-        // followed either by leftFileRegExp or by binaryRegExp
-        if (leftFileRegExp.indexIn(patch, 0) == 0) {
+        // empty or followed either by leftFileRegExp or by binaryRegExp
+        if (patch.isEmpty() && (fileData.leftFileInfo.devNull || fileData.rightFileInfo.devNull)) {
+            readOk = true;
+        } else if (leftFileRegExp.indexIn(patch, 0) == 0) {
             patch = patch.mid(leftFileRegExp.capturedTexts().at(1).count());
 
             // followed by rightFileRegExp
-- 
GitLab