summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp42
-rw-r--r--src/plugins/android/androiddeployqtstep.h17
2 files changed, 42 insertions, 17 deletions
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index da413ec15f..6dab07ba88 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -69,6 +69,8 @@ const Core::Id AndroidDeployQtStep::Id("Qt4ProjectManager.AndroidDeployQtStep");
// AndroidDeployQtStepFactory
/////////////////
+
+
AndroidDeployQtStepFactory::AndroidDeployQtStepFactory(QObject *parent)
: IBuildStepFactory(parent)
{
@@ -266,7 +268,6 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterface<bool> &fi)
{
- m_installOk = true;
QString args;
if (m_useAndroiddeployqt) {
args = m_androiddeployqtArgs;
@@ -309,10 +310,11 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
if (Utils::HostOsInfo::isWindowsHost())
m_process->setUseCtrlCStub(true);
+ DeployErrorCode deployError = NoError;
connect(m_process, &Utils::QtcProcess::readyReadStandardOutput,
- this, &AndroidDeployQtStep::processReadyReadStdOutput, Qt::DirectConnection);
+ std::bind(&AndroidDeployQtStep::processReadyReadStdOutput, this, std::ref(deployError)));
connect(m_process, &Utils::QtcProcess::readyReadStandardError,
- this, &AndroidDeployQtStep::processReadyReadStdError, Qt::DirectConnection);
+ std::bind(&AndroidDeployQtStep::processReadyReadStdError, this, std::ref(deployError)));
m_process->start();
@@ -331,12 +333,16 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
}
QString line = QString::fromLocal8Bit(m_process->readAllStandardError());
- if (!line.isEmpty())
+ if (!line.isEmpty()) {
+ deployError |= parseDeployErrors(line);
stdError(line);
+ }
line = QString::fromLocal8Bit(m_process->readAllStandardOutput());
- if (!line.isEmpty())
+ if (!line.isEmpty()) {
+ deployError |= parseDeployErrors(line);
stdOutput(line);
+ }
QProcess::ExitStatus exitStatus = m_process->exitStatus();
int exitCode = m_process->exitCode();
@@ -355,7 +361,7 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
}
if (exitCode == 0 && exitStatus == QProcess::NormalExit) {
- if (!m_installOk) {
+ if (deployError != NoError) {
if (!m_uninstallPreviousPackageRun)
return AskUinstall;
else
@@ -451,40 +457,48 @@ ProjectExplorer::BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget(
return new AndroidDeployQtWidget(this);
}
-void AndroidDeployQtStep::processReadyReadStdOutput()
+void AndroidDeployQtStep::processReadyReadStdOutput(DeployErrorCode &errorCode)
{
m_process->setReadChannel(QProcess::StandardOutput);
while (m_process->canReadLine()) {
QString line = QString::fromLocal8Bit(m_process->readLine());
+ errorCode |= parseDeployErrors(line);
stdOutput(line);
}
}
void AndroidDeployQtStep::stdOutput(const QString &line)
{
- if (line.contains(InstallFailedInconsistentCertificatesString)
- || line.contains(InstallFailedInconsistentCertificatesString2))
- m_installOk = false;
emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
}
-void AndroidDeployQtStep::processReadyReadStdError()
+void AndroidDeployQtStep::processReadyReadStdError(DeployErrorCode &errorCode)
{
m_process->setReadChannel(QProcess::StandardError);
while (m_process->canReadLine()) {
QString line = QString::fromLocal8Bit(m_process->readLine());
+ errorCode |= parseDeployErrors(line);
stdError(line);
}
}
void AndroidDeployQtStep::stdError(const QString &line)
{
- if (line.contains(InstallFailedInconsistentCertificatesString)
- || line.contains(InstallFailedInconsistentCertificatesString2))
- m_installOk = false;
emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
}
+AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::parseDeployErrors(QString &deployOutputLine) const
+{
+ DeployErrorCode errorCode = NoError;
+
+ if (deployOutputLine.contains(InstallFailedInconsistentCertificatesString))
+ errorCode |= InconsistentCertificates;
+ if (deployOutputLine.contains(InstallFailedInconsistentCertificatesString2))
+ errorCode |= UpdateIncompatible;
+
+ return errorCode;
+}
+
bool AndroidDeployQtStep::fromMap(const QVariantMap &map)
{
m_uninstallPreviousPackage = map.value(UninstallPreviousPackageKey, m_uninstallPreviousPackage).toBool();
diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h
index 99075b6046..32c8a854ba 100644
--- a/src/plugins/android/androiddeployqtstep.h
+++ b/src/plugins/android/androiddeployqtstep.h
@@ -59,6 +59,14 @@ class AndroidDeployQtStep : public ProjectExplorer::BuildStep
{
Q_OBJECT
friend class AndroidDeployQtStepFactory;
+
+ enum DeployErrorCode
+ {
+ NoError = 0,
+ InconsistentCertificates = 0x0001,
+ UpdateIncompatible = 0x0002
+ };
+
public:
enum UninstallType {
Keep,
@@ -98,14 +106,18 @@ private:
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
bool immutable() const override { return true; }
- void processReadyReadStdOutput();
+ void processReadyReadStdOutput(DeployErrorCode &errorCode);
void stdOutput(const QString &line);
- void processReadyReadStdError();
+ void processReadyReadStdError(DeployErrorCode &errorCode);
void stdError(const QString &line);
+ DeployErrorCode parseDeployErrors(QString &deployOutputLine) const;
void slotProcessFinished(int, QProcess::ExitStatus);
void processFinished(int exitCode, QProcess::ExitStatus status);
+ friend void operator|=(DeployErrorCode &e1, const DeployErrorCode &e2) { e1 = static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); }
+ friend DeployErrorCode operator|(const DeployErrorCode &e1, const DeployErrorCode &e2) { return static_cast<AndroidDeployQtStep::DeployErrorCode>((int)e1 | (int)e2); }
+
Utils::FileName m_manifestName;
QString m_serialNumber;
QString m_buildDirectory;
@@ -117,7 +129,6 @@ private:
QString m_targetArch;
bool m_uninstallPreviousPackage;
bool m_uninstallPreviousPackageRun;
- bool m_installOk;
bool m_useAndroiddeployqt;
bool m_askForUinstall;
static const Core::Id Id;