add/unify i/o error handling

lots of use of Utils::FileSaver and Utils::FileReader

Task-number: QTCREATORBUG-1619
This commit is contained in:
Oswald Buddenhagen
2011-03-30 15:15:15 +02:00
parent fae7dc9584
commit 45c9cf7a12
70 changed files with 632 additions and 710 deletions

View File

@@ -55,6 +55,7 @@
#include <utils/qtcassert.h>
#include <utils/synchronousprocess.h>
#include <utils/parameteraction.h>
#include <utils/fileutils.h>
#include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/basevcssubmiteditorfactory.h>
#include <vcsbase/vcsbaseeditor.h>
@@ -66,7 +67,6 @@
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
#include <QtCore/QSettings>
#include <QtCore/QTemporaryFile>
#include <QtCore/QTextCodec>
#include <QtGui/QAction>
@@ -625,13 +625,6 @@ void PerforcePlugin::startSubmitProject()
const VCSBase::VCSBasePluginState state = currentState();
QTC_ASSERT(state.hasProject(), return)
QTemporaryFile changeTmpFile;
changeTmpFile.setAutoRemove(false);
if (!changeTmpFile.open()) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot create temporary file."));
cleanCommitMessageFile();
return;
}
// Revert all unchanged files.
if (!revertProject(state.currentProjectTopLevel(), perforceRelativeProjectDirectory(state), true))
return;
@@ -646,9 +639,15 @@ void PerforcePlugin::startSubmitProject()
return;
}
m_commitMessageFileName = changeTmpFile.fileName();
changeTmpFile.write(result.stdOut.toAscii());
changeTmpFile.close();
Utils::TempFileSaver saver;
saver.setAutoRemove(false);
saver.write(result.stdOut.toAscii());
if (!saver.finalize()) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(saver.errorString());
cleanCommitMessageFile();
return;
}
m_commitMessageFileName = saver.fileName();
args.clear();
args << QLatin1String("fstat");
@@ -949,11 +948,12 @@ bool PerforcePlugin::vcsMove(const QString &workingDir, const QString &from, con
}
// Write extra args to temporary file
QSharedPointer<QTemporaryFile>
PerforcePlugin::createTemporaryArgumentFile(const QStringList &extraArgs) const
QSharedPointer<Utils::TempFileSaver>
PerforcePlugin::createTemporaryArgumentFile(const QStringList &extraArgs,
QString *errorString) const
{
if (extraArgs.isEmpty())
return QSharedPointer<QTemporaryFile>();
return QSharedPointer<Utils::TempFileSaver>();
// create pattern
if (m_tempFilePattern.isEmpty()) {
m_tempFilePattern = QDir::tempPath();
@@ -961,20 +961,16 @@ QSharedPointer<QTemporaryFile>
m_tempFilePattern += QDir::separator();
m_tempFilePattern += QLatin1String("qtc_p4_XXXXXX.args");
}
QSharedPointer<QTemporaryFile> rc(new QTemporaryFile(m_tempFilePattern));
QSharedPointer<Utils::TempFileSaver> rc(new Utils::TempFileSaver(m_tempFilePattern));
rc->setAutoRemove(true);
if (!rc->open()) {
qWarning("Could not create temporary file: %s. Appending all file names to command line.",
qPrintable(rc->errorString()));
return QSharedPointer<QTemporaryFile>();
}
const int last = extraArgs.size() - 1;
for (int i = 0; i <= last; i++) {
rc->write(extraArgs.at(i).toLocal8Bit());
if (i != last)
rc->write("\n");
rc->write("\n", 1);
}
rc->close();
if (!rc->finalize(errorString))
return QSharedPointer<Utils::TempFileSaver>();
return rc;
}
@@ -1153,9 +1149,16 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QString &workingDir,
return invalidConfigResponse;
}
QStringList actualArgs = m_settings.commonP4Arguments(workingDir);
QSharedPointer<QTemporaryFile> tempFile = createTemporaryArgumentFile(extraArgs);
if (!tempFile.isNull())
QString errorMessage;
QSharedPointer<Utils::TempFileSaver> tempFile = createTemporaryArgumentFile(extraArgs, &errorMessage);
if (!tempFile.isNull()) {
actualArgs << QLatin1String("-x") << tempFile->fileName();
} else if (!errorMessage.isEmpty()) {
PerforceResponse tempFailResponse;
tempFailResponse.error = true;
tempFailResponse.message = errorMessage;
return tempFailResponse;
}
actualArgs.append(args);
if (flags & CommandToWindow)
@@ -1372,19 +1375,17 @@ bool PerforcePlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *subm
return true;
}
// Pipe file into p4 submit -i
QFile commitMessageFile(m_commitMessageFileName);
if (!commitMessageFile.open(QIODevice::ReadOnly|QIODevice::Text)) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("Cannot open temporary file."));
Utils::FileReader reader;
if (!reader.fetch(m_commitMessageFileName, QIODevice::Text)) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(reader.errorString());
return false;
}
const QByteArray changeDescription = commitMessageFile.readAll();
commitMessageFile.close();
QStringList submitArgs;
submitArgs << QLatin1String("submit") << QLatin1String("-i");
const PerforceResponse submitResponse = runP4Cmd(m_settings.topLevelSymLinkTarget(), submitArgs,
LongTimeOut|RunFullySynchronous|CommandToWindow|StdErrToWindow|ErrorToWindow|ShowBusyCursor,
QStringList(), changeDescription);
QStringList(), reader.data());
if (submitResponse.error) {
VCSBase::VCSBaseOutputWindow::instance()->appendError(tr("p4 submit failed: %1").arg(submitResponse.message));
return false;