forked from qt-creator/qt-creator
VcsBase: Introduce vcsExecWithHandler()
Before, vcsExec() returned already started VcsCommand. Later, callers of vcsExec() were establishing connections to the retured VcsCommand::done() signal. However, when process fails to start (e.g. because of non-existing executable), the done() signal may be emitted synchonously from inside VcsCommand::start(). In this scenario callers of VcsCommand could miss the emission of done() signal and connect to already finished command. Instead, provide a vcsExecWithHandler() function which takes a handler to be called when command finished. In addition it takes the context object, too. Don't return VcsCommand from vcsExec() anymore. Change-Id: I2fb5fbe5d27632ea039c650d37e5d7d1b60cebc0 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -30,6 +30,8 @@ class VcsBaseEditorConfig;
|
||||
class VcsBaseEditorWidget;
|
||||
class VcsCommand;
|
||||
|
||||
using CommandHandler = std::function<void(const CommandResult &)>;
|
||||
|
||||
class VCSBASE_EXPORT VcsBaseClientImpl : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -85,12 +87,18 @@ public:
|
||||
RunFlags flags = RunFlags::None,
|
||||
int timeoutS = -1, QTextCodec *codec = nullptr) const;
|
||||
|
||||
void vcsExecWithHandler(const Utils::FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
const QObject *context,
|
||||
const CommandHandler &handler,
|
||||
RunFlags additionalFlags = RunFlags::None,
|
||||
bool useOutputToWindow = true) const;
|
||||
// Simple helper to execute a single command using createCommand and enqueueJob.
|
||||
VcsCommand *vcsExec(const Utils::FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
VcsBaseEditorWidget *editor = nullptr,
|
||||
bool useOutputToWindow = false,
|
||||
RunFlags additionalFlags = RunFlags::None) const;
|
||||
void vcsExec(const Utils::FilePath &workingDirectory,
|
||||
const QStringList &arguments,
|
||||
VcsBaseEditorWidget *editor = nullptr,
|
||||
bool useOutputToWindow = false,
|
||||
RunFlags additionalFlags = RunFlags::None) const;
|
||||
|
||||
protected:
|
||||
void resetCachedVcsInfo(const Utils::FilePath &workingDir);
|
||||
|
||||
Reference in New Issue
Block a user