2 * Copyright (c) 2018, Facebook, Inc.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree.
10 let sharedmem_config =
11 let gig = 1024 * 1024 * 1024 in
13 SharedMem.global_size
= gig;
19 shm_dirs
= [GlobalConfig.shm_dir
; GlobalConfig.tmp_dir
];
20 shm_min_avail
= gig / 2;
21 (* Half a gig by default *)
26 let merge_worker ((filename
: string), (ignore_hh_version
: bool)) : unit =
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
34 let stack = Printexc.get_backtrace
() in
35 Hh_logger.exc ~prefix
:(Printf.sprintf
"Error in '%s'" filename
) ~
stack e
38 ~
(filenames
: string list
) ~
(ignore_hh_version
: bool) ~
(db_name
: string) :
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
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
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"
71 ^
" [dep_table_fragment_1 ... dep_table_fragment_N]"
73 Arg.parse
options (fun filename
-> filenames
:= filename
:: !filenames
) usage;
77 ~ignore_hh_version
:!ignore_hh_version