From db7caaa76c3118375d435e84973d057e548bcd10 Mon Sep 17 00:00:00 2001
From: El Mehdi Fekari <mfekari@rim.com>
Date: Wed, 29 May 2013 16:52:14 +0200
Subject: [PATCH] Qnx: Fix slog2er parsing when logs contain \n

If the logs contain a '\n' the message parts in the new lines are not displayed.
The new line messages are displayed with no buffer details and are ignored
when the parsing is processed.

Cherry-picked: a7fa0dd4b9c113dda6c94b9bd27990424a91c81c

Change-Id: I0e174dd5283a64c4e9b0434c06dd417f1be2c810
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 .../qnx/blackberryapplicationrunner.cpp       | 42 +++++++++++++------
 src/plugins/qnx/blackberryapplicationrunner.h |  1 +
 2 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/plugins/qnx/blackberryapplicationrunner.cpp b/src/plugins/qnx/blackberryapplicationrunner.cpp
index 34d661d91b0..54e22d76c6a 100644
--- a/src/plugins/qnx/blackberryapplicationrunner.cpp
+++ b/src/plugins/qnx/blackberryapplicationrunner.cpp
@@ -85,6 +85,7 @@ BlackBerryApplicationRunner::BlackBerryApplicationRunner(bool debugMode, BlackBe
     : QObject(parent)
     , m_debugMode(debugMode)
     , m_slog2infoFound(false)
+    , m_currentLogs(false)
     , m_pid(-1)
     , m_appId(QString())
     , m_running(false)
@@ -179,6 +180,7 @@ ProjectExplorer::RunControl::StopResult BlackBerryApplicationRunner::stop()
         return ProjectExplorer::RunControl::AsynchronousStop;
 
     m_stopping = true;
+    m_currentLogs = false;
 
     if (m_testSlog2Process && m_testSlog2Process->isProcessRunning()) {
         m_testSlog2Process->cancel();
@@ -330,19 +332,33 @@ void BlackBerryApplicationRunner::handleTailOutput()
     if (m_slog2infoFound) {
         const QStringList multiLine = message.split(QLatin1Char('\n'));
         Q_FOREACH (const QString &line, multiLine) {
-            QDateTime dateTime = QDateTime::fromString(line.split(m_appId).first().mid(4).trimmed(),
-                                                       QString::fromLatin1("dd HH:mm:ss.zzz"));
-            if (dateTime >= m_launchDateTime) {
-                QStringList validLineBeginnings;
-                validLineBeginnings << QLatin1String("qt-msg      0  ")
-                                    << QLatin1String("qt-msg*     0  ")
-                                    << QLatin1String("default*  9000  ")
-                                    << QLatin1String("default   9000  ")
-                                    << QLatin1String("                           0  ");
-                Q_FOREACH (const QString &beginning, validLineBeginnings) {
-                    if (showQtMessage(beginning, line))
-                        break;
-                }
+            // Check if logs are from the recent launch
+            // Note: This is useless if/once slog2info -b displays only logs from recent launches
+            if (!m_currentLogs) {
+                QDateTime dateTime = QDateTime::fromString(line.split(m_appId).first().mid(4).trimmed(),
+                                                           QString::fromLatin1("dd HH:mm:ss.zzz"));
+
+                m_currentLogs = dateTime >= m_launchDateTime;
+                if (!m_currentLogs)
+                    continue;
+            }
+
+            // The line could be a part of a previous log message that contains a '\n'
+            // In that case only the message body is displayed
+            if (!line.contains(m_appId) && !line.isEmpty()) {
+                emit output(line + QLatin1Char('\n'), Utils::StdOutFormat);
+                continue;
+            }
+
+            QStringList validLineBeginnings;
+            validLineBeginnings << QLatin1String("qt-msg      0  ")
+                                << QLatin1String("qt-msg*     0  ")
+                                << QLatin1String("default*  9000  ")
+                                << QLatin1String("default   9000  ")
+                                << QLatin1String("                           0  ");
+            Q_FOREACH (const QString &beginning, validLineBeginnings) {
+                if (showQtMessage(beginning, line))
+                    break;
             }
         }
         return;
diff --git a/src/plugins/qnx/blackberryapplicationrunner.h b/src/plugins/qnx/blackberryapplicationrunner.h
index f9bf0161d89..788d0c3dbeb 100644
--- a/src/plugins/qnx/blackberryapplicationrunner.h
+++ b/src/plugins/qnx/blackberryapplicationrunner.h
@@ -98,6 +98,7 @@ private:
 
     bool m_debugMode;
     bool m_slog2infoFound;
+    bool m_currentLogs;
 
     QDateTime m_launchDateTime;
 
-- 
GitLab