VCS: Show message box on timeouts/Add SSH prompt.

- Use message boxes on timeouts.
- Add a configuration for a graphical SSH password prompt binary with
defaults
- Launch commands that require authentification with no terminal on UNIX
and environment variable SSH_ASKPASS set accordingly.
- First attempt at introduce a common function to synchronously run VCS
commands in base plugin with flags.
- Use standard execution log entries in all VCS plugins (outputwindow).
This commit is contained in:
Friedemann Kleint
2010-05-21 17:46:00 +02:00
parent 91c4b0305c
commit 5364f5c152
26 changed files with 535 additions and 313 deletions

View File

@@ -70,13 +70,14 @@ GitCommand::Job::Job(const QStringList &a, int t) :
GitCommand::GitCommand(const QStringList &binary,
const QString &workingDirectory,
const QStringList &environment,
const QProcessEnvironment&environment,
const QVariant &cookie) :
m_binaryPath(binary.front()),
m_basicArguments(binary),
m_workingDirectory(workingDirectory),
m_environment(environment),
m_cookie(cookie),
m_unixTerminalDisabled(false),
m_reportTerminationMode(NoReport)
{
m_basicArguments.pop_front();
@@ -92,6 +93,16 @@ void GitCommand::setTerminationReportMode(TerminationReportMode m)
m_reportTerminationMode = m;
}
bool GitCommand::unixTerminalDisabled() const
{
return m_unixTerminalDisabled;
}
void GitCommand::setUnixTerminalDisabled(bool e)
{
m_unixTerminalDisabled = e;
}
void GitCommand::addJob(const QStringList &arguments, int timeout)
{
m_jobs.push_back(Job(arguments, timeout));
@@ -121,12 +132,18 @@ QString GitCommand::msgTimeout(int seconds)
void GitCommand::run()
{
if (Git::Constants::debug)
qDebug() << "GitCommand::run" << m_workingDirectory << m_jobs.size();
QProcess process;
if (!m_workingDirectory.isEmpty())
process.setWorkingDirectory(m_workingDirectory);
qDebug() << "GitCommand::run" << m_workingDirectory << m_jobs.size()
<< "terminal_disabled" << m_unixTerminalDisabled;
process.setEnvironment(m_environment);
const unsigned processFlags = m_unixTerminalDisabled ?
unsigned(Utils::SynchronousProcess::UnixTerminalDisabled) :
unsigned(0);
const QSharedPointer<QProcess> process =
Utils::SynchronousProcess::createProcess(processFlags);
if (!m_workingDirectory.isEmpty())
process->setWorkingDirectory(m_workingDirectory);
process->setProcessEnvironment(m_environment);
QByteArray stdOut;
QByteArray stdErr;
@@ -139,25 +156,25 @@ void GitCommand::run()
if (Git::Constants::debug)
qDebug() << "GitCommand::run" << j << '/' << count << m_jobs.at(j).arguments;
process.start(m_binaryPath, m_basicArguments + m_jobs.at(j).arguments);
if(!process.waitForStarted()) {
process->start(m_binaryPath, m_basicArguments + m_jobs.at(j).arguments);
if(!process->waitForStarted()) {
ok = false;
error += QString::fromLatin1("Error: \"%1\" could not be started: %2").arg(m_binaryPath, process.errorString());
error += QString::fromLatin1("Error: \"%1\" could not be started: %2").arg(m_binaryPath, process->errorString());
break;
}
process.closeWriteChannel();
process->closeWriteChannel();
const int timeOutSeconds = m_jobs.at(j).timeout;
if (!Utils::SynchronousProcess::readDataFromProcess(process, timeOutSeconds * 1000,
&stdOut, &stdErr)) {
Utils::SynchronousProcess::stopProcess(process);
if (!Utils::SynchronousProcess::readDataFromProcess(*process, timeOutSeconds * 1000,
&stdOut, &stdErr, false)) {
Utils::SynchronousProcess::stopProcess(*process);
ok = false;
error += msgTimeout(timeOutSeconds);
break;
}
error += QString::fromLocal8Bit(stdErr);
exitCode = process.exitCode();
exitCode = process->exitCode();
switch (m_reportTerminationMode) {
case NoReport:
break;