bool AndroidRunnerWorkerBase::runAdb(const QStringList &args, int timeoutS) { Utils::SynchronousProcess adb; adb.setTimeoutS(timeoutS); Utils::SynchronousProcessResponse response = adb.run(m_adb, selector() + args); m_lastRunAdbError = response.exitMessage(m_adb, timeoutS); m_lastRunAdbRawOutput = response.allRawOutput(); return response.result == Utils::SynchronousProcessResponse::Finished; }
void AndroidCreateKeystoreCertificate::on_buttonBox_accepted() { if (!validateUserInput()) return; m_keystoreFilePath = Utils::FileName::fromString(QFileDialog::getSaveFileName(this, tr("Keystore file name"), QDir::homePath() + QLatin1String("/android_release.keystore"), tr("Keystore files (*.keystore *.jks)"))); if (m_keystoreFilePath.isEmpty()) return; QString distinguishedNames(QString::fromLatin1("CN=%1, O=%2, L=%3, C=%4") .arg(ui->commonNameLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,"))) .arg(ui->organizationNameLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,"))) .arg(ui->localityNameLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,"))) .arg(ui->countryLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,")))); if (ui->organizationUnitLineEdit->text().length()) distinguishedNames += QLatin1String(", OU=") + ui->organizationUnitLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,")); if (ui->stateNameLineEdit->text().length()) distinguishedNames += QLatin1String(", S=") + ui->stateNameLineEdit->text().replace(QLatin1Char(','), QLatin1String("\\,")); const QString command = AndroidConfigurations::currentConfig().keytoolPath().toString(); QStringList params; params << QLatin1String("-genkey") << QLatin1String("-keyalg") << QLatin1String("RSA") << QLatin1String("-keystore") << m_keystoreFilePath.toString() << QLatin1String("-storepass") << keystorePassword() << QLatin1String("-alias") << certificateAlias() << QLatin1String("-keysize") << ui->keySizeSpinBox->text() << QLatin1String("-validity") << ui->validitySpinBox->text() << QLatin1String("-keypass") << certificatePassword() << QLatin1String("-dname") << distinguishedNames; Utils::SynchronousProcess genKeyCertProc; genKeyCertProc.setTimeoutS(15); Utils::SynchronousProcessResponse response = genKeyCertProc.run(command, params); if (response.result != Utils::SynchronousProcessResponse::Finished || response.exitCode != 0) { QMessageBox::critical(this, tr("Error"), response.exitMessage(command, 15) + QLatin1Char('\n') + response.allOutput()); return; } accept(); }
Utils::SynchronousProcessResponse VcsCommand::runVcs(const QStringList &arguments, int timeoutMS, Utils::ExitCodeInterpreter *interpreter) { Utils::SynchronousProcessResponse response; OutputProxy outputProxy; if (d->m_binaryPath.isEmpty()) { response.result = Utils::SynchronousProcessResponse::StartFailed; return response; } if (!(d->m_flags & VcsBasePlugin::SuppressCommandLogging)) emit outputProxy.appendCommand(d->m_workingDirectory, d->m_binaryPath, arguments); const bool sshPromptConfigured = !d->m_sshPasswordPrompt.isEmpty(); if (debugExecution) { QDebug nsp = qDebug().nospace(); nsp << "Command::runVcs" << d->m_workingDirectory << d->m_binaryPath << arguments << timeoutMS; if (d->m_flags & VcsBasePlugin::ShowStdOutInLogWindow) nsp << "stdout"; if (d->m_flags & VcsBasePlugin::SuppressStdErrInLogWindow) nsp << "suppress_stderr"; if (d->m_flags & VcsBasePlugin::SuppressFailMessageInLogWindow) nsp << "suppress_fail_msg"; if (d->m_flags & VcsBasePlugin::MergeOutputChannels) nsp << "merge_channels"; if (d->m_flags & VcsBasePlugin::SshPasswordPrompt) nsp << "ssh (" << sshPromptConfigured << ')'; if (d->m_flags & VcsBasePlugin::SuppressCommandLogging) nsp << "suppress_log"; if (d->m_flags & VcsBasePlugin::ForceCLocale) nsp << "c_locale"; if (d->m_flags & VcsBasePlugin::FullySynchronously) nsp << "fully_synchronously"; if (d->m_flags & VcsBasePlugin::ExpectRepoChanges) nsp << "expect_repo_changes"; if (d->m_codec) nsp << " Codec: " << d->m_codec->name(); } // TODO tell the document manager about expected repository changes // if (d->m_flags & ExpectRepoChanges) // Core::DocumentManager::expectDirectoryChange(d->m_workingDirectory); if (d->m_flags & VcsBasePlugin::FullySynchronously) { response = runSynchronous(arguments, timeoutMS, interpreter); } else { Utils::SynchronousProcess process; process.setExitCodeInterpreter(interpreter); connect(this, &VcsCommand::terminate, &process, &Utils::SynchronousProcess::terminate); if (!d->m_workingDirectory.isEmpty()) process.setWorkingDirectory(d->m_workingDirectory); QProcessEnvironment env = d->m_environment; VcsBasePlugin::setProcessEnvironment(&env, (d->m_flags & VcsBasePlugin::ForceCLocale), d->m_sshPasswordPrompt); process.setProcessEnvironment(env); process.setTimeout(timeoutMS); if (d->m_codec) process.setCodec(d->m_codec); // Suppress terminal on UNIX for ssh prompts if it is configured. if (sshPromptConfigured && (d->m_flags & VcsBasePlugin::SshPasswordPrompt)) process.setFlags(Utils::SynchronousProcess::UnixTerminalDisabled); // connect stderr to the output window if desired if (d->m_flags & VcsBasePlugin::MergeOutputChannels) { process.setProcessChannelMode(QProcess::MergedChannels); } else if (d->m_progressiveOutput || !(d->m_flags & VcsBasePlugin::SuppressStdErrInLogWindow)) { process.setStdErrBufferedSignalsEnabled(true); connect(&process, &Utils::SynchronousProcess::stdErrBuffered, this, &VcsCommand::bufferedError); } // connect stdout to the output window if desired if (d->m_progressParser || d->m_progressiveOutput || (d->m_flags & VcsBasePlugin::ShowStdOutInLogWindow)) { process.setStdOutBufferedSignalsEnabled(true); connect(&process, &Utils::SynchronousProcess::stdOutBuffered, this, &VcsCommand::bufferedOutput); } process.setTimeOutMessageBoxEnabled(true); // Run! response = process.run(d->m_binaryPath.toString(), arguments); } if (!d->m_aborted) { // Success/Fail message in appropriate window? if (response.result == Utils::SynchronousProcessResponse::Finished) { if (d->m_flags & VcsBasePlugin::ShowSuccessMessage) { emit outputProxy.appendMessage(response.exitMessage(d->m_binaryPath.toUserOutput(), timeoutMS)); } } else if (!(d->m_flags & VcsBasePlugin::SuppressFailMessageInLogWindow)) { emit outputProxy.appendError(response.exitMessage(d->m_binaryPath.toUserOutput(), timeoutMS)); } } emitRepositoryChanged(); return response; }