Summary: As per title. Eases next diffs by making Summary the only source of truth for how spec files are accessed/stored. Reviewed By: ezgicicek Differential Revision: D22794742 fbshipit-source-id: 0ee20ec1cmaster
parent
0475e79d0e
commit
fe617afa49
@ -1,71 +0,0 @@
|
|||||||
(*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*)
|
|
||||||
|
|
||||||
open! IStd
|
|
||||||
module F = Format
|
|
||||||
module L = Logging
|
|
||||||
module CLOpt = CommandLineOption
|
|
||||||
|
|
||||||
(** return the list of the .specs files in the results dir *)
|
|
||||||
let load_specfiles () =
|
|
||||||
let is_specs_file fname = Filename.check_suffix fname Config.specs_files_suffix in
|
|
||||||
let do_file acc path = if is_specs_file path then path :: acc else acc in
|
|
||||||
let result_specs_dir = DB.filename_to_string DB.Results_dir.specs_dir in
|
|
||||||
Utils.directory_fold do_file [] result_specs_dir
|
|
||||||
|
|
||||||
|
|
||||||
let print_usage_exit err_s =
|
|
||||||
L.user_error "Load Error: %s@\n@." err_s ;
|
|
||||||
Config.print_usage_exit ()
|
|
||||||
|
|
||||||
|
|
||||||
let spec_files_from_cmdline () =
|
|
||||||
if CLOpt.is_originator then (
|
|
||||||
(* Find spec files specified by command-line arguments. Not run at init time since the specs
|
|
||||||
files may be generated between init and report time. *)
|
|
||||||
List.iter
|
|
||||||
~f:(fun arg ->
|
|
||||||
if (not (Filename.check_suffix arg Config.specs_files_suffix)) && not (String.equal arg ".")
|
|
||||||
then print_usage_exit ("file " ^ arg ^ ": arguments must be .specs files") )
|
|
||||||
Config.anon_args ;
|
|
||||||
if Config.test_filtering then (
|
|
||||||
Inferconfig.test () ;
|
|
||||||
L.exit 0 ) ;
|
|
||||||
if List.is_empty Config.anon_args then load_specfiles () else List.rev Config.anon_args )
|
|
||||||
else load_specfiles ()
|
|
||||||
|
|
||||||
|
|
||||||
(** Create an iterator which loads spec files one at a time *)
|
|
||||||
let summary_iterator spec_files =
|
|
||||||
let sorted_spec_files = List.sort ~compare:String.compare (spec_files ()) in
|
|
||||||
let do_spec f fname =
|
|
||||||
match Summary.OnDisk.load_from_file (DB.filename_from_string fname) with
|
|
||||||
| None ->
|
|
||||||
L.(die UserError) "Error: cannot open file %s@." fname
|
|
||||||
| Some summary ->
|
|
||||||
f summary
|
|
||||||
in
|
|
||||||
let iterate f = List.iter ~f:(do_spec f) sorted_spec_files in
|
|
||||||
iterate
|
|
||||||
|
|
||||||
|
|
||||||
let iter_from_config ~f = summary_iterator spec_files_from_cmdline f
|
|
||||||
|
|
||||||
let iter ~f = summary_iterator load_specfiles f
|
|
||||||
|
|
||||||
let delete pname =
|
|
||||||
let filename = Summary.OnDisk.specs_filename_of_procname pname |> DB.filename_to_string in
|
|
||||||
(* Unix_error is raised if the file isn't present so do nothing in this case *)
|
|
||||||
(try Unix.unlink filename with Unix.Unix_error _ -> ()) ;
|
|
||||||
Ondemand.LocalCache.remove pname ;
|
|
||||||
Summary.OnDisk.remove_from_cache pname
|
|
||||||
|
|
||||||
|
|
||||||
let pp_from_config fmt =
|
|
||||||
iter_from_config ~f:(fun summary ->
|
|
||||||
F.fprintf fmt "Procedure: %a@\n%a@." Procname.pp (Summary.get_proc_name summary)
|
|
||||||
Summary.pp_text summary )
|
|
@ -1,21 +0,0 @@
|
|||||||
(*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*)
|
|
||||||
|
|
||||||
open! IStd
|
|
||||||
|
|
||||||
val iter : f:(Summary.t -> unit) -> unit
|
|
||||||
(** Iterates over all summaries from the .specs files *)
|
|
||||||
|
|
||||||
val iter_from_config : f:(Summary.t -> unit) -> unit
|
|
||||||
(** Iterates over all sumaries from the .specs files unless a list of specs files has been passed on
|
|
||||||
the command line *)
|
|
||||||
|
|
||||||
val delete : Procname.t -> unit
|
|
||||||
(** Delete the .specs file associated with a summary and remove the summary from the caches in
|
|
||||||
Summary.ml and ondemand.ml *)
|
|
||||||
|
|
||||||
val pp_from_config : Format.formatter -> unit
|
|
Loading…
Reference in new issue