in JetBrains.SbomUtils/src/JetBrains.SbomUtils.Console/Analyzer.cs [89:149]
public void PrintValidationResult(ValidationResult validationResult)
{
foreach (var missingFile in validationResult.FilesMissingInSbom)
{
string possibleCandidates;
if (missingFile.PossibleCandidates.Any())
possibleCandidates =
$"Files with the same name:\n{string.Join("\n", missingFile.PossibleCandidates.OrderBy(c => c.NormalizedRelativePath).Select(c => $"{c.NormalizedRelativePath} from package {c.Package.Name}"))}";
else
possibleCandidates = "No files with the same name in the SBOM";
_logger.LogWarning("File {file} is missing in SBOM. {candidates}", missingFile.FilePath, possibleCandidates);
}
int hashMismatches = 0;
int filesFromUnreferencedPackages = 0;
foreach (var fileVerificationResult in validationResult.FileVerificationResults)
{
if (fileVerificationResult.HashVerificationFailure != null)
{
hashMismatches++;
_logger.LogWarning("File {file} from package {package} has {count} hash mismatches: {mismatches}",
fileVerificationResult.HashVerificationFailure.FileInfo.File.FileName,
fileVerificationResult.HashVerificationFailure.FileInfo.Package.Name,
fileVerificationResult.HashVerificationFailure.HashMismatches.Count(),
string.Join(", ",
fileVerificationResult.HashVerificationFailure.HashMismatches.Select(m =>
$"{m.FaultedChecksum.Algorithm}")));
}
if (fileVerificationResult.FileFromUnreferencedPackage != null)
{
filesFromUnreferencedPackages++;
_logger.LogWarning("File {file} was found in the {package} which is not referenced by the root product",
fileVerificationResult.FileFromUnreferencedPackage.FileInfo.File.FileName,
fileVerificationResult.FileFromUnreferencedPackage.FileInfo.Package.Name);
}
}
if (validationResult.Success)
{
_logger.LogInformation(
"Validation of product successfully passed, {present} files were checked, {ignored} files were ignored",
validationResult.FilesChecked,
validationResult.IgnoredFiles.Length);
}
else
{
if (!validationResult.Success && !string.IsNullOrEmpty(validationResult.ErrorMessage))
_logger.LogWarning("Validation error occured: {error}", validationResult.ErrorMessage);
else
_logger.LogWarning(
"Validation of product failed: {missing} files are missing, {hashMismatches} files has hash mismatches, {unreferenced} files found in unreferenced packages, {total} files were checked, {passed} files passed validation, {ignored} files were ignored",
validationResult.FilesMissingInSbom.Length,
hashMismatches,
filesFromUnreferencedPackages,
validationResult.FilesChecked,
validationResult.FileVerificationResults.Count(f => f.Success),
validationResult.IgnoredFiles.Length);
}
}