diff --git a/src/plugins/mercurial/srcdestdialog.cpp b/src/plugins/mercurial/srcdestdialog.cpp index 7ca905654576af53ad0de2827e56aabb261451aa..2a55fdd9fad85561bd895e31e8347003eb527c41 100644 --- a/src/plugins/mercurial/srcdestdialog.cpp +++ b/src/plugins/mercurial/srcdestdialog.cpp @@ -29,8 +29,13 @@ #include "srcdestdialog.h" #include "ui_srcdestdialog.h" +#include "mercurialplugin.h" +#include <QInputDialog> +#include <QSettings> +#include <QUrl> +using namespace VcsBase; using namespace Mercurial::Internal; SrcDestDialog::SrcDestDialog(QWidget *parent) : @@ -39,6 +44,13 @@ SrcDestDialog::SrcDestDialog(QWidget *parent) : { m_ui->setupUi(this); m_ui->localPathChooser->setExpectedKind(Utils::PathChooser::ExistingDirectory); + QUrl repoUrl(getRepoUrl()); + if (repoUrl.isEmpty()) + return; + if (!repoUrl.password().isEmpty()) + repoUrl.setPassword(QLatin1String("***")); + m_ui->defaultPath->setText(repoUrl.toString()); + m_ui->promptForCredentials->setChecked(!repoUrl.scheme().isEmpty() && repoUrl.scheme() != QLatin1String("file")); } SrcDestDialog::~SrcDestDialog() @@ -53,9 +65,32 @@ void SrcDestDialog::setPathChooserKind(Utils::PathChooser::Kind kind) QString SrcDestDialog::getRepositoryString() const { - if (m_ui->defaultButton->isChecked()) - return QString(); + if (m_ui->defaultButton->isChecked()) { + QUrl repoUrl(getRepoUrl()); + if (m_ui->promptForCredentials && (repoUrl.userName().isEmpty() || repoUrl.password().isEmpty())) { + if (repoUrl.userName().isEmpty()) { + QString user = QInputDialog::getText(0, tr("Enter user name"), tr("User name:")); + if (user.isEmpty()) + return repoUrl.toString(); + repoUrl.setUserName(user); + } + if (repoUrl.password().isEmpty()) { + QString password = QInputDialog::getText(0, tr("Enter password"), tr("Password:"), QLineEdit::Password); + if (!password.isEmpty()) + repoUrl.setPassword(password); + } + } + return repoUrl.toString(); + } if (m_ui->localButton->isChecked()) return m_ui->localPathChooser->path(); return m_ui->urlLineEdit->text(); } + +QUrl SrcDestDialog::getRepoUrl() const +{ + MercurialPlugin *plugin = MercurialPlugin::instance(); + const VcsBasePluginState state = plugin->currentState(); + QSettings settings(QString(QLatin1String("%1/.hg/hgrc")).arg(state.currentProjectPath()), QSettings::IniFormat); + return settings.value(QLatin1String("paths/default")).toUrl(); +} diff --git a/src/plugins/mercurial/srcdestdialog.h b/src/plugins/mercurial/srcdestdialog.h index ffe42d04229925bf70517b8849bfca97ac68d752..0bcdf21a647a06748a342546777bcf9109fde65d 100644 --- a/src/plugins/mercurial/srcdestdialog.h +++ b/src/plugins/mercurial/srcdestdialog.h @@ -49,6 +49,9 @@ public: void setPathChooserKind(Utils::PathChooser::Kind kind); QString getRepositoryString() const; +private: + QUrl getRepoUrl() const; + private: Ui::SrcDestDialog *m_ui; }; diff --git a/src/plugins/mercurial/srcdestdialog.ui b/src/plugins/mercurial/srcdestdialog.ui index c32ba1c127d8178052e1f85719004c25611c116e..3d20f31f68ce507c610ec197b59d0cf02a6554f2 100644 --- a/src/plugins/mercurial/srcdestdialog.ui +++ b/src/plugins/mercurial/srcdestdialog.ui @@ -60,6 +60,24 @@ </property> </widget> </item> + <item row="0" column="1"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="defaultPath"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="promptForCredentials"> + <property name="text"> + <string>Prompt for credentials</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </item> <item>