Exit_status.show
[hiphop-php.git] / hphp / hack / src / hh_merge_deps.ml
blob2c8c2a28c68fc3eda7e34c9e16ba81c97a285b56
1 (*
2 * Copyright (c) 2018, Facebook, Inc.
3 * All rights reserved.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree.
8 *)
10 let sharedmem_config =
11 let gig = 1024 * 1024 * 1024 in
13 SharedMem.global_size = gig;
14 heap_size = 40 * gig;
15 dep_table_pow = 28;
16 (* 1 << 28 *)
17 hash_table_pow = 26;
18 (* 1 << 26 *)
19 shm_dirs = [GlobalConfig.shm_dir; GlobalConfig.tmp_dir];
20 shm_min_avail = gig / 2;
21 (* Half a gig by default *)
22 log_level = 0;
23 sample_rate = 0.0;
26 let merge_worker ((filename : string), (ignore_hh_version : bool)) : unit =
27 try
28 Hh_logger.log "Merging '%s'" filename;
29 let (num_rows : int) =
30 SharedMem.load_dep_table_blob filename ignore_hh_version
32 Hh_logger.log "Rows read: %d" num_rows
33 with e ->
34 let stack = Printexc.get_backtrace () in
35 Hh_logger.exc ~prefix:(Printf.sprintf "Error in '%s'" filename) ~stack e
37 let merge_input
38 ~(filenames : string list) ~(ignore_hh_version : bool) ~(db_name : string) :
39 unit =
40 let (input : (string * bool) list) =
41 List.map (fun filename -> (filename, ignore_hh_version)) filenames
43 let () = List.iter merge_worker input in
44 let (edges_added : int) =
45 SharedMem.save_dep_table_sqlite db_name Build_id.build_revision false
47 Hh_logger.log "Edges added: %d" edges_added
49 let () =
50 let (_handle : SharedMem.handle) =
51 SharedMem.init ~num_workers:0 sharedmem_config
53 let (filenames : string list ref) = ref [] in
54 let (ignore_hh_version : bool ref) = ref true in
55 let (db_name : string ref) = ref "" in
56 let options =
57 Arg.align
59 ( "--ignore-hh-version",
60 Arg.Bool (fun b -> ignore_hh_version := b),
61 " Indicates whether to ignore the Hack server version" );
62 ( "--output-filename",
63 Arg.String (fun s -> db_name := s),
64 " The name of the SQLite file to save the merged dependency table into"
68 let usage =
69 "Usage: "
70 ^ Sys.executable_name
71 ^ " [dep_table_fragment_1 ... dep_table_fragment_N]"
73 Arg.parse options (fun filename -> filenames := filename :: !filenames) usage;
75 merge_input
76 ~filenames:!filenames
77 ~ignore_hh_version:!ignore_hh_version
78 ~db_name:!db_name