From f33a9813b129e08b3ea78f43c8801f71b7d0fb60 Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Fri, 30 Aug 2013 11:19:55 +0200
Subject: [PATCH] Debugger: Fix configuration upgrade path from 2.8

Change-Id: I67547dfad529ebb918741721b691c39bb0e69720
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 .../debugger/debuggerkitconfigwidget.cpp      | 52 ++++++++++---------
 .../debugger/debuggerkitconfigwidget.h        |  1 +
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/src/plugins/debugger/debuggerkitconfigwidget.cpp b/src/plugins/debugger/debuggerkitconfigwidget.cpp
index d3ec750b6b6..0df34d0f55c 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.cpp
+++ b/src/plugins/debugger/debuggerkitconfigwidget.cpp
@@ -159,26 +159,6 @@ void DebuggerItem::fromMap(const QVariantMap &data)
         if (abi.isValid())
             abis.append(abi);
     }
-
-//    // Check for special 'auto' entry for binary written by the sdktool during
-//    // installation. Try to autodetect.
-//    if (command == QLatin1String("auto")) {
-//        command.clear();
-//        switch (engineType) {
-//        case Debugger::GdbEngineType: // Auto-detect system gdb on Unix
-//            if (Abi::hostAbi().os() != Abi::WindowsOS)
-//                comman = Environment::systemEnvironment().searchInPath(QLatin1String("gdb"));
-//            break;
-//        case Debugger::CdbEngineType: { // Auto-detect system CDB on Windows.
-//             const QPair<QString, QString> cdbs = autoDetectCdbDebugger();
-//             binary = cdbs.second.isEmpty() ? cdbs.first : cdbs.second;
-//        }
-//            break;
-//        default:
-//            break;
-//        }
-//    }
-//    command = FileName::fromString(binary);
 }
 
 QString DebuggerItem::userOutput() const
@@ -330,16 +310,32 @@ DebuggerItem DebuggerKitInformation::debuggerItem(const ProjectExplorer::Kit *k)
     if (!k)
         return DebuggerItem();
 
+    // We used to have:
+    // <valuemap type="QVariantMap" key="Debugger.Information">
+    //    <value type="QString" key="Binary">/data/dev/debugger/gdb-git/gdb/gdb</value>
+    //    <value type="int" key="EngineType">1</value>
+    //  </valuemap>
+    // Starting with 3.0 we have:
+    // <value type="QString" key="Debugger.Information">{75ecf347-f221-44c3-b613-ea1d29929cd4}</value>
+
     QVariant id = k->value(DEBUGGER_INFORMATION);
-    if (!id.isValid())
-        return DebuggerItem();
 
-    DebuggerItem *item = DebuggerItemManager::debuggerFromId(id);
+    QString pathOrUid;
+    if (id.type() == QVariant::Map) // 2.x
+        pathOrUid = id.toMap().value(QLatin1String("Binary")).toString();
+    else if (id.type() == QVariant::String) // 3.x
+        pathOrUid = id.toString();
+
+    DebuggerItem *item;
+    if (pathOrUid.startsWith(QLatin1Char('{')))
+        item = DebuggerItemManager::debuggerFromId(id);
+    else
+        item = DebuggerItemManager::debuggerFromPath(pathOrUid);
+
     QTC_ASSERT(item, return DebuggerItem());
     return *item;
 }
 
-
 void DebuggerKitInformation::setDebuggerItem(Kit *k,
     DebuggerEngineType type, const Utils::FileName &command)
 {
@@ -741,6 +737,14 @@ DebuggerItem *DebuggerItemManager::debuggerFromId(const QVariant &id)
     return 0;
 }
 
+DebuggerItem *DebuggerItemManager::debuggerFromPath(const QString &path)
+{
+    foreach (DebuggerItem *item, theDebuggerItemManager()->m_debuggers)
+        if (item->command.toString() == path)
+            return item;
+    return 0;
+}
+
 QModelIndex DebuggerItemManager::currentIndex() const
 {
     QStandardItem *current = m_itemFromDebugger.value(m_currentDebugger);
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.h b/src/plugins/debugger/debuggerkitconfigwidget.h
index 72503393cbd..fa93c34068a 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.h
+++ b/src/plugins/debugger/debuggerkitconfigwidget.h
@@ -71,6 +71,7 @@ public:
     QList<DebuggerItem *> findDebuggers(const ProjectExplorer::Abi &abi) const;
     DebuggerItem *currentDebugger() const { return m_currentDebugger; }
     static DebuggerItem *debuggerFromId(const QVariant &id);
+    static DebuggerItem *debuggerFromPath(const QString &path);
     QModelIndex currentIndex() const;
     void setCurrentIndex(const QModelIndex &index);
 
-- 
GitLab