aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git/branchadddialog.cpp
diff options
context:
space:
mode:
authorChristian A. Reiter <[email protected]>2012-12-09 14:12:43 +0100
committerTobias Hunger <[email protected]>2012-12-12 12:21:37 +0100
commita6eb1b26403d6ad63acf30c9db1eba246835b77e (patch)
treea4e613972a96f39022fc4b1bfa8a513201f61354 /src/plugins/git/branchadddialog.cpp
parent4ffc1a2f1059b7c0d7fb93088372e5a3fbbbaecb (diff)
add branch name validation to git VCS plugin
Task-number: QTCREATORBUG-8370 Change-Id: Iadca383dc01a55deab2cbfdb5ef439dfb0f2ab12 Reviewed-by: Orgad Shaneh <[email protected]> Reviewed-by: Tobias Hunger <[email protected]>
Diffstat (limited to 'src/plugins/git/branchadddialog.cpp')
-rw-r--r--src/plugins/git/branchadddialog.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/plugins/git/branchadddialog.cpp b/src/plugins/git/branchadddialog.cpp
index 4f9df40187d..ccb4cef21a2 100644
--- a/src/plugins/git/branchadddialog.cpp
+++ b/src/plugins/git/branchadddialog.cpp
@@ -30,14 +30,78 @@
#include "branchadddialog.h"
#include "ui_branchadddialog.h"
+#include <QPushButton>
+#include <QValidator>
+
namespace Git {
namespace Internal {
+/*!
+ * \brief Validates the corresponding string as a valid git branch name
+ *
+ * The class does this by a couple of rules that are applied on the string.
+ *
+ */
+class BranchNameValidator : public QValidator
+{
+public:
+ BranchNameValidator(QObject *parent = 0) :
+ QValidator(parent),
+ m_invalidChars(QLatin1String(
+ "\\s" // no whitespace
+ "|~" // no "~"
+ "|\\^" // no "^"
+ "|\\[" // no "["
+ "|\\.\\." // no ".."
+ "|/\\." // no slashdot
+ "|:" // no ":"
+ "|@\\{" // no "@{" sequence
+ "|\\\\" // no backslash
+ "|//" // no double slash
+ "|^/" // no leading slash
+ ))
+ {
+ }
+
+ ~BranchNameValidator() {}
+
+ State validate(QString &input, int &pos) const
+ {
+ Q_UNUSED(pos)
+
+ // NoGos
+
+ if (input.contains(m_invalidChars))
+ return Invalid;
+
+
+ // "Intermediate" patterns, may change to Acceptable when user edits further:
+
+ if (input.endsWith(QLatin1String(".lock"))) //..may not end with ".lock"
+ return Intermediate;
+
+ if (input.endsWith(QLatin1Char('.'))) // no dot at the end (but allowed in the middle)
+ return Intermediate;
+
+ if (input.endsWith(QLatin1Char('/'))) // no slash at the end (but allowed in the middle)
+ return Intermediate;
+
+ // is a valid branch name
+ return Acceptable;
+ }
+
+private:
+ const QRegExp m_invalidChars;
+};
+
+
BranchAddDialog::BranchAddDialog(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::BranchAddDialog)
{
m_ui->setupUi(this);
+ m_ui->branchNameEdit->setValidator(new BranchNameValidator(this));
+ connect(m_ui->branchNameEdit, SIGNAL(textChanged(QString)), this, SLOT(updateButtonStatus()));
}
BranchAddDialog::~BranchAddDialog()
@@ -72,5 +136,11 @@ bool BranchAddDialog::track()
return m_ui->trackingCheckBox->isChecked();
}
+/*! Updates the ok button enabled state of the dialog according to the validity of the branch name. */
+void BranchAddDialog::updateButtonStatus()
+{
+ m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(m_ui->branchNameEdit->hasAcceptableInput());
+}
+
} // namespace Internal
} // namespace Git