(* * Copyright (c) 2017 - present Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. *) open! IStd let reportdiff ~current_report:current_report_fname ~previous_report:previous_report_fname = let load_report filename_opt : Jsonbug_t.report = let empty_report = [] in Option.value_map ~f:(fun filename -> Jsonbug_j.report_of_string (In_channel.read_all filename)) ~default:empty_report filename_opt in let current_report = load_report current_report_fname in let previous_report = load_report previous_report_fname in let diff = let unfiltered_diff = Differential.of_reports ~current_report ~previous_report in if Config.filtering then let file_renamings = match Config.file_renamings with | Some f -> DifferentialFilters.FileRenamings.from_json_file f | None -> DifferentialFilters.FileRenamings.empty in let interesting_paths = Option.map ~f:(fun fname -> List.map ~f:(SourceFile.create ~warn_on_error:false) (In_channel.read_lines fname)) Config.differential_filter_files in DifferentialFilters.do_filter unfiltered_diff file_renamings ~skip_duplicated_types:Config.skip_duplicated_types ~interesting_paths else unfiltered_diff in let out_path = Config.results_dir ^/ "differential" in Unix.mkdir_p out_path ; Differential.to_files diff out_path