VcsCommand: Make runCommand() a static method

And rename it to runBlocking() in order to conform
a bit more to QtcProcess API.

In case of blocking run there is no need to instantiate
VcsCommand on user side. This nicely draw a line between
async usages (i.e. when start() is called and we need
an instance) and blocking ones (i.e. when runBlocking()
is called).

Change-Id: I1ba94ee36c92956d5044236cb9e2dd896bf3cfcf
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Jarek Kobus
2022-10-05 12:38:09 +02:00
parent 688ec935cd
commit 7591b2f56d
4 changed files with 23 additions and 15 deletions

View File

@@ -41,7 +41,6 @@
#include <vcsbase/basevcseditorfactory.h> #include <vcsbase/basevcseditorfactory.h>
#include <vcsbase/basevcssubmiteditorfactory.h> #include <vcsbase/basevcssubmiteditorfactory.h>
#include <vcsbase/vcsbaseclient.h>
#include <vcsbase/vcsbaseeditor.h> #include <vcsbase/vcsbaseeditor.h>
#include <vcsbase/vcsoutputwindow.h> #include <vcsbase/vcsoutputwindow.h>
#include <vcsbase/vcsbasesubmiteditor.h> #include <vcsbase/vcsbasesubmiteditor.h>
@@ -258,7 +257,7 @@ private:
QString runCleartoolSync(const FilePath &workingDir, const QStringList &arguments) const; QString runCleartoolSync(const FilePath &workingDir, const QStringList &arguments) const;
CommandResult runCleartool(const FilePath &workingDir, const QStringList &arguments, CommandResult runCleartool(const FilePath &workingDir, const QStringList &arguments,
int timeOutS, unsigned flags = 0, int timeOutS, unsigned flags = 0,
QTextCodec *outputCodec = nullptr) const; QTextCodec *codec = nullptr) const;
static void sync(QFutureInterface<void> &future, QStringList files); static void sync(QFutureInterface<void> &future, QStringList files);
void history(const FilePath &workingDir, void history(const FilePath &workingDir,
@@ -1655,16 +1654,13 @@ CommandResult ClearCasePluginPrivate::runCleartool(const FilePath &workingDir,
const QStringList &arguments, const QStringList &arguments,
int timeOutS, int timeOutS,
unsigned flags, unsigned flags,
QTextCodec *outputCodec) const QTextCodec *codec) const
{ {
if (m_settings.ccBinaryPath.isEmpty()) if (m_settings.ccBinaryPath.isEmpty())
return CommandResult(ProcessResult::StartFailed, Tr::tr("No ClearCase executable specified.")); return CommandResult(ProcessResult::StartFailed, Tr::tr("No ClearCase executable specified."));
std::unique_ptr<VcsCommand> command; return VcsCommand::runBlocking(workingDir, Environment::systemEnvironment(),
command.reset(VcsBaseClient::createVcsCommand(workingDir, Environment::systemEnvironment())); {m_settings.ccBinaryPath, arguments}, flags, timeOutS, codec);
command->addFlags(flags);
command->setCodec(outputCodec);
return command->runCommand({m_settings.ccBinaryPath, arguments}, timeOutS);
} }
IEditor *ClearCasePluginPrivate::showOutputInEditor(const QString& title, const QString &output, IEditor *ClearCasePluginPrivate::showOutputInEditor(const QString& title, const QString &output,

View File

@@ -137,11 +137,8 @@ CommandResult VcsBaseClientImpl::vcsSynchronousExec(const FilePath &workingDir,
CommandResult VcsBaseClientImpl::vcsSynchronousExec(const FilePath &workingDir, CommandResult VcsBaseClientImpl::vcsSynchronousExec(const FilePath &workingDir,
const CommandLine &cmdLine, unsigned flags, int timeoutS, QTextCodec *codec) const const CommandLine &cmdLine, unsigned flags, int timeoutS, QTextCodec *codec) const
{ {
VcsCommand command(workingDir, processEnvironment()); return VcsCommand::runBlocking(workingDir, processEnvironment(), cmdLine, flags,
command.addFlags(flags); timeoutS > 0 ? timeoutS : vcsTimeoutS(), codec);
if (codec)
command.setCodec(codec);
return command.runCommand(cmdLine, timeoutS > 0 ? timeoutS : vcsTimeoutS());
} }
void VcsBaseClientImpl::resetCachedVcsInfo(const FilePath &workingDir) void VcsBaseClientImpl::resetCachedVcsInfo(const FilePath &workingDir)

View File

@@ -383,7 +383,18 @@ ProcessResult VcsCommand::result() const
return d->m_result; return d->m_result;
} }
CommandResult VcsCommand::runCommand(const CommandLine &command, int timeoutS) CommandResult VcsCommand::runBlocking(const Utils::FilePath &workingDirectory,
const Utils::Environment &environment,
const Utils::CommandLine &command, unsigned flags,
int timeoutS, QTextCodec *codec)
{
VcsCommand vcsCommand(workingDirectory, environment);
vcsCommand.addFlags(flags);
vcsCommand.setCodec(codec);
return vcsCommand.runBlockingHelper(command, timeoutS);
}
CommandResult VcsCommand::runBlockingHelper(const CommandLine &command, int timeoutS)
{ {
QtcProcess process; QtcProcess process;
if (command.executable().isEmpty()) if (command.executable().isEmpty())

View File

@@ -113,7 +113,10 @@ public:
void setProgressParser(ProgressParser *parser); void setProgressParser(ProgressParser *parser);
void setProgressiveOutput(bool progressive); void setProgressiveOutput(bool progressive);
CommandResult runCommand(const Utils::CommandLine &command, int timeoutS = 10); static CommandResult runBlocking(const Utils::FilePath &workingDirectory,
const Utils::Environment &environmentconst,
const Utils::CommandLine &command, unsigned flags,
int timeoutS, QTextCodec *codec);
void cancel(); void cancel();
QString cleanedStdOut() const; QString cleanedStdOut() const;
@@ -134,6 +137,7 @@ signals:
void runCommandFinished(const Utils::FilePath &workingDirectory); void runCommandFinished(const Utils::FilePath &workingDirectory);
private: private:
CommandResult runBlockingHelper(const Utils::CommandLine &command, int timeoutS);
void postRunCommand(const Utils::FilePath &workingDirectory); void postRunCommand(const Utils::FilePath &workingDirectory);
class Internal::VcsCommandPrivate *const d; class Internal::VcsCommandPrivate *const d;