[qt/qt/qtbase]: Summary of bulk changes made
KDE Git Services - Bulk Change <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git repository change summary for qt/qt/qtbase Pushed by mirror-service into branch 'dev'. Changed from ec84460a9b6a36a45910fb87f1803f3f3a2a140f to 661f4ad0fd192087bce808f74a4fce4955981e63 Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository. This change contains the following new commits: Git commit 8d0678d636ed43c8b885884d4510fb6e72c55698 by Tor Arne Vestbø on 05/08/2026 at 17:01.. qmake: Mask Qt's Clang module maps when building with Clang modules The qmake counterpart of 0688b69ea04126918360c0ea3e919c03f499050a. We ship a Clang VFS overlay next to each module map that masks it, and now pass it via -ivfsoverlay for projects that we detect are building with C++ Clang modules, so that including a Qt header doesn't implicitly turn into an @import of the corresponding Qt module, and a build of that module. CONFIG += no_qt_clang_module_maps opts into the masking for projects we can't detect, for example when the flags come from a compiler wrapper, and CONFIG += qt_clang_module_maps opts out of it. As on the CMake side we limit this to Clang 16 and later, which is where the overlay's 'root-relative' key was introduced. Task-number: QTBUG-141360 Pick-to: 6.12 Change-Id: I4dbeacfc37acefd249ad58d931f1dd2665f25083 Reviewed-by: Orkun Tokdemir <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/8d0678d636ed43c8b885884d4510fb6e72c55698 Git commit 074753db85fbfad684009e2f8104b4618d9396fe by Tor Arne Vestbø on 05/08/2026 at 17:01.. cmake: Only mask Qt's Clang module maps when C++ modules are enabled Clang only enables modules for C++ input if -fcxx-modules is passed along with -fmodules, so plain -fmodules doesn't turn our includes into implicit imports, and leaves nothing to mask. Amends 9f5bef9a320a688625219c236f639f7dc5fa54d6. Task-number: QTBUG-141360 Pick-to: 6.12 Change-Id: I9aabf290a9728d0e0b619dd58567d8551be7a9a8 Reviewed-by: Orkun Tokdemir <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/074753db85fbfad684009e2f8104b4618d9396fe Git commit fa13801c6afb4bc6f8e2c09da6f39ef53203095e by Thiago Macieira on 05/08/2026 at 23:36.. QDirListing: reorganize the engine/native split as a std::variant QDirListingPrivate distinguished its two iteration modes implicitly, by whether the QAbstractFileEngine pointer was null, and kept the members of both modes side by side: the engine and its iterator stack for one, the native iterator stack for the other, plus a single shared visitedLinks tracker. An upcoming change will change how we detect symlink loops, which will require two different types of visitedLinks tracker. Rather than grow yet another pair of parallel members guarded by the same implicit "is engine null" condition, model the choice directly: a std::variant of an EngineData and a NativeData struct, each owning only the state its mode needs, selected in beginIterating(). Re-selecting the alternative on each begin() also destroys and rebuilds that mode's tracker, which removes the need for std::optional and resetting by hand. This is a pure reorganization; loop detection still keys on canonicalFilePath() exactly as before. Pick-to: 6.12 Co-authored-by: Copilot <[email protected]> Change-Id: I1780b5fe9d414cc47308fffdf7ad1531ae49ae2a Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/fa13801c6afb4bc6f8e2c09da6f39ef53203095e Git commit 9cac002cffc38860ec8fcf9882b618c244da5b03 by Thiago Macieira on 05/08/2026 at 23:36.. QDirListing: test that we behave properly with an unreadable dir We are not intending to test that the OS is working properly. But we need to check that QDirListing is working properly when faced with an unreadable sub-directory or a symlink to one such. There are a couple of potential pitfalls in getting canonical paths when unreadable directories are in the mix. This commit adds a test that drops all permissions on a subdirectory (which also holds a symlink pointing back at it from the parent) and confirms a recursive listing still yields the subdirectory and symlink entries both with and without FollowDirSymlinks. It checks that the file inside isn't listed, which would indicate that the test isn't testing what it's supposed to test. Pick-to: 6.12 6.11 Change-Id: I7ba1745c04c176316576fffd2e433c7406509918 Co-authored-by: Copilot <[email protected]> Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/9cac002cffc38860ec8fcf9882b618c244da5b03 Git commit 1532860180d0fcdaa09b64a100e5e55d7658479a by Thiago Macieira on 05/08/2026 at 23:36.. QFileSystemEngine: add nativeId() to obtain a file's raw identity Without converting it to string. Currently, QDirListing detects symlink loops by remembering the directories it has already descended into, keyed today on canonicalFilePath(). That forces a realpath()-class resolution plus QString/QFileInfo churn for every directory, only for it to be opened again by the iterator, and it hashes a whole path string on each lookup. Instead, we can be far more efficient if we just detect loops by recording the OS's own notion of file identity: the (device, inode) pair, which needs no path resolution and is cheap to compare and hash. A later change will switch QDirListing's tracker over to this key. This commit reimplements the existing id() overloads on top of the new functions. Change-Id: I8ee4d6479c7f006f9dd0fffd6a29ecd6d06006bb Co-authored-by: Copilot <[email protected]> Reviewed-by: Ivan Solovev <[email protected]> Reviewed-by: Ahmad Samir <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/1532860180d0fcdaa09b64a100e5e55d7658479a Git commit 19f6b77961a5237da5bf9edf17f373028bfeebe6 by Thiago Macieira on 05/08/2026 at 23:36.. QFileSystemIterator: expose the traversed directory's native id QDirListing needs the identity of each directory it descends into so it can detect symlink loops without resolving canonical paths. The iterator is the right place to answer that: on Unix it already holds the open DIR* (so fstat'ing its fd costs no extra open), and on Windows it has already resolved any trailing .lnk shortcut to its target, so the loop key is taken from the same directory that is actually being listed rather than from a separately-resolved path that could drift out of sync. Change-Id: Ic422ca790ac8f65eee3efffd5f3a0008278d4ac3 Co-authored-by: Copilot <[email protected]> Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/19f6b77961a5237da5bf9edf17f373028bfeebe6 Git commit d739ace66be3759ccecf9a8db6e7aa3c661bd33d by Thiago Macieira on 05/08/2026 at 23:36.. QDirListing: detect symlink loops by native id, not canonical path When following directory symlinks, QDirListing must guard against loops, which it did by remembering each descended directory's canonicalFilePath(). That forces a realpath()-class resolution plus QFileInfo/QString churn for every directory, only for the directory to then be opened a second time by the iterator that actually lists it. The native iterator already opens the directory (and, on Windows, already resolves any .lnk shortcut) to enumerate it, so it can hand back the raw (device, inode) identity essentially for free. Keying the duplicate tracker on that integer identity avoids the redundant resolution and the extra allocations, and hashing a pair of integers is cheaper than hashing a path string. It is also more robust than canonical paths across bind mounts and hardlinked directories, which are the standard cases loop detection targets. The QAbstractFileEngine path is left untouched: its id() is empty in almost every implementation, so it keeps using canonicalFilePath(). I've added two tests: 1) stopLinkLoopVisitOnce(), to verify that we visit a specific list of files exactly once (independent of FS ordering), when symlinks point back to existing content 2) bindMountDuplicateId(), likewise, but using Linux bind-mounts. Change-Id: I1a18895b0a50ef65c0abfffdd3749e07a5f8a65a Co-authored-by: Copilot <[email protected]> Reviewed-by: Ivan Solovev <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/d739ace66be3759ccecf9a8db6e7aa3c661bd33d Git commit 661f4ad0fd192087bce808f74a4fce4955981e63 by Thiago Macieira on 05/08/2026 at 23:36.. QDirListing: simplify getting the current item path in the native case Now that the loop check keys on the iterator's native id, we no longer call canonicalFilePath(), so the original QDirEntryInfo remains unchanged from the caller, which are: - beginIterating() asserts the initial entry is Native - Every subsequent entry comes from QFileSystemIterator::advance(), which constructs its QDirEntryInfo from a QFileSystemEntry, i.e. as Native. - checkAndPushDirectory() inspects the entry (isSymLink()/isDir()/ isHidden()/fileName()) before calling us, but all of those resolve through the Native handler and leave the variant as Native; only canonicalFilePath()/fileInfo() would have promoted it, and neither is called here anymore. So we can remove the case for QFileInfo. Change-Id: I9a937cf07c10db96663cfffd68076c9e3158c1de Co-authored-by: Copilot <[email protected]> Reviewed-by: Ahmad Samir <[email protected]> https://invent.kde.org/qt/qt/qtbase/-/commit/661f4ad0fd192087bce808f74a4fce4955981e63