diff --git a/.travis.yml b/.travis.yml index c35c6124..2b34392d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ git: sudo: required dist: xenial env: - - VERSION="1.0.0" + - VERSION="1.1.0" install: - bash ci-scripts/$TRAVIS_OS_NAME/install.sh script: diff --git a/src/aux_widgets/CreateRepoDlg.cpp b/src/aux_widgets/CreateRepoDlg.cpp index f2d4f815..3115e540 100644 --- a/src/aux_widgets/CreateRepoDlg.cpp +++ b/src/aux_widgets/CreateRepoDlg.cpp @@ -7,6 +7,10 @@ #include #include +#include +#include + +using namespace QLogger; CreateRepoDlg::CreateRepoDlg(CreateRepoDlgType type, QSharedPointer git, QWidget *parent) : QDialog(parent) @@ -39,7 +43,9 @@ CreateRepoDlg::CreateRepoDlg(CreateRepoDlgType type, QSharedPointer g GitQlientSettings settings; const auto configGitUser = settings.value("GitConfigRepo", true).toBool(); + ui->cbGitUser->setChecked(configGitUser); + showGitControls(); } CreateRepoDlg::~CreateRepoDlg() @@ -84,26 +90,52 @@ void CreateRepoDlg::showGitControls() void CreateRepoDlg::accept() { - auto url = ui->leURL->text(); auto path = ui->lePath->text(); auto repoName = ui->leRepoName->text(); - if (!url.isEmpty() && !path.isEmpty() && !repoName.isEmpty()) + if (!path.isEmpty() && !repoName.isEmpty()) { repoName.replace(" ", "\\ "); const auto fullPath = path.append("/").append(repoName); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - auto ret = false; + GitExecResult ret; + QString actionApplied; + if (mType == CreateRepoDlgType::CLONE) - ret = mGit->clone(url, fullPath); + { + const auto url = ui->leURL->text(); + + if (!url.isEmpty()) + { + actionApplied = "clone"; + + QDir dir(fullPath); + + if (!dir.exists()) + dir.mkpath(fullPath); + + ret = mGit->clone(url, fullPath); + } + else + { + const auto msg = QString("You need to provider a URL to clone a repository."); + + QMessageBox::critical(this, tr("Nor URL provided"), msg); + + QLog_Error("UI", msg); + } + } else if (mType == CreateRepoDlgType::INIT) + { + actionApplied = "init"; ret = mGit->initRepo(fullPath); + } QApplication::restoreOverrideCursor(); - if (ret) + if (ret.success) { if (ui->cbGitUser->isChecked()) mGit->setLocalUserInfo({ ui->leGitName->text(), ui->leGitEmail->text() }); @@ -113,5 +145,13 @@ void CreateRepoDlg::accept() QDialog::accept(); } + else + { + const auto msg = ret.output.toString(); + + QMessageBox::critical(this, tr("Error when %1").arg(actionApplied), msg); + + QLog_Error("UI", msg); + } } } diff --git a/src/big_widgets/GitQlientRepo.cpp b/src/big_widgets/GitQlientRepo.cpp index b20f695b..a712126e 100644 --- a/src/big_widgets/GitQlientRepo.cpp +++ b/src/big_widgets/GitQlientRepo.cpp @@ -202,7 +202,7 @@ void GitQlientRepo::setRepository(const QString &newDir) QScopedPointer git(new GitConfig(mGitBase)); - if (!git->getGlobalUserInfo().isValid()) + if (!git->getGlobalUserInfo().isValid() && !git->getLocalUserInfo().isValid()) { QLog_Info("UI", QString("Configuring Git...")); diff --git a/src/branches/BranchTreeWidget.cpp b/src/branches/BranchTreeWidget.cpp index 0c795757..7a60ee1f 100644 --- a/src/branches/BranchTreeWidget.cpp +++ b/src/branches/BranchTreeWidget.cpp @@ -29,7 +29,7 @@ void BranchTreeWidget::showBranchesContextMenu(const QPoint &pos) auto currentBranch = mGit->getCurrentBranch(); auto selectedBranch = item->data(0, Qt::UserRole + 1).toString(); - if (!mLocal) + if (mLocal) selectedBranch = selectedBranch.remove("origin/"); const auto menu = new BranchContextMenu({ currentBranch, selectedBranch, mLocal, mGit }, this); diff --git a/src/config/GitConfigDlg.cpp b/src/config/GitConfigDlg.cpp index 95bb5cc4..2a48ea09 100644 --- a/src/config/GitConfigDlg.cpp +++ b/src/config/GitConfigDlg.cpp @@ -5,6 +5,9 @@ #include #include +#include +#include + GitConfigDlg::GitConfigDlg(const QSharedPointer &gitBase, QWidget *parent) : QDialog(parent) , ui(new Ui::GitConfigDlg) @@ -13,7 +16,6 @@ GitConfigDlg::GitConfigDlg(const QSharedPointer &gitBase, QWidget *pare ui->setupUi(this); setWindowFlags(Qt::FramelessWindowHint); - setAttribute(Qt::WA_DeleteOnClose); setStyleSheet(GitQlientStyles::getStyles()); QScopedPointer git(new GitConfig(mGit)); @@ -35,6 +37,31 @@ GitConfigDlg::~GitConfigDlg() delete ui; } +void GitConfigDlg::keyPressEvent(QKeyEvent *e) +{ + const auto key = e->key(); + + if (key == Qt::Key_Escape) + return; + + QDialog::keyPressEvent(e); +} + +void GitConfigDlg::closeEvent(QCloseEvent *e) +{ + if (!mPrepareToClose) + e->ignore(); + else + QDialog::closeEvent(e); +} + +void GitConfigDlg::close() +{ + mPrepareToClose = true; + + QDialog::close(); +} + void GitConfigDlg::accept() { QScopedPointer git(new GitConfig(mGit)); diff --git a/src/config/GitConfigDlg.h b/src/config/GitConfigDlg.h index 6d6c1f49..db28556a 100644 --- a/src/config/GitConfigDlg.h +++ b/src/config/GitConfigDlg.h @@ -54,9 +54,28 @@ class GitConfigDlg : public QDialog */ ~GitConfigDlg() override; + /** + * @brief Detects the press event to avoid closing the dialog when the Esc key is pressed. + * + * @param e The press event + */ + void keyPressEvent(QKeyEvent *e) override; + /** + * @brief Detects the close event to filter the close event and only close the dialog if the user clicked on the + * button. + * + * @param e The close event + */ + void closeEvent(QCloseEvent *e) override; + /** + * @brief Closes the dialog by user's action. + */ + void close(); + private: Ui::GitConfigDlg *ui; QSharedPointer mGit; + bool mPrepareToClose = false; /*! \brief Validates the data input by the user and stores it if correct. diff --git a/src/git/GitConfig.cpp b/src/git/GitConfig.cpp index 11651e15..150787bb 100644 --- a/src/git/GitConfig.cpp +++ b/src/git/GitConfig.cpp @@ -70,17 +70,24 @@ GitExecResult GitConfig::setLocalData(const QString &key, const QString &value) return mGitBase->run(QString("git config --local %1 \"%2\"").arg(key, value)); } -bool GitConfig::clone(const QString &url, const QString &fullPath) +GitExecResult GitConfig::clone(const QString &url, const QString &fullPath) { const auto asyncRun = new GitCloneProcess(mGitBase->getWorkingDir()); connect(asyncRun, &GitCloneProcess::signalProgress, this, &GitConfig::signalCloningProgress, Qt::DirectConnection); - return asyncRun->run(QString("git clone --progress %1 %2").arg(url, fullPath)).success; + mGitBase->setWorkingDir(fullPath); + + return asyncRun->run(QString("git clone --progress %1 %2").arg(url, fullPath)); } -bool GitConfig::initRepo(const QString &fullPath) +GitExecResult GitConfig::initRepo(const QString &fullPath) { - return mGitBase->run(QString("git init %1").arg(fullPath)).success; + const auto ret = mGitBase->run(QString("git init %1").arg(fullPath)); + + if (ret.success) + mGitBase->setWorkingDir(fullPath); + + return ret; } GitExecResult GitConfig::getLocalConfig() const diff --git a/src/git/GitConfig.h b/src/git/GitConfig.h index 66a170b2..72871ebc 100644 --- a/src/git/GitConfig.h +++ b/src/git/GitConfig.h @@ -55,8 +55,8 @@ class GitConfig : public QObject GitUserInfo getLocalUserInfo() const; void setLocalUserInfo(const GitUserInfo &info); GitExecResult setLocalData(const QString &key, const QString &value); - bool clone(const QString &url, const QString &fullPath); - bool initRepo(const QString &fullPath); + GitExecResult clone(const QString &url, const QString &fullPath); + GitExecResult initRepo(const QString &fullPath); GitExecResult getLocalConfig() const; GitExecResult getGlobalConfig() const; GitExecResult getRemoteForBranch(const QString &branch);