From b96802b3ee8e7455f1243aae1315baaa3bbe0928 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 22 Aug 2023 09:48:25 +0200 Subject: [PATCH 1/6] SdkTool: Fix sysroot for docker devices Using QDir::cleanPath on devices paths destroys the path. Also adds workaround for already registered toolkits. Fixes: QTCREATORBUG-29523 Change-Id: Ibb331f3e4e3ec2021e517e341757499a7316b503 Reviewed-by: hjk --- src/plugins/projectexplorer/kitinformation.cpp | 2 +- src/tools/sdktool/addkitoperation.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index e28264d72b2..950cd9bb67f 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -152,7 +152,7 @@ FilePath SysRootKitAspect::sysRoot(const Kit *k) return FilePath(); if (!k->value(SysRootKitAspect::id()).toString().isEmpty()) - return FilePath::fromString(k->value(SysRootKitAspect::id()).toString()); + return FilePath::fromSettings(k->value(SysRootKitAspect::id())); for (ToolChain *tc : ToolChainKitAspect::toolChains(k)) { if (!tc->sysRoot().isEmpty()) diff --git a/src/tools/sdktool/addkitoperation.cpp b/src/tools/sdktool/addkitoperation.cpp index 4f0911d011a..037cf3c5e5c 100644 --- a/src/tools/sdktool/addkitoperation.cpp +++ b/src/tools/sdktool/addkitoperation.cpp @@ -686,7 +686,7 @@ QVariantMap AddKitData::addKit(const QVariantMap &map, if (!m_buildDevice.isNull()) data << KeyValuePair({kit, DATA, BUILDDEVICE_ID}, QVariant(m_buildDevice)); if (!m_sysRoot.isNull()) - data << KeyValuePair({kit, DATA, SYSROOT}, QVariant(QDir::cleanPath(m_sysRoot))); + data << KeyValuePair({kit, DATA, SYSROOT}, QVariant(cleanPath(m_sysRoot))); for (auto i = m_tcs.constBegin(); i != m_tcs.constEnd(); ++i) data << KeyValuePair({kit, DATA, TOOLCHAIN, i.key()}, QVariant(i.value())); if (!qtId.isNull()) From 124cd2f31a81200b2d92f9bd524fe73b89b1835e Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 22 Aug 2023 10:56:05 +0200 Subject: [PATCH 2/6] RemoteLinux: Don't try to create existing dirs Change-Id: Ia3af92470d285874c2e469f6ec95cc8c4f412daf Reviewed-by: hjk Reviewed-by: --- src/plugins/remotelinux/linuxdevice.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 61939f20954..05627ff8864 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -1284,8 +1284,10 @@ private: QByteArray batchData; const FilePaths dirs = dirsToCreate(m_setup.m_files); - for (const FilePath &dir : dirs) - batchData += "-mkdir " + ProcessArgs::quoteArgUnix(dir.path()).toLocal8Bit() + '\n'; + for (const FilePath &dir : dirs) { + if (!dir.exists()) + batchData += "-mkdir " + ProcessArgs::quoteArgUnix(dir.path()).toLocal8Bit() + '\n'; + } for (const FileToTransfer &file : m_setup.m_files) { FilePath sourceFileOrLinkTarget = file.m_source; From 5399588e4d0174b55bba339e60d0dc7ed2d99bfc Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 22 Aug 2023 10:57:33 +0200 Subject: [PATCH 3/6] RemoteLinux: Don't use SFTP if source is remote The SFTP does not work if the source files are on a remote devices so we fall back to generic copy in those cases. Fixes: QTCREATORBUG-29524 Change-Id: Iecb2723dfcbb65653ce6f793dc2d7253979540a5 Reviewed-by: hjk Reviewed-by: --- src/plugins/remotelinux/linuxdevice.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 05627ff8864..97ea99a4dca 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -1461,6 +1461,11 @@ private: FileTransferInterface *LinuxDevice::createFileTransferInterface( const FileTransferSetupData &setup) const { + if (Utils::anyOf(setup.m_files, + [](const FileToTransfer &f) { return f.m_source.needsDevice(); })) { + return new GenericTransferImpl(setup); + } + switch (setup.m_method) { case FileTransferMethod::Sftp: return new SftpTransferImpl(setup, sharedFromThis()); case FileTransferMethod::Rsync: return new RsyncTransferImpl(setup, sharedFromThis()); From 882397d53d264b7a2c93cd13cf4411bc2dd63704 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 22 Aug 2023 13:41:11 +0200 Subject: [PATCH 4/6] CMake: Remove outdated check Change-Id: I490a68f9b4719c65b4058f5263b13bc5979fd6b2 Reviewed-by: hjk Reviewed-by: Reviewed-by: Cristian Adam --- src/plugins/cmakeprojectmanager/fileapiparser.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/fileapiparser.cpp b/src/plugins/cmakeprojectmanager/fileapiparser.cpp index 2e63a56cee0..96fb2b6ee29 100644 --- a/src/plugins/cmakeprojectmanager/fileapiparser.cpp +++ b/src/plugins/cmakeprojectmanager/fileapiparser.cpp @@ -842,7 +842,6 @@ FileApiData FileApiParser::parseData(QPromise> & QString &errorMessage) { QTC_CHECK(errorMessage.isEmpty()); - QTC_CHECK(!replyFilePath.needsDevice()); const FilePath replyDir = replyFilePath.parentDir(); FileApiData result; From 3024c1314e8bfea9e9b3fb603417a03cf60552c0 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 22 Aug 2023 13:57:49 +0200 Subject: [PATCH 5/6] Utils: Speed up isDirectory for roots Change-Id: Ic369bb1b6a5deb84f0da38af7e71d51139a67c9e Reviewed-by: Reviewed-by: Christian Kandeler --- src/libs/utils/devicefileaccess.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index 4653b691374..07600599884 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -884,6 +884,9 @@ bool UnixDeviceFileAccess::isFile(const FilePath &filePath) const bool UnixDeviceFileAccess::isDirectory(const FilePath &filePath) const { + if (filePath.isRootPath()) + return true; + const QString path = filePath.path(); return runInShellSuccess({"test", {"-d", path}, OsType::OsTypeLinux}); } From 2f6bec1d485c075075bd11073796f5b32e2fa342 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 10 Aug 2023 17:43:14 +0200 Subject: [PATCH 6/6] ProjectExplorer: Fix clipping problem in issues pane Add the missing call to QTextDocument::setTextWidth() in the delegate's paint() method, add a workaround for invalid QStyleOption::rect in sizeHint(), take item indentation into account. Fixes: QTCREATORBUG-29458 Change-Id: I56d9f942d6c82dfac82d357ca0f16138ed39150d Reviewed-by: David Schulz Reviewed-by: --- src/plugins/projectexplorer/taskwindow.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 7bad834230d..dfc72e667f5 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -623,6 +623,7 @@ void TaskDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, painter->save(); m_doc.setHtml(options.text); + m_doc.setTextWidth(options.rect.width()); options.text = ""; options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter); painter->translate(options.rect.left(), options.rect.top()); @@ -650,9 +651,12 @@ QSize TaskDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelInd return QStyledItemDelegate::sizeHint(option, index); QStyleOptionViewItem options = option; + options.initFrom(options.widget); initStyleOption(&options, index); m_doc.setHtml(options.text); - m_doc.setTextWidth(options.rect.width()); + const auto view = qobject_cast(options.widget); + QTC_ASSERT(view, return {}); + m_doc.setTextWidth(view->width() * 0.85 - view->indentation()); return QSize(m_doc.idealWidth(), m_doc.size().height()); }