aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2024-02-12 15:24:04 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2024-02-13 10:16:37 +0000
commita30e54c2e7fb7d9735a364497914a5df452dd1ad (patch)
treee06d019e7ebe38253c4b64ef1dc9f9c78273ac5c /src/lib
parenteb746c7caf2a1e7427984bbd1d970ebdbd108207 (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.cpp15
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);
- }
}
}