From 5ec1c36c232b1783b5b3dd7684e05ef8378bcb90 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 4 Dec 2009 12:58:01 +0100 Subject: Mercurial: Emit version control changed() signals correctly. Add a QVariant cookie to HgTask to be emitted on successful execution, wired to IVersionControl. --- src/plugins/mercurial/mercurialclient.cpp | 35 +++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'src/plugins/mercurial/mercurialclient.cpp') diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index aa54e07925..596a289525 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -48,9 +48,9 @@ #include #include #include +#include -using namespace Mercurial::Internal; -using namespace Mercurial; +Q_DECLARE_METATYPE(QVariant) inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property, const QString &entry) { @@ -60,10 +60,14 @@ inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property return 0; } +namespace Mercurial { +namespace Internal { + MercurialClient::MercurialClient() : jobManager(0), core(Core::ICore::instance()) { + qRegisterMetaType(); } MercurialClient::~MercurialClient() @@ -227,17 +231,18 @@ void MercurialClient::log(const QFileInfo &fileOrDir) void MercurialClient::revert(const QFileInfo &fileOrDir, const QString &revision) { - QStringList args(QLatin1String("revert")); + const QString filePath = fileOrDir.absoluteFilePath(); + const QString workingDir = fileOrDir.isDir() ? filePath : fileOrDir.absolutePath(); + QStringList args(QLatin1String("revert")); if (!revision.isEmpty()) args << QLatin1String("-r") << revision; - if (!fileOrDir.isDir()) - args.append(fileOrDir.absoluteFilePath()); - else - args.append(QLatin1String("--all")); + args.append(fileOrDir.isDir() ? QString(QLatin1String("--all")) : filePath); - QSharedPointer job(new HgTask(fileOrDir.isDir() ? fileOrDir.absoluteFilePath() : - fileOrDir.absolutePath(), args, false)); + // Indicate repository change or file list + const QVariant cookie = fileOrDir.isDir() ? QVariant(filePath) : QVariant(QStringList(filePath)); + QSharedPointer job(new HgTask(workingDir, args, false, cookie)); + connect(job.data(), SIGNAL(succeeded(QVariant)), this, SIGNAL(changed(QVariant)), Qt::QueuedConnection); enqueueJob(job); } @@ -310,7 +315,10 @@ void MercurialClient::pull(const QFileInfo &repositoryRoot, const QString &repos if (!repository.isEmpty()) args.append(repository); - QSharedPointer job(new HgTask(repositoryRoot.absoluteFilePath(), args, false)); + const QString path = repositoryRoot.absoluteFilePath(); + + QSharedPointer job(new HgTask(path, args, false, QVariant(path))); + connect(job.data(), SIGNAL(succeeded(QVariant)), this, SIGNAL(changed(QVariant)), Qt::QueuedConnection); enqueueJob(job); } @@ -382,7 +390,9 @@ void MercurialClient::update(const QFileInfo &repositoryRoot, const QString &rev if (!revision.isEmpty()) args << revision; - QSharedPointer job(new HgTask(repositoryRoot.absoluteFilePath(), args, false)); + const QString path = repositoryRoot.absoluteFilePath(); + QSharedPointer job(new HgTask(path, args, false, QVariant(path))); + connect(job.data(), SIGNAL(succeeded(QVariant)), this, SIGNAL(changed(QVariant)), Qt::QueuedConnection); enqueueJob(job); } @@ -451,3 +461,6 @@ void MercurialClient::enqueueJob(const QSharedPointer &job) } jobManager->enqueueJob(job); } + +} // namespace Internal +} // namespace Mercurial -- cgit v1.2.1