diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-08-19 16:26:47 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-08-19 16:26:47 +0200 |
commit | abaf2e9f210c778e79a77d50e37e9b11196b70fd (patch) | |
tree | 17d7ba99d0bd6122345260406690450cfef57267 | |
parent | 5b7280819277e45a6011d35bf28bf3fdc1ff8669 (diff) | |
download | qt-creator-abaf2e9f210c778e79a77d50e37e9b11196b70fd.tar.gz |
VCS[hg]: Mercurial forgets working directory from commit #2 on.
Do not clear variable containing submit repository. Fix potential
crash (closing diff editor before command termination),
use proper temp file name. Pass --non-interactive to "commit"
to suppress editors being launched (despite -l).
Reviewed-by: Marco Bubke <marco.bubke@nokia.com>
Task-number: QTCREATORBUG-1503
-rw-r--r-- | src/plugins/mercurial/mercurialclient.cpp | 5 | ||||
-rw-r--r-- | src/plugins/mercurial/mercurialjobrunner.cpp | 7 | ||||
-rw-r--r-- | src/plugins/mercurial/mercurialjobrunner.h | 11 | ||||
-rw-r--r-- | src/plugins/mercurial/mercurialplugin.cpp | 8 |
4 files changed, 22 insertions, 9 deletions
diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index 3db6b7a7f8..51c92d6a2b 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -61,6 +61,8 @@ inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property return 0; } +static const char nonInteractiveOptionC[] = "--noninteractive"; + namespace Mercurial { namespace Internal { @@ -533,7 +535,8 @@ void MercurialClient::commit(const QString &repositoryRoot, const QStringList &f // refuse to do "autoadd" on a commit with working directory only, as this will // add all the untracked stuff. QTC_ASSERT(!(autoAddRemove && files.isEmpty()), return) - QStringList args(QLatin1String("commit")); + QStringList args = QStringList(QLatin1String(nonInteractiveOptionC)); + args.append(QLatin1String("commit")); if (!committerInfo.isEmpty()) args << QLatin1String("-u") << committerInfo; args << QLatin1String("-l") << commitMessageFile; diff --git a/src/plugins/mercurial/mercurialjobrunner.cpp b/src/plugins/mercurial/mercurialjobrunner.cpp index 185856a16d..5651868282 100644 --- a/src/plugins/mercurial/mercurialjobrunner.cpp +++ b/src/plugins/mercurial/mercurialjobrunner.cpp @@ -69,6 +69,11 @@ HgTask::HgTask(const QString &repositoryRoot, { } +VCSBase::VCSBaseEditor* HgTask::displayEditor() const +{ + return editor; +} + void HgTask::emitSucceeded() { emit succeeded(m_cookie); @@ -221,7 +226,7 @@ void MercurialJobRunner::task(const QSharedPointer<HgTask> &job) */ if (stdOutput.isEmpty()) stdOutput = stdErr; - emit output(stdOutput); + emit output(stdOutput); // This will clear the diff "Working..." text. taskData->emitSucceeded(); } else { emit error(QString::fromLocal8Bit(stdErr)); diff --git a/src/plugins/mercurial/mercurialjobrunner.h b/src/plugins/mercurial/mercurialjobrunner.h index ef9c7856c8..77f332b919 100644 --- a/src/plugins/mercurial/mercurialjobrunner.h +++ b/src/plugins/mercurial/mercurialjobrunner.h @@ -38,6 +38,7 @@ #include <QtCore/QSharedPointer> #include <QtCore/QVariant> #include <QtCore/QString> +#include <QtCore/QPointer> QT_BEGIN_NAMESPACE class QProcess; @@ -64,10 +65,10 @@ public: VCSBase::VCSBaseEditor *editor, const QVariant &cookie = QVariant()); - bool shouldEmit() { return emitRaw; } - VCSBase::VCSBaseEditor* displayEditor() { return editor; } - QStringList args() { return arguments; } - QString repositoryRoot() { return m_repositoryRoot; } + bool shouldEmit() const { return emitRaw; } + VCSBase::VCSBaseEditor* displayEditor() const; + QStringList args() const { return arguments; } + QString repositoryRoot() const { return m_repositoryRoot; } signals: void succeeded(const QVariant &cookie); // Use a queued connection @@ -81,7 +82,7 @@ private: const QStringList arguments; const bool emitRaw; const QVariant m_cookie; - VCSBase::VCSBaseEditor *editor; + QPointer<VCSBase::VCSBaseEditor> editor; // User might close it. }; /* A job queue running in a separate thread, executing commands diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 958e5ae058..5a39e95071 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -581,7 +581,12 @@ void MercurialPlugin::showCommitWidget(const QList<QPair<QString, QString> > &st deleteCommitLog(); - changeLog = new QTemporaryFile(this); + // Open commit log + QString changeLogPattern = QDir::tempPath(); + if (!changeLogPattern.endsWith(QLatin1Char('/'))) + changeLogPattern += QLatin1Char('/'); + changeLogPattern += QLatin1String("qtcreator-hg-XXXXXX.msg"); + changeLog = new QTemporaryFile(changeLogPattern, this); if (!changeLog->open()) { outputWindow->appendError(tr("Unable to generate a temporary file for the commit editor.")); return; @@ -673,7 +678,6 @@ void MercurialPlugin::deleteCommitLog() if (changeLog) { delete changeLog; changeLog = 0; - m_submitRepository.clear(); } } |