diff options
author | Friedemann Kleint <[email protected]> | 2009-11-11 14:32:54 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2009-11-11 14:32:54 +0100 |
commit | 8335a06ed4e1918c7216d82dc7a97bbea2b774aa (patch) | |
tree | f4d2d35b0ae9fdb06fce8d955bb33f38c0a58925 /src/plugins/git | |
parent | 4d45ad00037a056e52c74dca8a5c00ab2763da5d (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.cpp | 48 | ||||
-rw-r--r-- | src/plugins/git/gitclient.h | 16 | ||||
-rw-r--r-- | src/plugins/git/gitcommand.cpp | 2 | ||||
-rw-r--r-- | src/plugins/git/gitcommand.h | 1 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.cpp | 14 | ||||
-rw-r--r-- | src/plugins/git/gitplugin.h | 3 | ||||
-rw-r--r-- | src/plugins/git/gitversioncontrol.cpp | 5 | ||||
-rw-r--r-- | src/plugins/git/gitversioncontrol.h | 2 |
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); |