From 0cac09e757251cf77050dcd789a4f10aefeec2a2 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 21 Apr 2020 15:12:22 +0300 Subject: [PATCH] QmlDesigner: Fix importing existing asset with different capitalization In case sensitive file systems, revert to old capitalization after reimporting existing asset with different capitalization. Change-Id: If26443b34e408c84aeb12940262c8b9f696f0bbf Fixes: QDS-1958 Reviewed-by: Thomas Hartmann --- .../itemlibrary/itemlibraryassetimporter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp index 374de839189..0f484a11324 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp @@ -280,7 +280,16 @@ void ItemLibraryAssetImporter::parseQuick3DAsset(const QString &file, const QVar return; } + QString originalAssetName = assetName; if (targetDir.exists(assetName)) { + // If we have a file system with case insensitive filenames, assetName may be + // different from the existing name. Modify assetName to ensure exact match to + // the overwritten old asset capitalization + const QStringList assetDirs = targetDir.entryList({assetName}, QDir::Dirs); + if (assetDirs.size() == 1) { + assetName = assetDirs[0]; + targetDirPath = targetDir.filePath(assetName); + } if (!confirmAssetOverwrite(assetName)) { addWarning(tr("Skipped import of existing asset: \"%1\"").arg(assetName)); return; @@ -306,6 +315,13 @@ void ItemLibraryAssetImporter::parseQuick3DAsset(const QString &file, const QVar return; } + if (originalAssetName != assetName) { + // Fix the generated qml file name + const QString assetQml = originalAssetName + ".qml"; + if (outDir.exists(assetQml)) + outDir.rename(assetQml, assetName + ".qml"); + } + QHash assetFiles; const int outDirPathSize = outDir.path().size(); auto insertAsset = [&](const QString &filePath) {