forked from qt-creator/qt-creator
Refactoring: Android Deployment failure error codes
Change-Id: I88165fcad770e8b8341b252e4fc32b437528647b Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
@@ -69,6 +69,8 @@ const Core::Id AndroidDeployQtStep::Id("Qt4ProjectManager.AndroidDeployQtStep");
|
|||||||
// AndroidDeployQtStepFactory
|
// AndroidDeployQtStepFactory
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AndroidDeployQtStepFactory::AndroidDeployQtStepFactory(QObject *parent)
|
AndroidDeployQtStepFactory::AndroidDeployQtStepFactory(QObject *parent)
|
||||||
: IBuildStepFactory(parent)
|
: IBuildStepFactory(parent)
|
||||||
{
|
{
|
||||||
@@ -266,7 +268,6 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
|
|
||||||
AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterface<bool> &fi)
|
AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterface<bool> &fi)
|
||||||
{
|
{
|
||||||
m_installOk = true;
|
|
||||||
QString args;
|
QString args;
|
||||||
if (m_useAndroiddeployqt) {
|
if (m_useAndroiddeployqt) {
|
||||||
args = m_androiddeployqtArgs;
|
args = m_androiddeployqtArgs;
|
||||||
@@ -309,10 +310,11 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
|
|||||||
if (Utils::HostOsInfo::isWindowsHost())
|
if (Utils::HostOsInfo::isWindowsHost())
|
||||||
m_process->setUseCtrlCStub(true);
|
m_process->setUseCtrlCStub(true);
|
||||||
|
|
||||||
|
DeployErrorCode deployError = NoError;
|
||||||
connect(m_process, &Utils::QtcProcess::readyReadStandardOutput,
|
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,
|
connect(m_process, &Utils::QtcProcess::readyReadStandardError,
|
||||||
this, &AndroidDeployQtStep::processReadyReadStdError, Qt::DirectConnection);
|
std::bind(&AndroidDeployQtStep::processReadyReadStdError, this, std::ref(deployError)));
|
||||||
|
|
||||||
m_process->start();
|
m_process->start();
|
||||||
|
|
||||||
@@ -331,12 +333,16 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString line = QString::fromLocal8Bit(m_process->readAllStandardError());
|
QString line = QString::fromLocal8Bit(m_process->readAllStandardError());
|
||||||
if (!line.isEmpty())
|
if (!line.isEmpty()) {
|
||||||
|
deployError |= parseDeployErrors(line);
|
||||||
stdError(line);
|
stdError(line);
|
||||||
|
}
|
||||||
|
|
||||||
line = QString::fromLocal8Bit(m_process->readAllStandardOutput());
|
line = QString::fromLocal8Bit(m_process->readAllStandardOutput());
|
||||||
if (!line.isEmpty())
|
if (!line.isEmpty()) {
|
||||||
|
deployError |= parseDeployErrors(line);
|
||||||
stdOutput(line);
|
stdOutput(line);
|
||||||
|
}
|
||||||
|
|
||||||
QProcess::ExitStatus exitStatus = m_process->exitStatus();
|
QProcess::ExitStatus exitStatus = m_process->exitStatus();
|
||||||
int exitCode = m_process->exitCode();
|
int exitCode = m_process->exitCode();
|
||||||
@@ -355,7 +361,7 @@ AndroidDeployQtStep::DeployResult AndroidDeployQtStep::runDeploy(QFutureInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (exitCode == 0 && exitStatus == QProcess::NormalExit) {
|
if (exitCode == 0 && exitStatus == QProcess::NormalExit) {
|
||||||
if (!m_installOk) {
|
if (deployError != NoError) {
|
||||||
if (!m_uninstallPreviousPackageRun)
|
if (!m_uninstallPreviousPackageRun)
|
||||||
return AskUinstall;
|
return AskUinstall;
|
||||||
else
|
else
|
||||||
@@ -451,40 +457,48 @@ ProjectExplorer::BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget(
|
|||||||
return new AndroidDeployQtWidget(this);
|
return new AndroidDeployQtWidget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidDeployQtStep::processReadyReadStdOutput()
|
void AndroidDeployQtStep::processReadyReadStdOutput(DeployErrorCode &errorCode)
|
||||||
{
|
{
|
||||||
m_process->setReadChannel(QProcess::StandardOutput);
|
m_process->setReadChannel(QProcess::StandardOutput);
|
||||||
while (m_process->canReadLine()) {
|
while (m_process->canReadLine()) {
|
||||||
QString line = QString::fromLocal8Bit(m_process->readLine());
|
QString line = QString::fromLocal8Bit(m_process->readLine());
|
||||||
|
errorCode |= parseDeployErrors(line);
|
||||||
stdOutput(line);
|
stdOutput(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidDeployQtStep::stdOutput(const QString &line)
|
void AndroidDeployQtStep::stdOutput(const QString &line)
|
||||||
{
|
{
|
||||||
if (line.contains(InstallFailedInconsistentCertificatesString)
|
|
||||||
|| line.contains(InstallFailedInconsistentCertificatesString2))
|
|
||||||
m_installOk = false;
|
|
||||||
emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
|
emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidDeployQtStep::processReadyReadStdError()
|
void AndroidDeployQtStep::processReadyReadStdError(DeployErrorCode &errorCode)
|
||||||
{
|
{
|
||||||
m_process->setReadChannel(QProcess::StandardError);
|
m_process->setReadChannel(QProcess::StandardError);
|
||||||
while (m_process->canReadLine()) {
|
while (m_process->canReadLine()) {
|
||||||
QString line = QString::fromLocal8Bit(m_process->readLine());
|
QString line = QString::fromLocal8Bit(m_process->readLine());
|
||||||
|
errorCode |= parseDeployErrors(line);
|
||||||
stdError(line);
|
stdError(line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidDeployQtStep::stdError(const QString &line)
|
void AndroidDeployQtStep::stdError(const QString &line)
|
||||||
{
|
{
|
||||||
if (line.contains(InstallFailedInconsistentCertificatesString)
|
|
||||||
|| line.contains(InstallFailedInconsistentCertificatesString2))
|
|
||||||
m_installOk = false;
|
|
||||||
emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
|
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)
|
bool AndroidDeployQtStep::fromMap(const QVariantMap &map)
|
||||||
{
|
{
|
||||||
m_uninstallPreviousPackage = map.value(UninstallPreviousPackageKey, m_uninstallPreviousPackage).toBool();
|
m_uninstallPreviousPackage = map.value(UninstallPreviousPackageKey, m_uninstallPreviousPackage).toBool();
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ class AndroidDeployQtStep : public ProjectExplorer::BuildStep
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
friend class AndroidDeployQtStepFactory;
|
friend class AndroidDeployQtStepFactory;
|
||||||
|
|
||||||
|
enum DeployErrorCode
|
||||||
|
{
|
||||||
|
NoError = 0,
|
||||||
|
InconsistentCertificates = 0x0001,
|
||||||
|
UpdateIncompatible = 0x0002
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum UninstallType {
|
enum UninstallType {
|
||||||
Keep,
|
Keep,
|
||||||
@@ -98,14 +106,18 @@ private:
|
|||||||
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
|
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
|
||||||
bool immutable() const override { return true; }
|
bool immutable() const override { return true; }
|
||||||
|
|
||||||
void processReadyReadStdOutput();
|
void processReadyReadStdOutput(DeployErrorCode &errorCode);
|
||||||
void stdOutput(const QString &line);
|
void stdOutput(const QString &line);
|
||||||
void processReadyReadStdError();
|
void processReadyReadStdError(DeployErrorCode &errorCode);
|
||||||
void stdError(const QString &line);
|
void stdError(const QString &line);
|
||||||
|
DeployErrorCode parseDeployErrors(QString &deployOutputLine) const;
|
||||||
|
|
||||||
void slotProcessFinished(int, QProcess::ExitStatus);
|
void slotProcessFinished(int, QProcess::ExitStatus);
|
||||||
void processFinished(int exitCode, QProcess::ExitStatus status);
|
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;
|
Utils::FileName m_manifestName;
|
||||||
QString m_serialNumber;
|
QString m_serialNumber;
|
||||||
QString m_buildDirectory;
|
QString m_buildDirectory;
|
||||||
@@ -117,7 +129,6 @@ private:
|
|||||||
QString m_targetArch;
|
QString m_targetArch;
|
||||||
bool m_uninstallPreviousPackage;
|
bool m_uninstallPreviousPackage;
|
||||||
bool m_uninstallPreviousPackageRun;
|
bool m_uninstallPreviousPackageRun;
|
||||||
bool m_installOk;
|
|
||||||
bool m_useAndroiddeployqt;
|
bool m_useAndroiddeployqt;
|
||||||
bool m_askForUinstall;
|
bool m_askForUinstall;
|
||||||
static const Core::Id Id;
|
static const Core::Id Id;
|
||||||
|
|||||||
Reference in New Issue
Block a user