forked from qt-creator/qt-creator
Perforce: Merge fullySynchronousProcess() with synchronousProcess()
Change-Id: I3b37fca5f66da521540a5dcd4e4a19ff592fa7ef Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -289,12 +289,6 @@ public:
|
|||||||
const QByteArray &stdInput,
|
const QByteArray &stdInput,
|
||||||
QTextCodec *outputCodec) const;
|
QTextCodec *outputCodec) const;
|
||||||
|
|
||||||
PerforceResponse fullySynchronousProcess(const FilePath &workingDir,
|
|
||||||
const QStringList &args,
|
|
||||||
unsigned flags,
|
|
||||||
const QByteArray &stdInput,
|
|
||||||
QTextCodec *outputCodec) const;
|
|
||||||
|
|
||||||
QString clientFilePath(const QString &serverFilePath);
|
QString clientFilePath(const QString &serverFilePath);
|
||||||
void annotate(const FilePath &workingDir, const QString &fileName,
|
void annotate(const FilePath &workingDir, const QString &fileName,
|
||||||
const QString &changeList = QString(), int lineNumber = -1);
|
const QString &changeList = QString(), int lineNumber = -1);
|
||||||
@@ -1183,24 +1177,6 @@ QString PerforcePluginPrivate::vcsMakeWritableText() const
|
|||||||
return Tr::tr("&Hijack");
|
return Tr::tr("&Hijack");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run messages
|
|
||||||
|
|
||||||
static QString msgNotStarted(const FilePath &cmd)
|
|
||||||
{
|
|
||||||
return Tr::tr("Could not start perforce \"%1\". Please check your settings in the preferences.")
|
|
||||||
.arg(cmd.toUserOutput());
|
|
||||||
}
|
|
||||||
|
|
||||||
static QString msgTimeout(int timeOutS)
|
|
||||||
{
|
|
||||||
return Tr::tr("Perforce did not respond within timeout limit (%1 s).").arg(timeOutS);
|
|
||||||
}
|
|
||||||
|
|
||||||
static QString msgCrash()
|
|
||||||
{
|
|
||||||
return Tr::tr("The process terminated abnormally.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run using a SynchronousProcess, emitting signals to the message window
|
// Run using a SynchronousProcess, emitting signals to the message window
|
||||||
PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &workingDir,
|
PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &workingDir,
|
||||||
const QStringList &args,
|
const QStringList &args,
|
||||||
@@ -1208,10 +1184,9 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki
|
|||||||
const QByteArray &stdInput,
|
const QByteArray &stdInput,
|
||||||
QTextCodec *outputCodec) const
|
QTextCodec *outputCodec) const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(stdInput.isEmpty(), return PerforceResponse()); // Not supported here
|
|
||||||
|
|
||||||
// Run, connect stderr to the output window
|
// Run, connect stderr to the output window
|
||||||
Process process;
|
Process process;
|
||||||
|
process.setWriteData(stdInput);
|
||||||
const int timeOutS = (flags & LongTimeOut) ? settings().longTimeOutS() : settings().timeOutS();
|
const int timeOutS = (flags & LongTimeOut) ? settings().longTimeOutS() : settings().timeOutS();
|
||||||
process.setTimeoutS(timeOutS);
|
process.setTimeoutS(timeOutS);
|
||||||
if (outputCodec)
|
if (outputCodec)
|
||||||
@@ -1234,7 +1209,7 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki
|
|||||||
}
|
}
|
||||||
process.setTimeOutMessageBoxEnabled(true);
|
process.setTimeOutMessageBoxEnabled(true);
|
||||||
process.setCommand({settings().p4BinaryPath(), args});
|
process.setCommand({settings().p4BinaryPath(), args});
|
||||||
process.runBlocking(EventLoopMode::On);
|
process.runBlocking(flags & RunFullySynchronous ? EventLoopMode::Off : EventLoopMode::On);
|
||||||
|
|
||||||
const auto result = process.result();
|
const auto result = process.result();
|
||||||
PerforceResponse response;
|
PerforceResponse response;
|
||||||
@@ -1248,62 +1223,6 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run using a QProcess, for short queries
|
|
||||||
PerforceResponse PerforcePluginPrivate::fullySynchronousProcess(const FilePath &workingDir,
|
|
||||||
const QStringList &args,
|
|
||||||
unsigned flags,
|
|
||||||
const QByteArray &stdInput,
|
|
||||||
QTextCodec *outputCodec) const
|
|
||||||
{
|
|
||||||
Process process;
|
|
||||||
|
|
||||||
if (flags & OverrideDiffEnvironment)
|
|
||||||
process.setEnvironment(overrideDiffEnvironmentVariable());
|
|
||||||
if (!workingDir.isEmpty())
|
|
||||||
process.setWorkingDirectory(workingDir);
|
|
||||||
|
|
||||||
PerforceResponse response;
|
|
||||||
process.setCommand({settings().p4BinaryPath(), args});
|
|
||||||
process.setWriteData(stdInput);
|
|
||||||
process.start();
|
|
||||||
|
|
||||||
if (!process.waitForStarted(3000)) {
|
|
||||||
response.error = true;
|
|
||||||
response.message = msgNotStarted(settings().p4BinaryPath());
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray stdOut;
|
|
||||||
QByteArray stdErr;
|
|
||||||
const int timeOutS = (flags & LongTimeOut) ? settings().longTimeOutS() : settings().timeOutS();
|
|
||||||
if (!process.readDataFromProcess(&stdOut, &stdErr, timeOutS)) {
|
|
||||||
process.stop();
|
|
||||||
process.waitForFinished();
|
|
||||||
response.error = true;
|
|
||||||
response.message = msgTimeout(timeOutS);
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
if (process.exitStatus() != QProcess::NormalExit) {
|
|
||||||
response.error = true;
|
|
||||||
response.message = msgCrash();
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
response.exitCode = process.exitCode();
|
|
||||||
response.error = response.exitCode ? !(flags & IgnoreExitCode) : false;
|
|
||||||
response.stdErr = QString::fromLocal8Bit(stdErr);
|
|
||||||
response.stdOut = outputCodec ? outputCodec->toUnicode(stdOut.constData(), stdOut.size()) :
|
|
||||||
QString::fromLocal8Bit(stdOut);
|
|
||||||
const QChar cr = QLatin1Char('\r');
|
|
||||||
response.stdErr.remove(cr);
|
|
||||||
response.stdOut.remove(cr);
|
|
||||||
// Logging
|
|
||||||
if ((flags & StdErrToWindow) && !response.stdErr.isEmpty())
|
|
||||||
VcsOutputWindow::appendError(response.stdErr);
|
|
||||||
if ((flags & StdOutToWindow) && !response.stdOut.isEmpty())
|
|
||||||
VcsOutputWindow::append(response.stdOut, VcsOutputWindow::None, flags & SilentStdOut);
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
|
PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
|
||||||
const QStringList &args,
|
const QStringList &args,
|
||||||
unsigned flags,
|
unsigned flags,
|
||||||
@@ -1337,9 +1256,8 @@ PerforceResponse PerforcePluginPrivate::runP4Cmd(const FilePath &workingDir,
|
|||||||
if (flags & ShowBusyCursor)
|
if (flags & ShowBusyCursor)
|
||||||
QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||||
|
|
||||||
const PerforceResponse response = (flags & RunFullySynchronous) ?
|
const PerforceResponse response
|
||||||
fullySynchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec) :
|
= synchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec);
|
||||||
synchronousProcess(workingDir, actualArgs, flags, stdInput, outputCodec);
|
|
||||||
|
|
||||||
if (flags & ShowBusyCursor)
|
if (flags & ShowBusyCursor)
|
||||||
QGuiApplication::restoreOverrideCursor();
|
QGuiApplication::restoreOverrideCursor();
|
||||||
|
Reference in New Issue
Block a user