aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/git
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2009-11-11 14:32:54 +0100
committerFriedemann Kleint <[email protected]>2009-11-11 14:32:54 +0100
commit8335a06ed4e1918c7216d82dc7a97bbea2b774aa (patch)
treef4d2d35b0ae9fdb06fce8d955bb33f38c0a58925 /src/plugins/git
parent4d45ad00037a056e52c74dca8a5c00ab2763da5d (diff)
Code model: Update on changes from the versioning system.
Add changed signals to IVersionControl and VCSManager and wire them to the update methods. Add a menu action for manually updating. Improved version of reverted 7aa24116935249a840e1350a6f8de73bc794fb09. Reviewed-by: Roberto Raggi <[email protected]>
Diffstat (limited to 'src/plugins/git')
-rw-r--r--src/plugins/git/gitclient.cpp48
-rw-r--r--src/plugins/git/gitclient.h16
-rw-r--r--src/plugins/git/gitcommand.cpp2
-rw-r--r--src/plugins/git/gitcommand.h1
-rw-r--r--src/plugins/git/gitplugin.cpp14
-rw-r--r--src/plugins/git/gitplugin.h3
-rw-r--r--src/plugins/git/gitversioncontrol.cpp5
-rw-r--r--src/plugins/git/gitversioncontrol.h2
8 files changed, 69 insertions, 22 deletions
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 419784887f0..486196174af 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -34,6 +34,7 @@
#include "gitconstants.h"
#include "gitplugin.h"
#include "gitsubmiteditor.h"
+#include "gitversioncontrol.h"
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/coreconstants.h>
@@ -43,6 +44,9 @@
#include <coreplugin/progressmanager/progressmanager.h>
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/filemanager.h>
+#include <coreplugin/filemanager.h>
+#include <coreplugin/iversioncontrol.h>
+
#include <texteditor/itexteditor.h>
#include <utils/qtcassert.h>
#include <vcsbase/vcsbaseeditor.h>
@@ -55,6 +59,7 @@
#include <QtCore/QTime>
#include <QtCore/QFileInfo>
#include <QtCore/QDir>
+#include <QtCore/QSignalMapper>
#include <QtGui/QMainWindow> // for msg box parent
#include <QtGui/QMessageBox>
@@ -102,7 +107,8 @@ static QString formatCommand(const QString &binary, const QStringList &args)
GitClient::GitClient(GitPlugin* plugin)
: m_msgWait(tr("Waiting for data...")),
m_plugin(plugin),
- m_core(Core::ICore::instance())
+ m_core(Core::ICore::instance()),
+ m_repositoryChangedSignalMapper(0)
{
if (QSettings *s = m_core->settings()) {
m_settings.fromSettings(s);
@@ -317,7 +323,8 @@ void GitClient::checkoutBranch(const QString &workingDirectory, const QString &b
{
QStringList arguments(QLatin1String("checkout"));
arguments << branch;
- executeGit(workingDirectory, arguments, 0, true);
+ GitCommand *cmd = executeGit(workingDirectory, arguments, 0, true);
+ connectRepositoryChanged(workingDirectory, cmd);
}
void GitClient::checkout(const QString &workingDirectory, const QString &fileName)
@@ -341,7 +348,8 @@ void GitClient::hardReset(const QString &workingDirectory, const QString &commit
if (!commit.isEmpty())
arguments << commit;
- executeGit(workingDirectory, arguments, 0, true);
+ GitCommand *cmd = executeGit(workingDirectory, arguments, 0, true);
+ connectRepositoryChanged(workingDirectory, cmd);
}
void GitClient::addFile(const QString &workingDirectory, const QString &fileName)
@@ -500,18 +508,19 @@ GitCommand *GitClient::createCommand(const QString &workingDirectory,
}
// Execute a single command
-void GitClient::executeGit(const QString &workingDirectory,
- const QStringList &arguments,
- VCSBase::VCSBaseEditor* editor,
- bool outputToWindow,
- GitCommand::TerminationReportMode tm,
- int editorLineNumber)
+GitCommand *GitClient::executeGit(const QString &workingDirectory,
+ const QStringList &arguments,
+ VCSBase::VCSBaseEditor* editor,
+ bool outputToWindow,
+ GitCommand::TerminationReportMode tm,
+ int editorLineNumber)
{
VCSBase::VCSBaseOutputWindow::instance()->appendCommand(formatCommand(QLatin1String(Constants::GIT_BINARY), arguments));
GitCommand *command = createCommand(workingDirectory, editor, outputToWindow, editorLineNumber);
command->addJob(arguments, m_settings.timeout);
command->setTerminationReportMode(tm);
command->execute();
+ return command;
}
// Return fixed arguments required to run
@@ -903,6 +912,8 @@ void GitClient::revert(const QStringList &files)
QString errorMessage;
switch (revertI(files, &isDirectory, &errorMessage)) {
case RevertOk:
+ m_plugin->versionControl()->emitFilesChanged(files);
+ break;
case RevertCanceled:
break;
case RevertUnchanged: {
@@ -918,7 +929,8 @@ void GitClient::revert(const QStringList &files)
void GitClient::pull(const QString &workingDirectory)
{
- executeGit(workingDirectory, QStringList(QLatin1String("pull")), 0, true, GitCommand::ReportStderr);
+ GitCommand *cmd = executeGit(workingDirectory, QStringList(QLatin1String("pull")), 0, true, GitCommand::ReportStderr);
+ connectRepositoryChanged(workingDirectory, cmd);
}
void GitClient::push(const QString &workingDirectory)
@@ -952,7 +964,8 @@ void GitClient::stashPop(const QString &workingDirectory)
{
QStringList arguments(QLatin1String("stash"));
arguments << QLatin1String("pop");
- executeGit(workingDirectory, arguments, 0, true);
+ GitCommand *cmd = executeGit(workingDirectory, arguments, 0, true);
+ connectRepositoryChanged(workingDirectory, cmd);
}
void GitClient::branchList(const QString &workingDirectory)
@@ -1000,3 +1013,16 @@ void GitClient::setSettings(const GitSettings &s)
m_binaryPath = m_settings.gitBinaryPath();
}
}
+
+void GitClient::connectRepositoryChanged(const QString & repository, GitCommand *cmd)
+{
+ // Bind command success termination with repository to changed signal
+ if (!m_repositoryChangedSignalMapper) {
+ m_repositoryChangedSignalMapper = new QSignalMapper(this);
+ connect(m_repositoryChangedSignalMapper, SIGNAL(mapped(QString)),
+ m_plugin->versionControl(), SIGNAL(repositoryChanged(QString)));
+ }
+ m_repositoryChangedSignalMapper->setMapping(cmd, repository);
+ connect(cmd, SIGNAL(success()), m_repositoryChangedSignalMapper, SLOT(map()),
+ Qt::QueuedConnection);
+}
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 341e177f353..76da3120347 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -33,7 +33,6 @@
#include "gitsettings.h"
#include "gitcommand.h"
-#include <coreplugin/iversioncontrol.h>
#include <coreplugin/editormanager/ieditor.h>
#include <QtCore/QString>
@@ -41,6 +40,7 @@
QT_BEGIN_NAMESPACE
class QErrorMessage;
+class QSignalMapper;
QT_END_NAMESPACE
namespace Core {
@@ -158,12 +158,12 @@ private:
bool outputToWindow = false,
int editorLineNumber = -1);
- void executeGit(const QString &workingDirectory,
- const QStringList &arguments,
- VCSBase::VCSBaseEditor* editor = 0,
- bool outputToWindow = false,
- GitCommand::TerminationReportMode tm = GitCommand::NoReport,
- int editorLineNumber = -1);
+ GitCommand *executeGit(const QString &workingDirectory,
+ const QStringList &arguments,
+ VCSBase::VCSBaseEditor* editor = 0,
+ bool outputToWindow = false,
+ GitCommand::TerminationReportMode tm = GitCommand::NoReport,
+ int editorLineNumber = -1);
bool synchronousGit(const QString &workingDirectory,
const QStringList &arguments,
@@ -173,12 +173,14 @@ private:
enum RevertResult { RevertOk, RevertUnchanged, RevertCanceled, RevertFailed };
RevertResult revertI(QStringList files, bool *isDirectory, QString *errorMessage);
+ void connectRepositoryChanged(const QString & repository, GitCommand *cmd);
const QString m_msgWait;
GitPlugin *m_plugin;
Core::ICore *m_core;
GitSettings m_settings;
QString m_binaryPath;
+ QSignalMapper *m_repositoryChangedSignalMapper;
};
diff --git a/src/plugins/git/gitcommand.cpp b/src/plugins/git/gitcommand.cpp
index 3f7a97095e6..ea6c17dab13 100644
--- a/src/plugins/git/gitcommand.cpp
+++ b/src/plugins/git/gitcommand.cpp
@@ -177,6 +177,8 @@ void GitCommand::run()
emit errorText(error);
emit finished(ok, m_cookie);
+ if (ok)
+ emit success();
// As it is used asynchronously, we need to delete ourselves
this->deleteLater();
}
diff --git a/src/plugins/git/gitcommand.h b/src/plugins/git/gitcommand.h
index 7acf167750f..8f1c5aad0ec 100644
--- a/src/plugins/git/gitcommand.h
+++ b/src/plugins/git/gitcommand.h
@@ -73,6 +73,7 @@ Q_SIGNALS:
void outputData(const QByteArray&);
void errorText(const QString&);
void finished(bool ok, const QVariant &cookie);
+ void success();
private:
struct Job {
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 0af7286ac91..6e442bec7f2 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -142,6 +142,7 @@ GitPlugin::GitPlugin() :
m_stashListAction(0),
m_branchListAction(0),
m_gitClient(0),
+ m_versionControl(0),
m_changeSelectionDialog(0),
m_submitActionTriggered(false)
{
@@ -215,8 +216,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
addAutoReleasedObject(new GitSubmitEditorFactory(&submitParameters));
- GitVersionControl *versionControl = new GitVersionControl(m_gitClient);
- addAutoReleasedObject(versionControl);
+ m_versionControl = new GitVersionControl(m_gitClient);
+ addAutoReleasedObject(m_versionControl);
addAutoReleasedObject(new CloneWizard);
addAutoReleasedObject(new Gitorious::Internal::GitoriousCloneWizard);
@@ -232,8 +233,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
gitContainer->menu()->setTitle(tr("&Git"));
toolsContainer->addMenu(gitContainer);
if (QAction *ma = gitContainer->menu()->menuAction()) {
- ma->setEnabled(versionControl->isEnabled());
- connect(versionControl, SIGNAL(enabledChanged(bool)), ma, SLOT(setVisible(bool)));
+ ma->setEnabled(m_versionControl->isEnabled());
+ connect(m_versionControl, SIGNAL(enabledChanged(bool)), ma, SLOT(setVisible(bool)));
}
Core::Command *command;
@@ -398,6 +399,11 @@ void GitPlugin::extensionsInitialized()
{
}
+GitVersionControl *GitPlugin::versionControl() const
+{
+ return m_versionControl;
+}
+
void GitPlugin::submitEditorDiff(const QStringList &unstaged, const QStringList &staged)
{
m_gitClient->diff(m_submitRepository, QStringList(), unstaged, staged);
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 4f934a89393..0d6ad7fbdd5 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -59,6 +59,7 @@ namespace Git {
namespace Internal {
class GitPlugin;
+class GitVersionControl;
class GitClient;
class ChangeSelectionDialog;
class GitSubmitEditor;
@@ -96,6 +97,7 @@ public:
void setSettings(const GitSettings &s);
GitClient *gitClient() const;
+ GitVersionControl *versionControl() const;
public slots:
void updateActions();
@@ -159,6 +161,7 @@ private:
QAction *m_branchListAction;
GitClient *m_gitClient;
+ GitVersionControl *m_versionControl;
ChangeSelectionDialog *m_changeSelectionDialog;
QString m_submitRepository;
QStringList m_submitOrigCommitFiles;
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index 559d296220e..c64a683bea0 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -96,5 +96,10 @@ QString GitVersionControl::findTopLevelForDirectory(const QString &directory) co
return GitClient::findRepositoryForDirectory(directory);
}
+void GitVersionControl::emitFilesChanged(const QStringList &l)
+{
+ emit filesChanged(l);
+}
+
} // Internal
} // Git
diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h
index 72908b0da22..44598000638 100644
--- a/src/plugins/git/gitversioncontrol.h
+++ b/src/plugins/git/gitversioncontrol.h
@@ -57,6 +57,8 @@ public:
virtual bool vcsAdd(const QString &fileName);
virtual bool vcsDelete(const QString &filename);
+ void emitFilesChanged(const QStringList &);
+
signals:
void enabledChanged(bool);