From d7c5e2ed2471bd81cb1a477dc8d033117f753af4 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 17 Aug 2009 09:49:56 +0200 Subject: [PATCH] Version Control: Release the commit message temporary file. ... and add some logging to p4. --- src/plugins/cvs/cvsplugin.cpp | 2 +- src/plugins/git/gitplugin.cpp | 4 +-- src/plugins/perforce/perforceplugin.cpp | 40 ++++++++++++++------- src/plugins/subversion/subversionplugin.cpp | 2 +- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 1b2d045f799..6452a697cb9 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -687,7 +687,7 @@ void CVSPlugin::startCommit(const QString &source) // Create a submit m_changeTmpFile->write(submitTemplate.toUtf8()); m_changeTmpFile->flush(); - m_changeTmpFile->seek(0); + m_changeTmpFile->close(); // Create a submit editor and set file list CVSSubmitEditor *editor = openCVSSubmitEditor(m_changeTmpFile->fileName()); editor->setStateList(statusOutput); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 3c3161b4712..304d4a45f31 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -592,10 +592,10 @@ void GitPlugin::startCommit() } m_changeTmpFile = changeTmpFile; m_changeTmpFile->write(commitTemplate.toLocal8Bit()); - m_changeTmpFile->flush(); + m_changeTmpFile->flush(); // Keep the file alive, else it removes self and forgets // its name - m_changeTmpFile->seek(0); + m_changeTmpFile->close(); openSubmitEditor(m_changeTmpFile->fileName(), data); } diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index cd5593ed2b5..e8f7ae31988 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -553,6 +553,7 @@ void PerforcePlugin::submit() } m_changeTmpFile = new QTemporaryFile(this); + m_changeTmpFile->setAutoRemove(true); if (!m_changeTmpFile->open()) { VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot create temporary file.")); cleanChangeTmpFile(); @@ -567,7 +568,7 @@ void PerforcePlugin::submit() } m_changeTmpFile->write(result.stdOut.toAscii()); - m_changeTmpFile->seek(0); + m_changeTmpFile->close(); // Assemble file list of project QString name; @@ -782,6 +783,15 @@ bool PerforcePlugin::vcsDelete(const QString &fileName) return !(result.error && result2.error); } +static QString formatCommand(const QString &cmd, const QStringList &args) +{ + const QChar blank = QLatin1Char(' '); + QString command = cmd; + command += blank; + command += args.join(QString(blank)); + return PerforcePlugin::tr("Executing: %1\n").arg(command); +} + PerforceResponse PerforcePlugin::runP4Cmd(const QStringList &args, const QStringList &extraArgs, unsigned logFlags, @@ -816,13 +826,8 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QStringList &args, } actualArgs << args; - if (logFlags & CommandToWindow) { - QString command = m_settings.p4Command(); - command += blank; - command += actualArgs.join(QString(blank)); - const QString outputText = tr("Executing: %1\n").arg(command); - outputWindow->appendCommand(outputText); - } + if (logFlags & CommandToWindow) + outputWindow->appendCommand(formatCommand(m_settings.p4Command(), actualArgs)); // Run, connect stderr to the output window Core::Utils::SynchronousProcess process; @@ -1025,20 +1030,25 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor) fileIFace->save(); core->fileManager()->unblockFileChange(fileIFace); if (answer == VCSBase::VCSBaseSubmitEditor::SubmitConfirmed) { - m_changeTmpFile->seek(0); + if (!m_changeTmpFile->open()) { + VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot open temporary file.")); + return false; + } QByteArray change = m_changeTmpFile->readAll(); + m_changeTmpFile->close(); QString errorMessage; if (!checkP4Configuration(&errorMessage)) { VCSBase::VCSBaseOutputWindow::instance()->appendError(errorMessage); return false; } - QProcess proc; proc.setEnvironment(environment()); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - proc.start(m_settings.p4Command(), - m_settings.basicP4Args() << QLatin1String("submit") << QLatin1String("-i")); + QStringList submitArgs = m_settings.basicP4Args(); + submitArgs << QLatin1String("submit") << QLatin1String("-i"); + VCSBase::VCSBaseOutputWindow::instance()->appendCommand(formatCommand(m_settings.p4Command(), submitArgs)); + proc.start(m_settings.p4Command(),submitArgs); if (!proc.waitForStarted(p4Timeout)) { VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot execute p4 submit.")); QApplication::restoreOverrideCursor(); @@ -1052,6 +1062,12 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor) QApplication::restoreOverrideCursor(); return false; } + const int exitCode = proc.exitCode(); + if (exitCode) { + VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("p4 submit failed (exit code %1).").arg(exitCode)); + QApplication::restoreOverrideCursor(); + return false; + } const QString output = QString::fromLocal8Bit(proc.readAll()); VCSBase::VCSBaseOutputWindow::instance()->append(output); if (output.contains(QLatin1String("Out of date files must be resolved or reverted)"))) { diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 34b1258e0ad..718831c9d09 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -692,7 +692,7 @@ void SubversionPlugin::startCommit(const QStringList &files) // Create a submit m_changeTmpFile->write(submitTemplate.toUtf8()); m_changeTmpFile->flush(); - m_changeTmpFile->seek(0); + m_changeTmpFile->close(); // Create a submit editor and set file list SubversionSubmitEditor *editor = openSubversionSubmitEditor(m_changeTmpFile->fileName()); editor->setStatusList(statusOutput); -- GitLab