spotbugsComparison.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python3
  2. # SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
  3. # SPDX-FileCopyrightText: 2017 Tobias Kaminsky <tobias@kaminsky.me>
  4. # SPDX-License-Identifier: GPL-3.0-or-later
  5. import argparse
  6. import defusedxml.ElementTree as ET
  7. import spotbugsSummary
  8. def print_comparison(old: dict, new: dict, link_base: str, link_new: str):
  9. all_keys = sorted(set(list(old.keys()) + list(new.keys())))
  10. output = "<table><tr><th>Category</th>"
  11. old_header = f"<a href='{link_base}'>Base</a>" if link_base is not None else "Base"
  12. output += f"<th>{old_header}</th>"
  13. new_header = f"<a href='{link_new}'>New</a>" if link_new is not None else "New"
  14. output += f"<th>{new_header}</th>"
  15. output += "</tr>"
  16. for category in all_keys:
  17. category_count_old = old[category] if category in old else 0
  18. category_count_new = new[category] if category in new else 0
  19. new_str = f"<b>{category_count_new}</b>" if category_count_new != category_count_old else str(category_count_new)
  20. output += "<tr>"
  21. output += f"<td>{category}</td>"
  22. output += f"<td>{category_count_old}</td>"
  23. output += f"<td>{new_str}</td>"
  24. output += "</tr>"
  25. output += "<tr>"
  26. output += "<td><b>Total</b></td>"
  27. output += f"<td><b>{sum(old.values())}</b></td>"
  28. output += f"<td><b>{sum(new.values())}</b></td>"
  29. output += "</tr>"
  30. output += "</table>"
  31. print(output)
  32. if __name__ == "__main__":
  33. parser = argparse.ArgumentParser()
  34. parser.add_argument("base_file", help="base file for comparison")
  35. parser.add_argument("new_file", help="new file for comparison")
  36. parser.add_argument("--link-base", help="http link to base html report")
  37. parser.add_argument("--link-new", help="http link to new html report")
  38. args = parser.parse_args()
  39. base_tree = ET.parse(args.base_file)
  40. base_summary = spotbugsSummary.get_counts(base_tree)
  41. new_tree = ET.parse(args.new_file)
  42. new_summary = spotbugsSummary.get_counts(new_tree)
  43. print_comparison(base_summary, new_summary, args.link_base, args.link_new)