[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.