From ea56809cf9ca3f343fb55375ef7bbb3ae950ab29 Mon Sep 17 00:00:00 2001
From: kh1 <qt-info@nokia.com>
Date: Wed, 6 Oct 2010 15:11:46 +0200
Subject: [PATCH] Fix broken env reader, it did not reread on device changes.

Reviewed-by: ck
---
 .../qt-maemo/maemodeviceenvreader.cpp         | 34 ++++++++++++-------
 .../qt-maemo/maemodeviceenvreader.h           |  5 ++-
 2 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
index 0ea53fa3696..1442ee7ac25 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp
@@ -47,7 +47,10 @@ MaemoDeviceEnvReader::MaemoDeviceEnvReader(QObject *parent, MaemoRunConfiguratio
     : QObject(parent)
     , m_stop(false)
     , m_devConfig(config->deviceConfig())
+    , m_runConfig(config)
 {
+    connect(config, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
+        this, SLOT(handleCurrentDeviceConfigChanged()));
 }
 
 MaemoDeviceEnvReader::~MaemoDeviceEnvReader()
@@ -59,11 +62,11 @@ void MaemoDeviceEnvReader::start()
     m_stop = false;
     if (m_connection)
         disconnect(m_connection.data(), 0, this, 0);
-    
+
     const bool reuse = m_connection
         && m_connection->state() == Core::SshConnection::Connected
         && m_connection->connectionParameters() == m_devConfig.server;
-    
+
     if (!reuse)
         m_connection = Core::SshConnection::create();
 
@@ -71,7 +74,7 @@ void MaemoDeviceEnvReader::start()
         SLOT(executeRemoteCall()));
     connect(m_connection.data(), SIGNAL(error(SshError)), this,
         SLOT(handleConnectionFailure()));
-    
+
     if (reuse)
         executeRemoteCall();
     else
@@ -89,20 +92,13 @@ void MaemoDeviceEnvReader::stop()
     }
 }
 
-void MaemoDeviceEnvReader::setEnvironment()
-{
-    if (m_remoteOutput.isEmpty())
-        return;
-    m_env = Utils::Environment(m_remoteOutput.split(QLatin1Char('\n'),
-        QString::SkipEmptyParts));
-}
-
 void MaemoDeviceEnvReader::executeRemoteCall()
 {
     if (m_stop)
         return;
 
-    const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand().toUtf8() + "; env";
+    const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand()
+        .toUtf8() + "; env";
     m_remoteProcess = m_connection->createRemoteProcess(remoteCall);
 
     connect(m_remoteProcess.data(), SIGNAL(closed(int)), this,
@@ -123,6 +119,14 @@ void MaemoDeviceEnvReader::handleConnectionFailure()
     emit finished();
 }
 
+void MaemoDeviceEnvReader::handleCurrentDeviceConfigChanged()
+{
+    m_devConfig = m_runConfig->deviceConfig();
+
+    m_env.clear();
+    emit finished();
+}
+
 void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode)
 {
     Q_ASSERT(exitCode == Core::SshRemoteProcess::FailedToStart
@@ -132,8 +136,12 @@ void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode)
     if (m_stop)
         return;
 
+    m_env.clear();
     if (exitCode == Core::SshRemoteProcess::ExitedNormally) {
-        setEnvironment();
+        if (!m_remoteOutput.isEmpty()) {
+            m_env = Utils::Environment(m_remoteOutput.split(QLatin1Char('\n'),
+                QString::SkipEmptyParts));
+        }
     } else {
         emit error(tr("Error running remote process: %1")
             .arg(m_remoteProcess->errorString()));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
index 3d53e93ba0f..e5ad89e4635 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h
@@ -67,12 +67,10 @@ signals:
     void finished();
     void error(const QString &error);
 
-private:
-    void setEnvironment();
-
 private slots:
     void executeRemoteCall();
     void handleConnectionFailure();
+    void handleCurrentDeviceConfigChanged();
 
     void remoteProcessFinished(int exitCode);
     void remoteOutput(const QByteArray &data);
@@ -83,6 +81,7 @@ private:
     QString m_remoteOutput;
     Utils::Environment m_env;
     MaemoDeviceConfig m_devConfig;
+    MaemoRunConfiguration *m_runConfig;
     QSharedPointer<Core::SshConnection> m_connection;
     QSharedPointer<Core::SshRemoteProcess> m_remoteProcess;
 };
-- 
GitLab