@@ -57,17 +57,74 @@ def write_project_index(project, root)
5757 write_file ( "#{ root } /index.html" , render_liquid ( 'project_diff_report.html' , liquid_env ) )
5858 # generate array of violations in json
5959 write_file ( "#{ root } /project_data.js" , dump_violations_json ( project ) )
60+ # copy original pmd reports
61+ copy_file ( "#{ root } /base_pmd_report.xml" , project . report_diff . base_report . file )
62+ copy_file ( "#{ root } /patch_pmd_report.xml" , project . report_diff . patch_report . file )
63+ # render full pmd reports
64+ write_file ( "#{ root } /base_pmd_report.html" ,
65+ render_liquid ( 'project_pmd_report.html' , pmd_report_liquid_env ( project , BASE ) ) )
66+ write_file ( "#{ root } /base_data.js" , dump_violations_json ( project , BASE ) )
67+ write_file ( "#{ root } /patch_pmd_report.html" ,
68+ render_liquid ( 'project_pmd_report.html' , pmd_report_liquid_env ( project , PATCH ) ) )
69+ write_file ( "#{ root } /patch_data.js" , dump_violations_json ( project , PATCH ) )
6070 end
6171
62- def dump_violations_json ( project )
72+ def dump_violations_json ( project , branch = 'diff' )
73+ violations_by_file = if branch == BASE
74+ project . report_diff . base_report . violations_by_file . to_h
75+ elsif branch == PATCH
76+ project . report_diff . patch_report . violations_by_file . to_h
77+ else
78+ project . report_diff . violation_diffs_by_file
79+ end
80+
6381 h = {
6482 'source_link_base' => project . webview_url ,
6583 'source_link_template' => link_template ( project ) ,
66- **violations_to_hash ( project )
84+ **violations_to_hash ( project , violations_by_file , branch == 'diff' )
6785 }
6886
69- project_data = JSON . fast_generate ( h )
87+ project_data = JSON . fast_generate ( h , indent : ' ' , object_nl : " \n " , array_nl : " \n " )
7088 "let project = #{ project_data } "
7189 end
90+
91+ private
92+
93+ def copy_file ( target_file , source_file )
94+ if File . exist? source_file
95+ FileUtils . cp ( source_file , target_file )
96+ logger &.info "Written #{ target_file } "
97+ else
98+ logger &.warn "File #{ source_file } not found"
99+ end
100+ end
101+
102+ def pmd_report_liquid_env ( project , branch )
103+ report = if branch == BASE
104+ project . report_diff . base_report
105+ else
106+ project . report_diff . patch_report
107+ end
108+ {
109+ 'project_name' => project . name ,
110+ 'branch' => branch ,
111+ 'report' => report_to_h ( project , report )
112+ }
113+ end
114+
115+ def report_to_h ( project , report )
116+ {
117+ 'violation_counts' => report . violations_by_file . total_size ,
118+ 'error_counts' => report . errors_by_file . total_size ,
119+ 'configerror_counts' => report . configerrors_by_rule . values . flatten . length ,
120+
121+ 'execution_time' => PmdReportDetail . convert_seconds ( report . exec_time ) ,
122+ 'timestamp' => report . timestamp ,
123+
124+ 'rules' => report . rule_summaries ,
125+ 'errors' => report . errors_by_file . all_values . map { |e | error_to_hash ( e , project ) } ,
126+ 'configerrors' => report . configerrors_by_rule . values . flatten . map { |e | configerror_to_hash ( e ) }
127+ }
128+ end
72129 end
73130end
0 commit comments