Skip to content

Commit e4011b0

Browse files
committed
Added "Identifier" column to results table. Improved severity flag handling and results handling.
1 parent 6262176 commit e4011b0

1 file changed

Lines changed: 34 additions & 10 deletions

File tree

cloudsmith_cli/cli/commands/vulnerabilities.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ def _print_repo_summary_table(package_rows, severity_filter=None):
186186
)
187187

188188
table.add_column("Package", justify="left", style="cyan", no_wrap=True)
189+
table.add_column("Identifier", justify="left", style="dim", no_wrap=True)
189190
for display_name, sev_key in severity_keys.items():
190191
color = SEVERITY_COLORS.get(sev_key, "white")
191192
table.add_column(display_name, justify="center", header_style=f"bold {color}")
@@ -194,8 +195,8 @@ def _print_repo_summary_table(package_rows, severity_filter=None):
194195
grand_total = 0
195196
num_sev_cols = len(severity_keys)
196197

197-
for label, counts, status in package_rows:
198-
cells = [label]
198+
for slug_perm, label, counts, status in package_rows:
199+
cells = [label, slug_perm]
199200
if status == "no_scan":
200201
cells.append("[dim italic]Security scan not supported[/dim italic]")
201202
cells.extend([""] * (num_sev_cols - 1))
@@ -297,11 +298,14 @@ def _collect_repo_scan_data(opts, owner, repo, slugs, severity_filter, fixable):
297298
progress.advance(task)
298299

299300
# Sort: vulnerable first (by total desc), then safe, then no_scan
301+
# When filters are active, only return packages with matching vulnerabilities
302+
filters_active = severity_filter or fixable is not None
300303
vulnerable = [r for r in rows if r[3] == "vulnerable"]
301304
vulnerable.sort(key=lambda r: sum(r[2].values()), reverse=True)
305+
if filters_active:
306+
return vulnerable
302307
safe = [r for r in rows if r[3] == "no_issues_found"]
303308
no_scan = [r for r in rows if r[3] == "no_scan"]
304-
305309
return vulnerable + safe + no_scan
306310

307311

@@ -397,12 +401,29 @@ def vulnerabilities(
397401
)
398402

399403
if not repo_summary_rows:
400-
click.secho(
401-
f"No scan data could be retrieved for any packages "
402-
f"in '{owner}/{repo}'.",
403-
fg="yellow",
404-
err=use_stderr,
405-
)
404+
if severity_filter or fixable is not None:
405+
filter_desc = severity_filter.upper() if severity_filter else None
406+
if fixable is True:
407+
filter_desc = (
408+
f"{filter_desc}, fixable" if filter_desc else "fixable"
409+
)
410+
elif fixable is False:
411+
filter_desc = (
412+
f"{filter_desc}, non-fixable" if filter_desc else "non-fixable"
413+
)
414+
click.secho(
415+
f"No packages found matching filter(s) [{filter_desc}] "
416+
f"in '{owner}/{repo}'.",
417+
fg="yellow",
418+
err=use_stderr,
419+
)
420+
else:
421+
click.secho(
422+
f"No scan data could be retrieved for any packages "
423+
f"in '{owner}/{repo}'.",
424+
fg="yellow",
425+
err=use_stderr,
426+
)
406427
return
407428

408429
json_output = {
@@ -424,7 +445,10 @@ def vulnerabilities(
424445

425446
# Table only needs label, counts, and status
426447
_print_repo_summary_table(
427-
[(label, counts, status) for _, label, counts, status in repo_summary_rows],
448+
[
449+
(slug_perm, label, counts, status)
450+
for slug_perm, label, counts, status in repo_summary_rows
451+
],
428452
severity_filter,
429453
)
430454
return

0 commit comments

Comments
 (0)