void CNotify::updateStatus(const QString & status){ QStringList newList; int i; if( msgTimer == 0 ){ notifyPtr = new CNotify(); msgTimer = new QTimer(); connect(msgTimer, SIGNAL(timeout()), notifyPtr, SLOT(msgTimeout())); } if( debug != 0 ){ debug->updateStatus(status); } if( statusBar != 0 ){ if ( status != "" ){ messages.append(status); if( messages.count() > 4 ){ for(i=1; i < messages.count(); i++){ newList.append(messages.at(i)); } messages = newList; } statusBar->showMessage(" " + messages.join(", ")); msgTimer->setInterval(2000); msgTimer->start(); } if( progressBar != 0) { progressBar->setVisible(false); } } }
void Command::run() { // Check that the binary path is not empty if (binaryPath().trimmed().isEmpty()) { emit errorText(tr("Unable to start process, binary is empty")); return; } const unsigned processFlags = unixTerminalDisabled() ? unsigned(Utils::SynchronousProcess::UnixTerminalDisabled) : unsigned(0); const QSharedPointer<QProcess> process = Utils::SynchronousProcess::createProcess(processFlags); if (!workingDirectory().isEmpty()) process->setWorkingDirectory(workingDirectory()); process->setProcessEnvironment(processEnvironment()); QByteArray stdOut; QByteArray stdErr; QString error; const int count = d->m_jobs.size(); int exitCode = -1; bool ok = true; for (int j = 0; j < count; j++) { process->start(binaryPath(), d->m_jobs.at(j).arguments); if (!process->waitForStarted()) { ok = false; error += QString::fromLatin1("Error: \"%1\" could not be started: %2") .arg(binaryPath(), process->errorString()); break; } process->closeWriteChannel(); const int timeOutSeconds = d->m_jobs.at(j).timeout; 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(); switch (reportTerminationMode()) { case NoReport: break; case ReportStdout: stdOut += msgTermination(exitCode, binaryPath(), d->m_jobs.at(j).arguments).toUtf8(); break; case ReportStderr: error += msgTermination(exitCode, binaryPath(), d->m_jobs.at(j).arguments); break; } } // Special hack: Always produce output for diff if (ok && stdOut.isEmpty() && d->m_jobs.front().arguments.at(0) == QLatin1String("diff")) { stdOut += "No difference to HEAD"; } else { // @TODO: Remove, see below if (ok && d->m_jobs.front().arguments.at(0) == QLatin1String("status")) removeColorCodes(&stdOut); } d->m_lastExecSuccess = ok; d->m_lastExecExitCode = exitCode; if (ok && !stdOut.isEmpty()) emit outputData(stdOut); if (!error.isEmpty()) emit errorText(error); emit finished(ok, exitCode, cookie()); if (ok) emit success(cookie()); // As it is used asynchronously, we need to delete ourselves this->deleteLater(); }
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); process.setEnvironment(m_environment); QByteArray stdOut; QByteArray stdErr; QString error; const int count = m_jobs.size(); int exitCode = -1; bool ok = true; for (int j = 0; j < count; j++) { 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()) { ok = false; error += QString::fromLatin1("Error: \"%1\" could not be started: %2").arg(m_binaryPath, process.errorString()); break; } process.closeWriteChannel(); const int timeOutSeconds = m_jobs.at(j).timeout; if (!Utils::SynchronousProcess::readDataFromProcess(process, timeOutSeconds * 1000, &stdOut, &stdErr)) { Utils::SynchronousProcess::stopProcess(process); ok = false; error += msgTimeout(timeOutSeconds); break; } error += QString::fromLocal8Bit(stdErr); exitCode = process.exitCode(); switch (m_reportTerminationMode) { case NoReport: break; case ReportStdout: stdOut += msgTermination(exitCode, m_binaryPath, m_jobs.at(j).arguments).toUtf8(); break; case ReportStderr: error += msgTermination(exitCode, m_binaryPath, m_jobs.at(j).arguments); break; } } // Special hack: Always produce output for diff if (ok && stdOut.isEmpty() && m_jobs.front().arguments.at(0) == QLatin1String("diff")) { stdOut += "No difference to HEAD"; } else { // @TODO: Remove, see below if (ok && m_jobs.front().arguments.at(0) == QLatin1String("status")) removeColorCodes(&stdOut); } if (ok && !stdOut.isEmpty()) emit outputData(stdOut); if (!error.isEmpty()) emit errorText(error); emit finished(ok, exitCode, m_cookie); if (ok) emit success(); // As it is used asynchronously, we need to delete ourselves this->deleteLater(); }