@@ -63,35 +63,6 @@ def __init__(self,
6363 self .registered_metrics : list [MetricInfo ] = []
6464 self ._analyzed_commits : list [str ] = []
6565
66- # def add_language(self, extension: str, tree_sitter_language: object):
67- # miner = GenericMiner
68- # miner.extension = extension
69- # miner.tree_sitter_language = tree_sitter_language
70- # self._repo.add_miner(miner)
71-
72- def run (self ) -> GitEvoResult | list [GitEvoResult ]:
73- print (f'Running GitEvo...' )
74- results = []
75- for git_repo in self .git_repos :
76- print ('Processing repository:' , git_repo )
77- result = self ._compute_metrics (git_repo )
78- results .append (result )
79- self ._export_html (result )
80- self ._export_csv (result )
81- return results
82-
83- def _export_html (self , result : GitEvoResult ):
84- if not self .export_html_report :
85- return
86- path = HtmlReport (result ).export_html ()
87- print (self ._write_msg ('HTML' , path ))
88-
89- def _export_csv (self , result : GitEvoResult ):
90- if not self .export_csv_report :
91- return
92- path = TableReport (result ).export_csv ()
93- print (self ._write_msg ('CSV' , path ))
94-
9566 # metric decorator
9667 def metric (self , name : str = None ,
9768 * ,
@@ -115,31 +86,55 @@ def decorator(func):
11586 return func
11687
11788 return decorator
89+
90+ # def add_language(self, extension: str, tree_sitter_language: object):
91+ # miner = GenericMiner
92+ # miner.extension = extension
93+ # miner.tree_sitter_language = tree_sitter_language
94+ # self._repo.add_miner(miner)
11895
119- def _compute_metrics (self , git_repository : str ) -> GitEvoResult :
96+ def run (self ) -> GitEvoResult | list [GitEvoResult ]:
97+ print (f'Running GitEvo...' )
98+ results = []
99+ for git_repo in self .git_repos :
100+ print ('Processing repository:' , git_repo )
101+ try :
102+ result = self ._process_repository (git_repo )
103+ results .append (result )
104+ except (FileExtensionNotFound , BadReturnType , BadDateUnit , BadYearRange , BadLOCAggregate , BadVersionChart ) as e :
105+ raise
106+ except Exception as e :
107+ print (f'Error processing { git_repo } : { e } ' )
108+ continue
109+ return results
110+
111+ def _process_repository (self , git_repo : str ) -> GitEvoResult :
112+ result = self ._compute_metrics (git_repo )
113+ self ._export_html (result )
114+ self ._export_csv (result )
115+ return result
116+
117+ def _compute_metrics (self , git_repo : str ) -> GitEvoResult :
120118
121- tree_miner_repo = TreeMinerRepo (git_repository )
119+ mine_repo = TreeMinerRepo (git_repo )
122120 gitevo_result = GitEvoResult (self .report_title , self .report_filename , self .date_unit , self .registered_metrics )
123121
124- # Sanity checks on registered_metrics
125122 for metric_info in self .registered_metrics :
126-
123+ # Sanity checks on registered_metrics
127124 self ._check_registered_metrics (metric_info )
128-
129125 if metric_info .file_extension is None :
130126 metric_info .file_extension = self .global_file_extension
131-
132127 # Real names of the categorical metrics are known only at runtime, thus, now register None
133128 gitevo_result .add_metric_group (metric_info .name_or_none_for_categorical , metric_info .group )
134-
135- project_name = None
136- project_commits = set ()
137129
138130 project_result = ProjectResult ()
139131 gitevo_result .project_result = project_result
140132
141- for commit in tree_miner_repo .commits :
142-
133+ project_name = None
134+ project_commits = set ()
135+
136+ for commit in mine_repo .commits :
137+
143138 if project_name is None :
144139 project_name = commit .project_name
145140 project_result .name = project_name
@@ -261,6 +256,18 @@ def _write_msg(self, format: str, path: str) -> str:
261256 def _all_file_extensions (self ) -> set [str ]:
262257 return set ([metric_info .file_extension for metric_info in self .registered_metrics ])
263258
259+ def _export_html (self , result : GitEvoResult ):
260+ if not self .export_html_report :
261+ return
262+ path = HtmlReport (result ).export_html ()
263+ print (self ._write_msg ('HTML' , path ))
264+
265+ def _export_csv (self , result : GitEvoResult ):
266+ if not self .export_csv_report :
267+ return
268+ path = TableReport (result ).export_csv ()
269+ print (self ._write_msg ('CSV' , path ))
270+
264271class ParsedFile :
265272
266273 def __init__ (self , name : str , path : str , nodes : list [Node ], loc : int ):
0 commit comments