diff --git a/src/tools/sdktool/addqtoperation.cpp b/src/tools/sdktool/addqtoperation.cpp index 61e19855ff6..6b372b1efd9 100644 --- a/src/tools/sdktool/addqtoperation.cpp +++ b/src/tools/sdktool/addqtoperation.cpp @@ -252,6 +252,15 @@ void AddQtOperation::unittest() QCOMPARE(version1.value(QLatin1String(QMAKE)).toString(), QLatin1String("/tmp/test/qmake2")); QVERIFY(version1.contains(QLatin1String("extraData"))); QCOMPARE(version1.value(QLatin1String("extraData")).toString(), QLatin1String("extraValue")); + + // Docker paths + qtData.m_id = "testId3"; + qtData.m_qmake = "docker://image///path/to//some/qmake"; + + map = qtData.addQt(map); + QVariantMap version2 = map.value(QLatin1String("QtVersion.2")).toMap(); + QVERIFY(version2.contains(QLatin1String(QMAKE))); + QCOMPARE(version2.value(QLatin1String(QMAKE)).toString(), QLatin1String("docker://image/path/to/some/qmake")); } #endif @@ -279,7 +288,7 @@ QVariantMap AddQtData::addQt(const QVariantMap &map) const const QString qt = QString::fromLatin1(PREFIX) + QString::number(versionCount); // Sanitize qmake path: - QString saneQmake = QDir::cleanPath(m_qmake); + const QString saneQmake = cleanPath(m_qmake); // insert data: KeyValuePairList data; diff --git a/src/tools/sdktool/operation.cpp b/src/tools/sdktool/operation.cpp index 7a81c3c7adf..d045a440d47 100644 --- a/src/tools/sdktool/operation.cpp +++ b/src/tools/sdktool/operation.cpp @@ -84,7 +84,7 @@ bool Operation::save(const QVariantMap &map, const QString &file) const return false; } - QString dirName = QDir::cleanPath(path + "/.."); + QString dirName = cleanPath(path + "/.."); QDir dir(dirName); if (!dir.exists() && !dir.mkpath(QLatin1String("."))) { std::cerr << "Error: Could not create directory " << qPrintable(dirName) @@ -108,3 +108,12 @@ bool Operation::save(const QVariantMap &map, const QString &file) const } return true; } + +QString cleanPath(const QString &orig) +{ + // QDir::cleanPath() destroys "//", one of which might be needed. + const int pos = orig.indexOf("://"); + if (pos == -1) + return QDir::cleanPath(orig); + return orig.left(pos) + "://" + QDir::cleanPath(orig.mid(pos + 3)); +} diff --git a/src/tools/sdktool/operation.h b/src/tools/sdktool/operation.h index 886ed386675..438bf302b75 100644 --- a/src/tools/sdktool/operation.h +++ b/src/tools/sdktool/operation.h @@ -22,6 +22,8 @@ using KeyValuePairList = QList; QVariant valueFromString(const QString &v); +QString cleanPath(const QString &orig); + class Operation { public: diff --git a/src/tools/sdktool/sdkpersistentsettings.cpp b/src/tools/sdktool/sdkpersistentsettings.cpp index 7fda2d8d03c..b72fffa4c57 100644 --- a/src/tools/sdktool/sdkpersistentsettings.cpp +++ b/src/tools/sdktool/sdkpersistentsettings.cpp @@ -3,6 +3,8 @@ #include "sdkpersistentsettings.h" +#include "operation.h" // for cleanPath() + #include #include #include @@ -826,7 +828,7 @@ void SdkPersistentSettingsWriter::setContents(const QVariantMap &data) bool SdkPersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const { - const QString parentDir = QDir::cleanPath(m_fileName + "/.."); + const QString parentDir = cleanPath(m_fileName + "/.."); const QFileInfo fi(parentDir); if (!(fi.exists() && fi.isDir() && fi.isWritable())) {