SVN: Show conflicted files in submit editor

So far, they didn't show up in the submit editor,
so they could be forgotten during a commit.

Unlike Git, these files don't prohibit the commit,
but at least are shown in the list of modified files
and can be diffed.

Change-Id: Ia5cac7befb870321d2048622c1fac022d979c745
Reviewed-by: Hugues Delorme <delorme.hugues@fougue.pro>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Andre Hartmann
2016-05-20 19:20:49 +02:00
committed by André Hartmann
parent 5d3823ac47
commit a5b7ba58f0
4 changed files with 16 additions and 13 deletions

View File

@@ -133,7 +133,7 @@ static inline QString debugCodec(const QTextCodec *c)
return c ? QString::fromLatin1(c->name()) : QString::fromLatin1("Null codec"); return c ? QString::fromLatin1(c->name()) : QString::fromLatin1("Null codec");
} }
// Parse "svn status" output for added/modified/deleted files // Parse "svn status" output for added/conflicted/deleted/modified files
// "M<7blanks>file" // "M<7blanks>file"
typedef QList<SubversionSubmitEditor::StatusFilePair> StatusList; typedef QList<SubversionSubmitEditor::StatusFilePair> StatusList;
@@ -145,8 +145,9 @@ StatusList parseStatusOutput(const QString &output)
foreach (const QString &l, list) { foreach (const QString &l, list) {
const QString line =l.trimmed(); const QString line =l.trimmed();
if (line.size() > 8) { if (line.size() > 8) {
const QChar state = line.at(0); const QString state = line.left(1);
if (state == QLatin1Char('A') || state == QLatin1Char('D') || state == QLatin1Char('M')) { if (state == FileAddedC || state == FileConflictedC
|| state == FileDeletedC || state == FileModifiedC) {
const QString fileName = line.mid(7); // Column 8 starting from svn 1.6 const QString fileName = line.mid(7); // Column 8 starting from svn 1.6
changeSet.push_back(SubversionSubmitEditor::StatusFilePair(QString(state), fileName.trimmed())); changeSet.push_back(SubversionSubmitEditor::StatusFilePair(QString(state), fileName.trimmed()));
} }

View File

@@ -57,6 +57,11 @@ struct SubversionResponse
QString message; QString message;
}; };
const char FileAddedC[] = "A";
const char FileConflictedC[] = "C";
const char FileDeletedC[] = "D";
const char FileModifiedC[] = "M";
class SubversionPlugin : public VcsBase::VcsBasePlugin class SubversionPlugin : public VcsBase::VcsBasePlugin
{ {
Q_OBJECT Q_OBJECT

View File

@@ -24,16 +24,12 @@
****************************************************************************/ ****************************************************************************/
#include "subversionsubmiteditor.h" #include "subversionsubmiteditor.h"
#include "subversionplugin.h"
#include <coreplugin/idocument.h> #include <coreplugin/idocument.h>
#include <vcsbase/submiteditorwidget.h> #include <vcsbase/submiteditorwidget.h>
#include <vcsbase/submitfilemodel.h> #include <vcsbase/submitfilemodel.h>
static const char FileAddedC[] = "A";
static const char FileConflictedC[] = "C";
static const char FileDeletedC[] = "D";
static const char FileModifiedC[] = "M";
using namespace Subversion::Internal; using namespace Subversion::Internal;
SubversionSubmitEditor::SubversionSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters) : SubversionSubmitEditor::SubversionSubmitEditor(const VcsBase::VcsBaseSubmitEditorParameters *parameters) :
@@ -45,7 +41,6 @@ SubversionSubmitEditor::SubversionSubmitEditor(const VcsBase::VcsBaseSubmitEdito
void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOutput) void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOutput)
{ {
typedef QList<StatusFilePair>::const_iterator ConstIterator;
auto model = new VcsBase::SubmitFileModel(this); auto model = new VcsBase::SubmitFileModel(this);
// Hack to allow completion in "description" field : completion needs a root repository, the // Hack to allow completion in "description" field : completion needs a root repository, the
// checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin) // checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin)
@@ -64,9 +59,11 @@ void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOu
return VcsBase::SubmitFileModel::FileStatusUnknown; return VcsBase::SubmitFileModel::FileStatusUnknown;
} ); } );
const ConstIterator cend = statusOutput.constEnd(); for (const StatusFilePair &pair : statusOutput) {
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it) const VcsBase::CheckMode checkMode =
model->addFile(it->second, it->first); (pair.first == FileConflictedC) ? VcsBase::Uncheckable : VcsBase::Unchecked;
model->addFile(pair.second, pair.first, checkMode);
}
setFileModel(model); setFileModel(model);
} }

View File

@@ -40,7 +40,7 @@ public:
static QString fileFromStatusLine(const QString &statusLine); static QString fileFromStatusLine(const QString &statusLine);
// A list of ( 'A','M','D') status indicators and file names. // A list of ( 'A','C','D','M') status indicators and file names.
typedef QPair<QString, QString> StatusFilePair; typedef QPair<QString, QString> StatusFilePair;
void setStatusList(const QList<StatusFilePair> &statusOutput); void setStatusList(const QList<StatusFilePair> &statusOutput);