From e01496122d6033ec7bd5e72922f275ae028b042c Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Date: Wed, 12 Nov 2014 15:30:06 +0100
Subject: [PATCH] Implement DiffEditorDocument::suggestedFileName().

Try to derive a git-format-patch type file name from
the description.

Change-Id: I581f4ba87a5ac4b82ca6519be8aa13fb4b4ebe43
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/diffeditor/diffeditordocument.cpp | 25 +++++++++++++++++++
 src/plugins/diffeditor/diffeditordocument.h   |  2 +-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp
index e34a1844444..470652aa2cb 100644
--- a/src/plugins/diffeditor/diffeditordocument.cpp
+++ b/src/plugins/diffeditor/diffeditordocument.cpp
@@ -127,4 +127,29 @@ bool DiffEditorDocument::open(QString *errorString, const QString &fileName)
     return true;
 }
 
+QString DiffEditorDocument::suggestedFileName() const
+{
+    QString result = QStringLiteral("0001");
+    const QString description = m_controller->description();
+    if (!description.isEmpty()) {
+        // Derive "git format-patch-type" file name from subject.
+        const int pos = description.indexOf(QLatin1String("\n\n    "));
+        const int endPos = pos >= 0 ? description.indexOf(QLatin1Char('\n'), pos + 6) : -1;
+        if (endPos > pos) {
+            const QChar space(QLatin1Char(' '));
+            const QChar dash(QLatin1Char('-'));
+            QString subject = description.mid(pos, endPos - pos);
+            for (int i = 0; i < subject.size(); ++i) {
+                if (!subject.at(i).isLetterOrNumber())
+                    subject[i] = space;
+            }
+            subject = subject.simplified();
+            subject.replace(space, dash);
+            result += dash;
+            result += subject;
+        }
+    }
+    return result + QStringLiteral(".patch");
+}
+
 } // namespace DiffEditor
diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h
index 01c2400ba99..05bc7c067e2 100644
--- a/src/plugins/diffeditor/diffeditordocument.h
+++ b/src/plugins/diffeditor/diffeditordocument.h
@@ -50,7 +50,7 @@ public:
 
     bool setContents(const QByteArray &contents);
     QString defaultPath() const;
-    QString suggestedFileName() const { return QString(); }
+    QString suggestedFileName() const Q_DECL_OVERRIDE;
 
     bool isModified() const { return false; }
     bool isSaveAsAllowed() const { return true; }
-- 
GitLab