diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-12 15:24:04 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-13 10:16:37 +0000 |
commit | a30e54c2e7fb7d9735a364497914a5df452dd1ad (patch) | |
tree | e06d019e7ebe38253c4b64ef1dc9f9c78273ac5c /src/lib | |
parent | eb746c7caf2a1e7427984bbd1d970ebdbd108207 (diff) |
Fix wildcard change tracking
We recorded both too many and not enough time stamps for wildcards:
- We should not try to track changes regarding recursive wildcards
("**/"), as that can easily pull in large parts of the source
tree and/or the project root directory, likely resulting in
unwanted re-resolvings.
- We should track the parent dir of a wildcard pattern, even if
the last evaluation yielded no matches.
Change-Id: I8e5521a2fcb7fd1f54103e0df566f33dd6f2a972
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/language/language.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 0e24b8b5e..b3f4b2a64 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -750,8 +750,6 @@ void SourceWildCards::expandPatterns(Set<QString> &result, const QStringList &pa if (baseDir.startsWith(buildDir)) return; - dirTimeStamps.emplace_back(baseDir, FileInfo(baseDir).lastModified()); - QStringList changed_parts = parts; bool recursive = false; QString part = changed_parts.takeFirst(); @@ -778,8 +776,12 @@ void SourceWildCards::expandPatterns(Set<QString> &result, const QStringList &pa : QDir::Files | QDir::System | QDir::Dirs; // This one is needed to get symbolic links to directories - if (isDir && !FileInfo::isPattern(filePattern)) + if (FileInfo::isPattern(filePattern)) { + if (!recursive) + dirTimeStamps.emplace_back(baseDir, FileInfo(baseDir).lastModified()); + } else if (isDir) { itFilters |= QDir::Hidden; + } if (filePattern != StringConstants::dotDot() && filePattern != StringConstants::dot()) itFilters |= QDir::NoDotAndDotDot; @@ -791,13 +793,10 @@ void SourceWildCards::expandPatterns(Set<QString> &result, const QStringList &pa continue; // See above. if (!isDir && it.fileInfo().isDir() && !it.fileInfo().isSymLink()) continue; - if (isDir) { + if (isDir) expandPatterns(result, changed_parts, filePath); - } else { - if (parentDir != baseDir) - dirTimeStamps.emplace_back(parentDir, FileInfo(parentDir).lastModified()); + else result += QDir::cleanPath(filePath); - } } } |