Skip to content

Commit 063d6de

Browse files
committed
use queue and more meaningful logs
1 parent a60eb81 commit 063d6de

File tree

6 files changed

+92
-68
lines changed

6 files changed

+92
-68
lines changed

jscomp/bsb/bsb_build_util.ml

+11-9
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ let rec walk_all_deps_aux
182182
(paths : string list)
183183
~(top : top)
184184
(dir : string)
185-
(cb : package_context -> unit) =
185+
(queue : _ Queue.t) =
186186
let bsconfig_json = dir // Literals.bsconfig_json in
187187
match Ext_json_parse.parse_json_from_file bsconfig_json with
188188
| Obj {map; loc} ->
@@ -199,15 +199,15 @@ let rec walk_all_deps_aux
199199
str
200200
| Some _
201201
| None -> Bsb_exception.errorf ~loc "package name missing in %s/bsconfig.json" dir
202-
in
203-
let package_stacks = cur_package_name :: paths in
204-
Bsb_log.info "@{<info>Package stack:@} %a @." pp_packages_rev
205-
package_stacks ;
202+
in
206203
if Ext_list.mem_string paths cur_package_name then
207204
begin
208205
Bsb_log.error "@{<error>Cyclic dependencies in package stack@}@.";
209206
exit 2
210207
end;
208+
let package_stacks = cur_package_name :: paths in
209+
Bsb_log.info "@{<info>Package stack:@} %a @." pp_packages_rev
210+
package_stacks ;
211211
if Hash_string.mem visited cur_package_name then
212212
Bsb_log.info
213213
"@{<info>Visited before@} %s@." cur_package_name
@@ -223,7 +223,7 @@ let rec walk_all_deps_aux
223223
let package_dir =
224224
Bsb_pkg.resolve_bs_package ~cwd:dir
225225
(Bsb_pkg_types.string_as_package new_package) in
226-
walk_all_deps_aux visited package_stacks ~top:(Expect_name new_package) package_dir cb ;
226+
walk_all_deps_aux visited package_stacks ~top:(Expect_name new_package) package_dir queue ;
227227
| _ ->
228228
Bsb_exception.errorf ~loc
229229
"%s expect an array"
@@ -233,14 +233,16 @@ let rec walk_all_deps_aux
233233
begin
234234
explore_deps Bsb_build_schemas.bs_dependencies;
235235
if top = Expect_none then explore_deps Bsb_build_schemas.bs_dev_dependencies;
236-
cb {top ; proj_dir = dir};
236+
Queue.add {top ; proj_dir = dir} queue;
237237
Hash_string.add visited cur_package_name dir;
238238
end
239239
| _ -> ()
240240
| exception _ ->
241241
Bsb_exception.invalid_json bsconfig_json
242242

243243

244-
let walk_all_deps dir cb =
244+
let walk_all_deps dir : package_context Queue.t =
245245
let visited = Hash_string.create 0 in
246-
walk_all_deps_aux visited [] ~top:Expect_none dir cb
246+
let cb = Queue.create () in
247+
walk_all_deps_aux visited [] ~top:Expect_none dir cb ;
248+
cb

