summaryrefslogtreecommitdiff
path: root/src/plugins/git
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2013-07-08 15:01:17 +0200
committerEike Ziller <eike.ziller@digia.com>2013-07-08 15:01:17 +0200
commita98fe15fe51a87e2943623caf2a8ea072cfc5919 (patch)
treecd591ee60c464a385c02a92bcaba34ccdeadcd2e /src/plugins/git
parent2c211007257f5e58e2809692b74bb5b18f63b80c (diff)
parent07c0a8348c59945465e9f2330a40f625543f7f8a (diff)
downloadqt-creator-a98fe15fe51a87e2943623caf2a8ea072cfc5919.tar.gz
Merge remote-tracking branch 'origin/2.8' into HEAD
Conflicts: qbs/pluginspec/pluginspec.qbs Change-Id: Ic8e992623b9eda8913ee473c779a8df27643ccc9
Diffstat (limited to 'src/plugins/git')
-rw-r--r--src/plugins/git/branchdialog.cpp12
-rw-r--r--src/plugins/git/branchdialog.h1
-rw-r--r--src/plugins/git/branchmodel.cpp11
-rw-r--r--src/plugins/git/gitclient.cpp9
-rw-r--r--src/plugins/git/gitclient.h1
-rw-r--r--src/plugins/git/gitplugin.cpp8
-rw-r--r--src/plugins/git/gitplugin.h1
-rw-r--r--src/plugins/git/logchangedialog.cpp13
8 files changed, 41 insertions, 15 deletions
diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp
index 1f9ce03bdb..9b97eae4fb 100644
--- a/src/plugins/git/branchdialog.cpp
+++ b/src/plugins/git/branchdialog.cpp
@@ -97,6 +97,12 @@ void BranchDialog::refresh(const QString &repository, bool force)
m_ui->branchView->expandAll();
}
+void BranchDialog::refreshIfSame(const QString &repository)
+{
+ if (m_repository == repository)
+ refresh();
+}
+
void BranchDialog::enableButtons()
{
QModelIndex idx = selectedIndex();
@@ -306,8 +312,7 @@ void BranchDialog::log()
void BranchDialog::merge()
{
QModelIndex idx = selectedIndex();
- QTC_CHECK(m_model->isLocal(m_model->currentBranch())); // otherwise the button would not be enabled!
- QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled!
+ QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled!
const QString branch = m_model->fullName(idx, true);
GitClient *client = GitPlugin::instance()->gitClient();
@@ -318,8 +323,7 @@ void BranchDialog::merge()
void BranchDialog::rebase()
{
QModelIndex idx = selectedIndex();
- QTC_CHECK(m_model->isLocal(m_model->currentBranch())); // otherwise the button would not be enabled!
- QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled!
+ QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled!
const QString baseBranch = m_model->fullName(idx, true);
GitClient *client = GitPlugin::instance()->gitClient();
diff --git a/src/plugins/git/branchdialog.h b/src/plugins/git/branchdialog.h
index c1b38ac619..aac316d1c8 100644
--- a/src/plugins/git/branchdialog.h
+++ b/src/plugins/git/branchdialog.h
@@ -61,6 +61,7 @@ public:
public slots:
void refresh(const QString &repository, bool force);
+ void refreshIfSame(const QString &repository);
private slots:
void enableButtons();
diff --git a/src/plugins/git/branchmodel.cpp b/src/plugins/git/branchmodel.cpp
index feee651ed8..1a07e15692 100644
--- a/src/plugins/git/branchmodel.cpp
+++ b/src/plugins/git/branchmodel.cpp
@@ -80,7 +80,7 @@ public:
bool isLeaf() const
{
- return children.isEmpty();
+ return children.isEmpty() && parent && parent->parent;
}
bool childOf(BranchNode *node) const
@@ -339,8 +339,12 @@ void BranchModel::clear()
bool BranchModel::refresh(const QString &workingDirectory, QString *errorMessage)
{
- if (workingDirectory.isEmpty())
+ beginResetModel();
+ clear();
+ if (workingDirectory.isEmpty()) {
+ endResetModel();
return false;
+ }
m_currentSha = m_client->synchronousTopRevision(workingDirectory);
QStringList args;
@@ -349,9 +353,6 @@ bool BranchModel::refresh(const QString &workingDirectory, QString *errorMessage
if (!m_client->synchronousForEachRefCmd(workingDirectory, args, &output, errorMessage))
VcsBase::VcsBaseOutputWindow::instance()->appendError(*errorMessage);
- beginResetModel();
- clear();
-
m_workingDirectory = workingDirectory;
const QStringList lines = output.split(QLatin1Char('\n'));
foreach (const QString &l, lines)
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 2d7672bb61..6c2afdc6c5 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2362,6 +2362,11 @@ void GitClient::finishSubmoduleUpdate()
m_updatedSubmodules.clear();
}
+void GitClient::fetchFinished(const QVariant &cookie)
+{
+ GitPlugin::instance()->updateBranches(cookie.toString());
+}
+
// Trim a git status file spec: "modified: foo .cpp" -> "modified: foo .cpp"
static inline QString trimFileSpecification(QString fileSpec)
{
@@ -2974,7 +2979,9 @@ void GitClient::fetch(const QString &workingDirectory, const QString &remote)
{
QStringList arguments(QLatin1String("fetch"));
arguments << (remote.isEmpty() ? QLatin1String("--all") : remote);
- executeGit(workingDirectory, arguments, 0, true);
+ VcsBase::Command *command = executeGit(workingDirectory, arguments, 0, true);
+ command->setCookie(workingDirectory);
+ connect(command, SIGNAL(success(QVariant)), this, SLOT(fetchFinished(QVariant)));
}
bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 749b2ac038..a51735eca6 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -327,6 +327,7 @@ private slots:
void appendOutputData(const QByteArray &data) const;
void appendOutputDataSilently(const QByteArray &data) const;
void finishSubmoduleUpdate();
+ void fetchFinished(const QVariant &cookie);
private:
QTextCodec *getSourceCodec(const QString &file) const;
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 450a0ddf94..ff7ccd8ed2 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -695,6 +695,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
connect(Core::ICore::vcsManager(), SIGNAL(repositoryChanged(QString)),
this, SLOT(updateContinueAndAbortCommands()));
+ connect(Core::ICore::vcsManager(), SIGNAL(repositoryChanged(QString)),
+ this, SLOT(updateBranches(QString)), Qt::QueuedConnection);
if (!Core::ICore::mimeDatabase()->addMimeTypes(QLatin1String(RC_GIT_MIME_XML), errorMessage))
return false;
@@ -1435,6 +1437,12 @@ void GitPlugin::updateContinueAndAbortCommands()
}
}
+void GitPlugin::updateBranches(const QString &repository)
+{
+ if (m_branchDialog && m_branchDialog->isVisible())
+ m_branchDialog->refreshIfSame(repository);
+}
+
void GitPlugin::updateRepositoryBrowserAction()
{
const bool repositoryEnabled = currentState().hasTopLevel();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 5a4663dfdc..6d795fb573 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -102,6 +102,7 @@ public:
public slots:
void startCommit();
+ void updateBranches(const QString &repository);
private slots:
void diffCurrentFile();
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index bb8f444c9e..3dba3eb3a7 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -76,8 +76,6 @@ bool LogChangeWidget::init(const QString &repository, const QString &commit, boo
GitPlugin::instance()->gitClient()->msgNoCommits(includeRemote));
return false;
}
- selectionModel()->select(m_model->index(0, 0),
- QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
return true;
}
@@ -117,6 +115,8 @@ void LogChangeWidget::emitDoubleClicked(const QModelIndex &index)
bool LogChangeWidget::populateLog(const QString &repository, const QString &commit, bool includeRemote)
{
+ const QString currentCommit = this->commit();
+ int selected = currentCommit.isEmpty() ? 0 : -1;
if (const int rowCount = m_model->rowCount())
m_model->removeRows(0, rowCount);
@@ -144,12 +144,15 @@ bool LogChangeWidget::populateLog(const QString &repository, const QString &comm
}
row.push_back(item);
}
- row[Sha1Column]->setText(line.left(colonPos));
+ const QString sha1 = line.left(colonPos);
+ row[Sha1Column]->setText(sha1);
row[SubjectColumn]->setText(line.right(line.size() - colonPos - 1));
m_model->appendRow(row);
+ if (selected == -1 && currentCommit == sha1)
+ selected = m_model->rowCount() - 1;
}
}
- setCurrentIndex(m_model->index(0, 0));
+ setCurrentIndex(m_model->index(selected, 0));
return true;
}
@@ -174,8 +177,8 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
if (isReset) {
popUpLayout->addWidget(new QLabel(tr("Reset type:"), this));
m_resetTypeComboBox = new QComboBox(this);
- m_resetTypeComboBox->addItem(tr("Mixed"), QLatin1String("--mixed"));
m_resetTypeComboBox->addItem(tr("Hard"), QLatin1String("--hard"));
+ m_resetTypeComboBox->addItem(tr("Mixed"), QLatin1String("--mixed"));
m_resetTypeComboBox->addItem(tr("Soft"), QLatin1String("--soft"));
popUpLayout->addWidget(m_resetTypeComboBox);
popUpLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored));