ShellCommand: De-virtualize runCommand()

Add virtual postRunCommand() method, called
by the end of runCommand().

In this way the rest of the API of VcsCommand remains
an implementation detail.

Change-Id: Ia4149334bd39a1448266d2406e0987bee07a9c58
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Jarek Kobus
2022-07-12 13:34:26 +02:00
parent 3de1fffbeb
commit e3da02248a
4 changed files with 14 additions and 20 deletions

View File

@@ -219,6 +219,11 @@ void ShellCommand::addTask(QFuture<void> &future)
Q_UNUSED(future)
}
void ShellCommand::postRunCommand(const FilePath &workingDirectory)
{
Q_UNUSED(workingDirectory)
}
int ShellCommand::timeoutS() const
{
return std::accumulate(d->m_jobs.cbegin(), d->m_jobs.cend(), 0,
@@ -318,6 +323,7 @@ void ShellCommand::runCommand(QtcProcess &proc,
emit appendError(proc.exitMessage());
}
}
postRunCommand(dir);
}
void ShellCommand::runFullySynchronous(QtcProcess &process, const FilePath &workingDirectory)

View File

@@ -126,9 +126,8 @@ public:
// This is called once per job in a thread.
// When called from the UI thread it will execute fully synchronously, so no signals will
// be triggered!
virtual void runCommand(QtcProcess &process,
const CommandLine &command,
const FilePath &workingDirectory = {});
void runCommand(QtcProcess &process, const CommandLine &command,
const FilePath &workingDirectory = {});
void cancel();
@@ -149,12 +148,13 @@ signals:
protected:
virtual Environment environment() const;
virtual void addTask(QFuture<void> &future);
void setDisableUnixTerminal();
int timeoutS() const;
FilePath workDirectory(const FilePath &wd) const;
private:
virtual void addTask(QFuture<void> &future);
virtual void postRunCommand(const Utils::FilePath &workDirectory);
void run(QFutureInterface<void> &future);
// Run without a event loop in fully blocking mode. No signals will be delivered.

View File

@@ -82,14 +82,6 @@ Environment VcsCommand::environment() const
return env;
}
void VcsCommand::runCommand(QtcProcess &proc,
const CommandLine &command,
const FilePath &workingDirectory)
{
ShellCommand::runCommand(proc, command, workingDirectory);
emitRepositoryChanged(workingDirectory);
}
void VcsCommand::addTask(QFuture<void> &future)
{
const QString name = displayName();
@@ -114,13 +106,13 @@ void VcsCommand::addTask(QFuture<void> &future)
Internal::VcsPlugin::addFuture(future);
}
void VcsCommand::emitRepositoryChanged(const FilePath &workingDirectory)
void VcsCommand::postRunCommand(const FilePath &workingDirectory)
{
if (m_preventRepositoryChanged || !(flags() & VcsCommand::ExpectRepoChanges))
return;
// TODO tell the document manager that the directory now received all expected changes
// Core::DocumentManager::unexpectDirectoryChange(d->m_workingDirectory);
VcsManager::emitRepositoryChanged(workDirectory(workingDirectory));
VcsManager::emitRepositoryChanged(workingDirectory);
}
} // namespace VcsBase

View File

@@ -48,16 +48,12 @@ public:
VcsCommand(const Utils::FilePath &defaultWorkingDirectory, const Utils::Environment &environment);
void runCommand(Utils::QtcProcess &process,
const Utils::CommandLine &command,
const Utils::FilePath &workDirectory = {}) override;
protected:
Utils::Environment environment() const override;
void addTask(QFuture<void> &future) override;
private:
void emitRepositoryChanged(const Utils::FilePath &workingDirectory);
void addTask(QFuture<void> &future) override;
void postRunCommand(const Utils::FilePath &workDirectory) override;
QPointer<Core::FutureProgress> m_progress;
bool m_preventRepositoryChanged;