diff options
author | Christian A. Reiter <[email protected]> | 2012-12-09 14:12:43 +0100 |
---|---|---|
committer | Tobias Hunger <[email protected]> | 2012-12-12 12:21:37 +0100 |
commit | a6eb1b26403d6ad63acf30c9db1eba246835b77e (patch) | |
tree | a4e613972a96f39022fc4b1bfa8a513201f61354 /src/plugins/git/branchadddialog.cpp | |
parent | 4ffc1a2f1059b7c0d7fb93088372e5a3fbbbaecb (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.cpp | 70 |
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 |