return r;
}
+static int pakfire_linter_dump_results(
+ struct pakfire_linter* linter, struct pakfire_file* file, const char* prefix) {
+ struct pakfire_linter_result* result = NULL;
+
+ TAILQ_FOREACH(result, &linter->results, nodes) {
+ // Also process if the file matches
+ if (result->file == file) {
+ switch (result->priority) {
+ case PAKFIRE_LINTER_INFO:
+ INFO(linter->ctx, "%s%s\n", prefix, result->comment);
+ break;
+
+ case PAKFIRE_LINTER_WARNING:
+ WARN(linter->ctx, "%s%s\n", prefix, result->comment);
+ break;
+
+ case PAKFIRE_LINTER_ERROR:
+ ERROR(linter->ctx, "%s%s\n", prefix, result->comment);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int __pakfire_linter_dump_file(
+ struct pakfire_ctx* ctx, struct pakfire_file* file, void* data) {
+ struct pakfire_linter* linter = data;
+
+ // Show information about the file
+ char* dump = pakfire_file_dump(file, PAKFIRE_FILE_DUMP_FULL);
+ if (!dump)
+ return -errno;
+
+ // Show the file information
+ if (linter->stats.errors)
+ ERROR(linter->ctx, " %s:\n", dump);
+ else if (linter->stats.warnings)
+ WARN(linter->ctx, " %s:\n", dump);
+ else
+ INFO(linter->ctx, " %s:\n", dump);
+
+ // Show all results
+ return pakfire_linter_dump_results(linter, file, " ");
+}
+
+/*
+ Dumps the result of the linter...
+*/
+static int pakfire_linter_dump(struct pakfire_linter* linter) {
+ int r;
+
+ // Fetch nevra
+ const char* nevra = pakfire_package_get_string(linter->pkg, PAKFIRE_PKG_NEVRA);
+
+ // Show a simply OK message if there have been no problems
+ if (!linter->stats.results) {
+ INFO(linter->ctx, "%s: OK\n", nevra);
+
+ return 0;
+
+ // Show an error header if we have errors
+ } else if (linter->stats.errors) {
+ ERROR(linter->ctx, "%s failed linting:\n", nevra);
+
+ // Show a warning header if we have warnings
+ } else if (linter->stats.warnings) {
+ WARN(linter->ctx, "%s has warnings:\n", nevra);
+
+ // As a last resort we only show a simple header
+ } else {
+ INFO(linter->ctx, "%s:\n", nevra);
+ }
+
+ // Show everything about the package
+ r = pakfire_linter_dump_results(linter, NULL, " ");
+ if (r < 0)
+ return r;
+
+ // Show package results
+ r = pakfire_filelist_walk(linter->filelist, __pakfire_linter_dump_file, linter, 0);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
int pakfire_linter_lint(struct pakfire_linter* linter) {
int r;
if (r < 0)
return r;
+ // Dump the result
+ r = pakfire_linter_dump(linter);
+ if (r < 0)
+ return r;
+
return 0;
}