diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index e34a18444444886c957204ea65e3b0673a463a29..470652aa2cbd53d10287fc196304ae988bd89527 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 01c2400ba99a89d0dfdcfcf1b57f65a21841883f..05bc7c067e2d639290848ae4516968c50c4c1e7f 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; }