jscomp/bsb/bsb_build_util.mli

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,5 +109,5 @@ type package_context = {
109109

110110
val walk_all_deps :
111111
string ->
112-
(package_context -> unit) ->
113-
unit
112+
package_context Queue.t
113+

jscomp/bsb/bsb_clean.ml

+4-2
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@ let clean_bs_garbage proj_dir =
5555

5656

5757
let clean_bs_deps proj_dir =
58-
Bsb_build_util.walk_all_deps proj_dir (fun pkg_cxt ->
58+
let queue =
59+
Bsb_build_util.walk_all_deps proj_dir in
60+
Queue.iter (fun (pkg_cxt : Bsb_build_util.package_context )->
5961
(* whether top or not always do the cleaning *)
6062
clean_bs_garbage pkg_cxt.proj_dir
61-
)
63+
) queue
6264

6365
let clean_self proj_dir =
6466
clean_bs_garbage proj_dir

jscomp/bsb/bsb_world.ml

+28-20
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,42 @@
2626
let (//) = Ext_path.combine
2727

2828

29+
let vendor_ninja = Bsb_global_paths.vendor_ninja
2930

30-
31-
let build_bs_deps cwd (deps : Bsb_package_specs.t) (ninja_args : string array) =
32-
33-
let vendor_ninja = Bsb_global_paths.vendor_ninja in
31+
let make_world_deps cwd (config : Bsb_config_types.t option) (ninja_args : string array) =
32+
let deps =
33+
match config with
34+
| None ->
35+
(* When this running bsb does not read bsconfig.json,
36+
we will read such json file to know which [package-specs]
37+
it wants
38+
*)
39+
Bsb_config_parse.package_specs_from_bsconfig ()
40+
| Some config -> config.package_specs in
3441
let args =
3542
if Ext_array.is_empty ninja_args then [|vendor_ninja|]
3643
else Array.append [|vendor_ninja|] ninja_args
3744
in
3845
let lib_artifacts_dir = Bsb_config.lib_bs in
39-
Bsb_build_util.walk_all_deps cwd (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
46+
let queue =
47+
Bsb_build_util.walk_all_deps cwd in
48+
(* let oc = open_out_bin ".deps.log" in
49+
queue |> Queue.iter (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
50+
match top with
51+
| Expect_none -> ()
52+
| Expect_name s ->
53+
output_string oc s ;
54+
output_string oc " : ";
55+
output_string oc proj_dir;
56+
output_string oc "\n"
57+
);
58+
close_out oc ; *)
59+
queue |> Queue.iter (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
4060
match top with
4161
| Expect_none -> ()
42-
| Expect_name _ ->
62+
| Expect_name s ->
4363
begin
64+
output_string stdout ("Start building dependency " ^ s ^ "\n");
4465
let lib_bs_dir = proj_dir // lib_artifacts_dir in
4566
Bsb_build_util.mkp lib_bs_dir;
4667
let _config : _ option =
@@ -76,19 +97,6 @@ let build_bs_deps cwd (deps : Bsb_package_specs.t) (ninja_args : string array) =
7697
if eid <> 0 then
7798
Bsb_unix.command_fatal_error install_command eid;
7899
Bsb_log.info "@{<info>Installation finished@}@.";
100+
output_string stdout ("Finish building dependency " ^ s ^ "\n")
79101
end
80102
)
81-
82-
83-
let make_world_deps cwd (config : Bsb_config_types.t option) (ninja_args : string array) =
84-
Bsb_log.info "Making the dependency world!@.";
85-
let deps =
86-
match config with
87-
| None ->
88-
(* When this running bsb does not read bsconfig.json,
89-
we will read such json file to know which [package-specs]
90-
it wants
91-
*)
92-
Bsb_config_parse.package_specs_from_bsconfig ()
93-
| Some config -> config.package_specs in
94-
build_bs_deps cwd deps ninja_args

jscomp/main/bsb_main.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ let () =
236236
~forced:!force_regenerate) in
237237
(* [-make-world] should never be combined with [-package-specs] *)
238238
if !make_world then
239-
Bsb_world.make_world_deps Bsb_global_paths.cwd ( config_opt) ninja_args;
239+
Bsb_world.make_world_deps Bsb_global_paths.cwd config_opt ninja_args;
240240
if !do_install then
241241
install_target ();
242242
if !watch_mode then program_exit ()

lib/4.06.1/bsb.ml

+46-34
Original file line numberDiff line numberDiff line change
@@ -9833,8 +9833,8 @@ type package_context = {
98339833

98349834
val walk_all_deps :
98359835
string ->
9836-
(package_context -> unit) ->
9837-
unit
9836+
package_context Queue.t
9837+
98389838

98399839
end = struct
98409840
#1 "bsb_build_util.ml"
@@ -10022,7 +10022,7 @@ let rec walk_all_deps_aux
1002210022
(paths : string list)
1002310023
~(top : top)
1002410024
(dir : string)
10025-
(cb : package_context -> unit) =
10025+
(queue : _ Queue.t) =
1002610026
let bsconfig_json = dir // Literals.bsconfig_json in
1002710027
match Ext_json_parse.parse_json_from_file bsconfig_json with
1002810028
| Obj {map; loc} ->
@@ -10039,15 +10039,15 @@ let rec walk_all_deps_aux
1003910039
str
1004010040
| Some _
1004110041
| None -> Bsb_exception.errorf ~loc "package name missing in %s/bsconfig.json" dir
10042-
in
10043-
let package_stacks = cur_package_name :: paths in
10044-
Bsb_log.info "@{<info>Package stack:@} %a @." pp_packages_rev
10045-
package_stacks ;
10042+
in
1004610043
if Ext_list.mem_string paths cur_package_name then
1004710044
begin
1004810045
Bsb_log.error "@{<error>Cyclic dependencies in package stack@}@.";
1004910046
exit 2
1005010047
end;
10048+
let package_stacks = cur_package_name :: paths in
10049+
Bsb_log.info "@{<info>Package stack:@} %a @." pp_packages_rev
10050+
package_stacks ;
1005110051
if Hash_string.mem visited cur_package_name then
1005210052
Bsb_log.info
1005310053
"@{<info>Visited before@} %s@." cur_package_name
@@ -10063,7 +10063,7 @@ let rec walk_all_deps_aux
1006310063
let package_dir =
1006410064
Bsb_pkg.resolve_bs_package ~cwd:dir
1006510065
(Bsb_pkg_types.string_as_package new_package) in
10066-
walk_all_deps_aux visited package_stacks ~top:(Expect_name new_package) package_dir cb ;
10066+
walk_all_deps_aux visited package_stacks ~top:(Expect_name new_package) package_dir queue ;
1006710067
| _ ->
1006810068
Bsb_exception.errorf ~loc
1006910069
"%s expect an array"
@@ -10073,17 +10073,19 @@ let rec walk_all_deps_aux
1007310073
begin
1007410074
explore_deps Bsb_build_schemas.bs_dependencies;
1007510075
if top = Expect_none then explore_deps Bsb_build_schemas.bs_dev_dependencies;
10076-
cb {top ; proj_dir = dir};
10076+
Queue.add {top ; proj_dir = dir} queue;
1007710077
Hash_string.add visited cur_package_name dir;
1007810078
end
1007910079
| _ -> ()
1008010080
| exception _ ->
1008110081
Bsb_exception.invalid_json bsconfig_json
1008210082

1008310083

10084-
let walk_all_deps dir cb =
10084+
let walk_all_deps dir : package_context Queue.t =
1008510085
let visited = Hash_string.create 0 in
10086-
walk_all_deps_aux visited [] ~top:Expect_none dir cb
10086+
let cb = Queue.create () in
10087+
walk_all_deps_aux visited [] ~top:Expect_none dir cb ;
10088+
cb
1008710089

1008810090
end
1008910091
module Bsb_global_paths : sig
@@ -11274,10 +11276,12 @@ let clean_bs_garbage proj_dir =
1127411276

1127511277

1127611278
let clean_bs_deps proj_dir =
11277-
Bsb_build_util.walk_all_deps proj_dir (fun pkg_cxt ->
11279+
let queue =
11280+
Bsb_build_util.walk_all_deps proj_dir in
11281+
Queue.iter (fun (pkg_cxt : Bsb_build_util.package_context )->
1127811282
(* whether top or not always do the cleaning *)
1127911283
clean_bs_garbage pkg_cxt.proj_dir
11280-
)
11284+
) queue
1128111285

1128211286
let clean_self proj_dir =
1128311287
clean_bs_garbage proj_dir
@@ -16270,21 +16274,42 @@ end = struct
1627016274
let (//) = Ext_path.combine
1627116275

1627216276

16277+
let vendor_ninja = Bsb_global_paths.vendor_ninja
1627316278

16274-
16275-
let build_bs_deps cwd (deps : Bsb_package_specs.t) (ninja_args : string array) =
16276-
16277-
let vendor_ninja = Bsb_global_paths.vendor_ninja in
16279+
let make_world_deps cwd (config : Bsb_config_types.t option) (ninja_args : string array) =
16280+
let deps =
16281+
match config with
16282+
| None ->
16283+
(* When this running bsb does not read bsconfig.json,
16284+
we will read such json file to know which [package-specs]
16285+
it wants
16286+
*)
16287+
Bsb_config_parse.package_specs_from_bsconfig ()
16288+
| Some config -> config.package_specs in
1627816289
let args =
1627916290
if Ext_array.is_empty ninja_args then [|vendor_ninja|]
1628016291
else Array.append [|vendor_ninja|] ninja_args
1628116292
in
1628216293
let lib_artifacts_dir = Bsb_config.lib_bs in
16283-
Bsb_build_util.walk_all_deps cwd (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
16294+
let queue =
16295+
Bsb_build_util.walk_all_deps cwd in
16296+
(* let oc = open_out_bin ".deps.log" in
16297+
queue |> Queue.iter (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
16298+
match top with
16299+
| Expect_none -> ()
16300+
| Expect_name s ->
16301+
output_string oc s ;
16302+
output_string oc " : ";
16303+
output_string oc proj_dir;
16304+
output_string oc "\n"
16305+
);
16306+
close_out oc ; *)
16307+
queue |> Queue.iter (fun ({top; proj_dir} : Bsb_build_util.package_context) ->
1628416308
match top with
1628516309
| Expect_none -> ()
16286-
| Expect_name _ ->
16310+
| Expect_name s ->
1628716311
begin
16312+
output_string stdout ("Start building dependency " ^ s ^ "\n");
1628816313
let lib_bs_dir = proj_dir // lib_artifacts_dir in
1628916314
Bsb_build_util.mkp lib_bs_dir;
1629016315
let _config : _ option =
@@ -16320,23 +16345,10 @@ let build_bs_deps cwd (deps : Bsb_package_specs.t) (ninja_args : string array) =
1632016345
if eid <> 0 then
1632116346
Bsb_unix.command_fatal_error install_command eid;
1632216347
Bsb_log.info "@{<info>Installation finished@}@.";
16348+
output_string stdout ("Finish building dependency " ^ s ^ "\n")
1632316349
end
1632416350
)
1632516351

16326-
16327-
let make_world_deps cwd (config : Bsb_config_types.t option) (ninja_args : string array) =
16328-
Bsb_log.info "Making the dependency world!@.";
16329-
let deps =
16330-
match config with
16331-
| None ->
16332-
(* When this running bsb does not read bsconfig.json,
16333-
we will read such json file to know which [package-specs]
16334-
it wants
16335-
*)
16336-
Bsb_config_parse.package_specs_from_bsconfig ()
16337-
| Some config -> config.package_specs in
16338-
build_bs_deps cwd deps ninja_args
16339-
1634016352
end
1634116353
module Bsc_args : sig
1634216354
#1 "bsc_args.mli"
@@ -16808,7 +16820,7 @@ let () =
1680816820
~forced:!force_regenerate) in
1680916821
(* [-make-world] should never be combined with [-package-specs] *)
1681016822
if !make_world then
16811-
Bsb_world.make_world_deps Bsb_global_paths.cwd ( config_opt) ninja_args;
16823+
Bsb_world.make_world_deps Bsb_global_paths.cwd config_opt ninja_args;
1681216824
if !do_install then
1681316825
install_target ();
1681416826
if !watch_mode then program_exit ()

0 commit comments

Comments
 (0)