diff options
-rw-r--r-- | src/qtattributionsscanner/main.cpp | 14 | ||||
-rw-r--r-- | src/qtattributionsscanner/scanner.cpp | 24 | ||||
-rw-r--r-- | src/qtattributionsscanner/scanner.h | 8 |
3 files changed, 31 insertions, 15 deletions
diff --git a/src/qtattributionsscanner/main.cpp b/src/qtattributionsscanner/main.cpp index b429f5b39..9a03c879d 100644 --- a/src/qtattributionsscanner/main.cpp +++ b/src/qtattributionsscanner/main.cpp @@ -20,7 +20,7 @@ int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); a.setApplicationName(u"Qt Attributions Scanner"_s); - a.setApplicationVersion(u"1.1"_s); + a.setApplicationVersion(u"1.2"_s); QCommandLineParser parser; parser.setApplicationDescription(tr("Processes attribution files in Qt sources.")); @@ -47,6 +47,9 @@ int main(int argc, char *argv[]) tr("Paths in documentation are made relative to this " "directory."), u"directory"_s); + QCommandLineOption noCheckPathsOption( + u"no-check-paths"_s, + tr("Do not check whether referenced file paths exist in basedir.")); QCommandLineOption outputOption({ u"o"_s, u"output"_s }, tr("Write generated data to <file>."), u"file"_s); @@ -57,12 +60,17 @@ int main(int argc, char *argv[]) parser.addOption(inputFormatOption); parser.addOption(filterOption); parser.addOption(baseDirOption); + parser.addOption(noCheckPathsOption); parser.addOption(outputOption); parser.addOption(verboseOption); parser.addOption(silentOption); parser.process(a.arguments()); + using Scanner::Checks, Scanner::Check; + Checks checks = Check::All; + checks.setFlag(Check::Paths, !parser.isSet(noCheckPathsOption)); + LogLevel logLevel = NormalLog; if (parser.isSet(verboseOption) && parser.isSet(silentOption)) { std::cerr << qPrintable(tr("--verbose and --silent cannot be set simultaneously.")) << std::endl; @@ -99,12 +107,12 @@ int main(int argc, char *argv[]) if (logLevel == VerboseLog) std::cerr << qPrintable(tr("Recursively scanning %1 for attribution files...").arg( QDir::toNativeSeparators(path))) << std::endl; - std::optional<QList<Package>> p = Scanner::scanDirectory(path, formats, logLevel); + std::optional<QList<Package>> p = Scanner::scanDirectory(path, formats, checks, logLevel); if (!p) return 1; packages = *p; } else if (pathInfo.isFile()) { - std::optional<QList<Package>> p = Scanner::readFile(path, logLevel); + std::optional<QList<Package>> p = Scanner::readFile(path, checks, logLevel); if (!p) return 1; packages = *p; diff --git a/src/qtattributionsscanner/scanner.cpp b/src/qtattributionsscanner/scanner.cpp index 897954e69..460e21a7f 100644 --- a/src/qtattributionsscanner/scanner.cpp +++ b/src/qtattributionsscanner/scanner.cpp @@ -24,7 +24,7 @@ static void missingPropertyWarning(const QString &filePath, const QString &prope QDir::toNativeSeparators(filePath), property)) << std::endl; } -static bool validatePackage(Package &p, const QString &filePath, LogLevel logLevel) +static bool validatePackage(Package &p, const QString &filePath, Checks checks, LogLevel logLevel) { bool validPackage = true; @@ -82,6 +82,9 @@ static bool validatePackage(Package &p, const QString &filePath, LogLevel logLev } } + if (!(checks & Check::Paths)) + return validPackage; + const QDir dir = p.path; if (!dir.exists()) { std::cerr << qPrintable( @@ -197,7 +200,7 @@ static bool autoDetectLicenseFiles(Package &p) // Transforms a JSON object into a Package object static std::optional<Package> readPackage(const QJsonObject &object, const QString &filePath, - LogLevel logLevel) + Checks checks, LogLevel logLevel) { Package p; bool validPackage = true; @@ -338,7 +341,7 @@ static std::optional<Package> readPackage(const QJsonObject &object, const QStri if (p.licenseFiles.isEmpty() && !autoDetectLicenseFiles(p)) return std::nullopt; - if (!validatePackage(p, filePath, logLevel) || !validPackage) + if (!validatePackage(p, filePath, checks, logLevel) || !validPackage) return std::nullopt; return p; @@ -415,12 +418,12 @@ static Package parseChromiumFile(QFile &file, const QString &filePath, LogLevel } // let's ignore warnings regarding Chromium files for now - Q_UNUSED(validatePackage(p, filePath, logLevel)); + Q_UNUSED(validatePackage(p, filePath, {}, logLevel)); return p; } -std::optional<QList<Package>> readFile(const QString &filePath, LogLevel logLevel) +std::optional<QList<Package>> readFile(const QString &filePath, Checks checks, LogLevel logLevel) { QList<Package> packages; bool errorsFound = false; @@ -450,7 +453,8 @@ std::optional<QList<Package>> readFile(const QString &filePath, LogLevel logLeve } if (document.isObject()) { - std::optional<Package> p = readPackage(document.object(), file.fileName(), logLevel); + std::optional<Package> p = + readPackage(document.object(), file.fileName(), checks, logLevel); if (p) { packages << *p; } else { @@ -462,7 +466,7 @@ std::optional<QList<Package>> readFile(const QString &filePath, LogLevel logLeve QJsonValue value = array.at(i); if (value.isObject()) { std::optional<Package> p = - readPackage(value.toObject(), file.fileName(), logLevel); + readPackage(value.toObject(), file.fileName(), checks, logLevel); if (p) { packages << *p; } else { @@ -503,7 +507,7 @@ std::optional<QList<Package>> readFile(const QString &filePath, LogLevel logLeve } std::optional<QList<Package>> scanDirectory(const QString &directory, InputFormats inputFormats, - LogLevel logLevel) + Checks checks, LogLevel logLevel) { QDir dir(directory); QList<Package> packages; @@ -524,13 +528,13 @@ std::optional<QList<Package>> scanDirectory(const QString &directory, InputForma for (const QFileInfo &info : entries) { if (info.isDir()) { std::optional<QList<Package>> ps = - scanDirectory(info.filePath(), inputFormats, logLevel); + scanDirectory(info.filePath(), inputFormats, checks, logLevel); if (!ps) errorsFound = true; else packages += *ps; } else { - std::optional p = readFile(info.filePath(), logLevel); + std::optional p = readFile(info.filePath(), checks, logLevel); if (!p) errorsFound = true; else diff --git a/src/qtattributionsscanner/scanner.h b/src/qtattributionsscanner/scanner.h index 77edaf30c..01c9a8b61 100644 --- a/src/qtattributionsscanner/scanner.h +++ b/src/qtattributionsscanner/scanner.h @@ -21,9 +21,13 @@ enum class InputFormat { Q_DECLARE_FLAGS(InputFormats, InputFormat) Q_DECLARE_OPERATORS_FOR_FLAGS(InputFormats) -std::optional<QList<Package>> readFile(const QString &filePath, LogLevel logLevel); +enum class Check { Paths = 0x1, All = Paths }; +Q_DECLARE_FLAGS(Checks, Check) +Q_DECLARE_OPERATORS_FOR_FLAGS(Checks) + +std::optional<QList<Package>> readFile(const QString &filePath, Checks checks, LogLevel logLevel); std::optional<QList<Package>> scanDirectory(const QString &directory, InputFormats inputFormats, - LogLevel logLevel); + Checks checks, LogLevel logLevel); } #endif // SCANNER_H |