SdkTool: Don't destroy :// parts in qmake paths

Change-Id: I1b8fef656550b7d2e59e6a606728d0f3e85d5af2
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2023-08-09 12:27:31 +02:00
parent 1ca8487e91
commit 578ecfc846
4 changed files with 25 additions and 3 deletions

View File

@@ -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;

View File

@@ -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));
}

View File

@@ -22,6 +22,8 @@ using KeyValuePairList = QList<KeyValuePair>;
QVariant valueFromString(const QString &v);
QString cleanPath(const QString &orig);
class Operation
{
public:

View File

@@ -3,6 +3,8 @@
#include "sdkpersistentsettings.h"
#include "operation.h" // for cleanPath()
#include <QCoreApplication>
#include <QDataStream>
#include <QDateTime>
@@ -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())) {