VcsCommand: Move some methods into VcsCommandPrivate

Change-Id: I49302dadcc1ceaa7c73970aff9e41237d554098a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Jarek Kobus
2022-09-01 17:13:31 +02:00
parent c98c4319e9
commit 28fdeefe6f
2 changed files with 37 additions and 38 deletions

View File

@@ -49,7 +49,7 @@ using namespace Utils;
namespace VcsBase { namespace VcsBase {
namespace Internal { namespace Internal {
class VcsCommandPrivate class VcsCommandPrivate : public QObject
{ {
public: public:
struct Job { struct Job {
@@ -59,9 +59,11 @@ public:
ExitCodeInterpreter exitCodeInterpreter = {}; ExitCodeInterpreter exitCodeInterpreter = {};
}; };
VcsCommandPrivate(const FilePath &defaultWorkingDirectory, const Environment &environment) VcsCommandPrivate(VcsCommand *vcsCommand, const FilePath &defaultWorkingDirectory,
: m_defaultWorkingDirectory(defaultWorkingDirectory), const Environment &environment)
m_environment(environment) : q(vcsCommand)
, m_defaultWorkingDirectory(defaultWorkingDirectory)
, m_environment(environment)
{ {
VcsBase::setProcessEnvironment(&m_environment); VcsBase::setProcessEnvironment(&m_environment);
} }
@@ -78,6 +80,11 @@ public:
return m_environment; return m_environment;
} }
QString displayName() const;
int timeoutS() const;
VcsCommand *q = nullptr;
QString m_displayName; QString m_displayName;
const FilePath m_defaultWorkingDirectory; const FilePath m_defaultWorkingDirectory;
Environment m_environment; Environment m_environment;
@@ -93,10 +100,33 @@ public:
bool m_aborted = false; bool m_aborted = false;
}; };
QString VcsCommandPrivate::displayName() const
{
if (!m_displayName.isEmpty())
return m_displayName;
if (m_jobs.isEmpty())
return tr("Unknown");
const Job &job = m_jobs.at(0);
QString result = job.command.executable().baseName();
if (!result.isEmpty())
result[0] = result.at(0).toTitleCase();
else
result = tr("UNKNOWN");
if (!job.command.arguments().isEmpty())
result += ' ' + job.command.splitArguments().at(0);
return result;
}
int VcsCommandPrivate::timeoutS() const
{
return std::accumulate(m_jobs.cbegin(), m_jobs.cend(), 0,
[](int sum, const Job &job) { return sum + job.timeoutS; });
}
} // namespace Internal } // namespace Internal
VcsCommand::VcsCommand(const FilePath &workingDirectory, const Environment &environment) : VcsCommand::VcsCommand(const FilePath &workingDirectory, const Environment &environment) :
d(new Internal::VcsCommandPrivate(workingDirectory, environment)) d(new Internal::VcsCommandPrivate(this, workingDirectory, environment))
{ {
connect(&d->m_watcher, &QFutureWatcher<void>::canceled, this, &VcsCommand::cancel); connect(&d->m_watcher, &QFutureWatcher<void>::canceled, this, &VcsCommand::cancel);
@@ -122,7 +152,7 @@ void VcsCommand::addTask(const QFuture<void> &future)
if ((d->m_flags & VcsCommand::SuppressCommandLogging)) if ((d->m_flags & VcsCommand::SuppressCommandLogging))
return; return;
const QString name = displayName(); const QString name = d->displayName();
const auto id = Id::fromString(name + QLatin1String(".action")); const auto id = Id::fromString(name + QLatin1String(".action"));
d->m_futureProgress = ProgressManager::addTask(future, name, id); d->m_futureProgress = ProgressManager::addTask(future, name, id);
Internal::VcsPlugin::addFuture(future); Internal::VcsPlugin::addFuture(future);
@@ -144,26 +174,6 @@ VcsCommand::~VcsCommand()
delete d; delete d;
} }
QString VcsCommand::displayName() const
{
if (!d->m_displayName.isEmpty())
return d->m_displayName;
if (!d->m_jobs.isEmpty()) {
const Internal::VcsCommandPrivate::Job &job = d->m_jobs.at(0);
QString result = job.command.executable().baseName();
if (!result.isEmpty())
result[0] = result.at(0).toTitleCase();
else
result = tr("UNKNOWN");
if (!job.command.arguments().isEmpty())
result += ' ' + job.command.splitArguments().at(0);
return result;
}
return tr("Unknown");
}
void VcsCommand::setDisplayName(const QString &name) void VcsCommand::setDisplayName(const QString &name)
{ {
d->m_displayName = name; d->m_displayName = name;
@@ -203,14 +213,6 @@ void VcsCommand::cancel()
emit terminate(); emit terminate();
} }
int VcsCommand::timeoutS() const
{
return std::accumulate(d->m_jobs.cbegin(), d->m_jobs.cend(), 0,
[](int sum, const Internal::VcsCommandPrivate::Job &job) {
return sum + job.timeoutS;
});
}
void VcsCommand::run(QFutureInterface<void> &future) void VcsCommand::run(QFutureInterface<void> &future)
{ {
// Check that the binary path is not empty // Check that the binary path is not empty
@@ -228,7 +230,7 @@ void VcsCommand::run(QFutureInterface<void> &future)
d->m_progressParser->setFuture(&future); d->m_progressParser->setFuture(&future);
} else { } else {
QMetaObject::invokeMethod(this, [this, future] { QMetaObject::invokeMethod(this, [this, future] {
(void) new ProgressTimer(future, qMax(2, timeoutS() / 5), d->m_futureProgress); (void) new ProgressTimer(future, qMax(2, d->timeoutS() / 5), d->m_futureProgress);
}); });
} }

View File

@@ -143,9 +143,6 @@ private:
void addTask(const QFuture<void> &future); void addTask(const QFuture<void> &future);
void postRunCommand(const Utils::FilePath &workingDirectory); void postRunCommand(const Utils::FilePath &workingDirectory);
QString displayName() const;
int timeoutS() const;
// Run without a event loop in fully blocking mode. No signals will be delivered. // Run without a event loop in fully blocking mode. No signals will be delivered.
void runFullySynchronous(Utils::QtcProcess &proc); void runFullySynchronous(Utils::QtcProcess &proc);
// Run with an event loop. Signals will be delivered. // Run with an event loop. Signals will be delivered.