summaryrefslogtreecommitdiffstats
path: root/repo_logging.py
diff options
context:
space:
mode:
Diffstat (limited to 'repo_logging.py')
-rw-r--r--repo_logging.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/repo_logging.py b/repo_logging.py
index 7d050555..58625351 100644
--- a/repo_logging.py
+++ b/repo_logging.py
@@ -15,12 +15,13 @@
15"""Logic for printing user-friendly logs in repo.""" 15"""Logic for printing user-friendly logs in repo."""
16 16
17import logging 17import logging
18from typing import List
19 18
20from color import Coloring 19from color import Coloring
20from error import RepoExitError
21 21
22 22
23SEPARATOR = "=" * 80 23SEPARATOR = "=" * 80
24MAX_PRINT_ERRORS = 5
24 25
25 26
26class _ConfigMock: 27class _ConfigMock:
@@ -70,8 +71,22 @@ class RepoLogger(logging.Logger):
70 handler.setFormatter(_LogColoringFormatter(config)) 71 handler.setFormatter(_LogColoringFormatter(config))
71 self.addHandler(handler) 72 self.addHandler(handler)
72 73
73 def log_aggregated_errors(self, errors: List[Exception]): 74 def log_aggregated_errors(self, err: RepoExitError):
74 """Print all aggregated logs.""" 75 """Print all aggregated logs."""
75 super().error(SEPARATOR) 76 self.error(SEPARATOR)
76 super().error("Repo command failed due to following errors:") 77
77 super().error("\n".join(str(e) for e in errors)) 78 if not err.aggregate_errors:
79 self.error("Repo command failed: %s", type(err).__name__)
80 return
81
82 self.error(
83 "Repo command failed due to the following `%s` errors:",
84 type(err).__name__,
85 )
86 self.error(
87 "\n".join(str(e) for e in err.aggregate_errors[:MAX_PRINT_ERRORS])
88 )
89
90 diff = len(err.aggregate_errors) - MAX_PRINT_ERRORS
91 if diff:
92 self.error("+%d additional errors...", diff)