Skip to content

Commit d1adb5e

Browse files
committed
now parsing bsconfig is re-entrant, more testing
1 parent 3e6d2d5 commit d1adb5e

File tree

9 files changed

+88
-25
lines changed

9 files changed

+88
-25
lines changed

jscomp/all.depend

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ bsb/bsb_config_parse.cmx : ext/string_hash_set.cmx ext/literals.cmx \
664664
bsb/bsb_config_parse.cmi
665665
bsb/bsb_config_types.cmx : ext/string_hash_set.cmx bsb/bsb_config.cmx \
666666
bsb/bsb_build_ui.cmx
667-
bsb/bsb_default.cmx : ext/string_set.cmx ext/literals.cmx ext/ext_string.cmx \
667+
bsb/bsb_default.cmx : ext/string_set.cmx ext/literals.cmx \
668668
ext/ext_filename.cmx bsb/bsb_config.cmx bsb/bsb_build_util.cmx \
669669
bsb/bsb_default.cmi
670670
bsb/bsb_dep_infos.cmx : bsb/bsb_dep_infos.cmi
@@ -680,8 +680,8 @@ bsb/bsb_main.cmx : ext/string_vec.cmx ext/string_set.cmx \
680680
ext/string_hash_set.cmx ext/literals.cmx ext/ext_sys.cmx \
681681
ext/ext_string.cmx ext/ext_filename.cmx ext/ext_array.cmx \
682682
bsb/bsb_unix.cmx bsb/bsb_gen.cmx bsb/bsb_file.cmx bsb/bsb_dep_infos.cmx \
683-
bsb/bsb_default.cmx bsb/bsb_config_types.cmx bsb/bsb_config_parse.cmx \
684-
bsb/bsb_config.cmx bsb/bsb_build_util.cmx bsb/bsb_main.cmi
683+
bsb/bsb_config_types.cmx bsb/bsb_config_parse.cmx bsb/bsb_config.cmx \
684+
bsb/bsb_build_util.cmx bsb/bsb_main.cmi
685685
bsb/bsb_ninja.cmx : ext/string_set.cmx ext/string_map.cmx \
686686
ext/string_hash_set.cmx ext/literals.cmx ext/ext_sys.cmx \
687687
ext/ext_string.cmx ext/ext_filename.cmx bsb/bsb_config.cmx \

jscomp/bin/bsb.ml

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2920,7 +2920,9 @@ val package_output : format:string -> string -> string
29202920

29212921
type package_specs = String_set.t
29222922

2923+
val cmd_package_specs : package_specs option ref
29232924

2925+
val cmd_override_package_specs : string -> unit
29242926
end = struct
29252927
#1 "bsb_config.ml"
29262928
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -2976,12 +2978,29 @@ let no_dev = ref false
29762978

29772979
let install = ref false
29782980

2981+
2982+
let cmd_package_specs = ref None
2983+
2984+
type package_specs = String_set.t
2985+
29792986
let supported_format x =
29802987
x = Literals.amdjs ||
29812988
x = Literals.commonjs ||
29822989
x = Literals.goog ||
29832990
x = Literals.es6
29842991

2992+
2993+
let cmd_override_package_specs str =
2994+
let lst = Ext_string.split ~keep_empty:false str ',' in
2995+
cmd_package_specs :=
2996+
Some (List.fold_left (fun acc x ->
2997+
let v =
2998+
if supported_format x then String_set.add x acc
2999+
else
3000+
failwith ("Unkonwn package spec" ^ x) in
3001+
v
3002+
) String_set.empty lst)
3003+
29853004
let bs_package_output = "-bs-package-output"
29863005

29873006
(** Assume input is valid
@@ -3015,7 +3034,8 @@ let package_output ~format:s output=
30153034
(* output_file_sans_extension ^ Literals.suffix_js *)
30163035

30173036

3018-
type package_specs = String_set.t
3037+
3038+
30193039

30203040

30213041
end
@@ -7445,7 +7465,7 @@ val set_ninja : cwd:string -> string -> unit
74457465

74467466
val get_package_specs : unit -> Bsb_config.package_specs
74477467
val set_package_specs_from_array : Ext_json.t array -> unit
7448-
val internal_override_package_specs : string -> unit
7468+
74497469

74507470

74517471
val get_generate_merlin : unit -> bool
@@ -7559,14 +7579,14 @@ let set_ninja ~cwd p =
75597579

75607580

75617581
let package_specs = ref (String_set.singleton Literals.commonjs)
7562-
let package_specs_overriden = ref false
7582+
(* let package_specs_overriden = ref false *)
75637583

75647584
let get_package_specs () = !package_specs
75657585

75667586

75677587

75687588
let set_package_specs_from_array arr =
7569-
if not !package_specs_overriden then
7589+
(* if not !package_specs_overriden then *)
75707590
let new_package_specs =
75717591
arr
75727592
|> get_list_string
@@ -7581,7 +7601,7 @@ let set_package_specs_from_array arr =
75817601

75827602

75837603

7584-
7604+
(*
75857605
let internal_override_package_specs str =
75867606
package_specs_overriden := true ;
75877607
let lst = Ext_string.split ~keep_empty:false str ',' in
@@ -7593,7 +7613,7 @@ let internal_override_package_specs str =
75937613
failwith ("Unkonwn package spec" ^ x) in
75947614
v
75957615
) String_set.empty lst
7596-
7616+
*)
75977617

75987618
let generate_merlin = ref true
75997619

@@ -7632,8 +7652,9 @@ module Bsb_config_parse : sig
76327652

76337653

76347654
val interpret_json :
7655+
override_package_specs:Bsb_config.package_specs option ->
76357656
bsc_dir:string ->
7636-
cwd:string ->
7657+
string ->
76377658
Bsb_config_types.t
76387659

76397660

@@ -7744,7 +7765,12 @@ let revise_merlin new_content =
77447765

77457766
let bsppx_exe = "bsppx.exe"
77467767

7747-
let interpret_json ~bsc_dir ~cwd : Bsb_config_types.t =
7768+
let interpret_json
7769+
~override_package_specs
7770+
~bsc_dir
7771+
cwd
7772+
7773+
: Bsb_config_types.t =
77487774
let builddir = Bsb_config.lib_bs in
77497775
let () = Bsb_build_util.mkp builddir in
77507776
let update_queue = ref [] in
@@ -7874,7 +7900,9 @@ let interpret_json ~bsc_dir ~cwd : Bsb_config_types.t =
78747900
refmt = Bsb_default.(get_refmt ());
78757901
refmt_flags = Bsb_default.(get_refmt_flags ());
78767902
js_post_build_cmd = Bsb_default.(get_js_post_build_cmd ());
7877-
package_specs = (Bsb_default.get_package_specs());
7903+
package_specs =
7904+
(match override_package_specs with None -> Bsb_default.get_package_specs()
7905+
| Some x -> x );
78787906
globbed_dirs = !globbed_dirs;
78797907
bs_file_groups = !bs_file_groups;
78807908
files_to_install = String_hash_set.create 96
@@ -9120,7 +9148,7 @@ let bsb_main_flags =
91209148
regen, Arg.Set force_regenerate,
91219149
" Always regenerate build.ninja no matter bsconfig.json is changed or not (for debugging purpose)"
91229150
;
9123-
internal_package_specs, Arg.String Bsb_default.internal_override_package_specs,
9151+
internal_package_specs, Arg.String Bsb_config.cmd_override_package_specs,
91249152
" (internal)Overide package specs (in combination with -regen)";
91259153
"-clean-world", Arg.Unit clean_bs_deps,
91269154
" Clean all bs dependencies";
@@ -9143,7 +9171,10 @@ let regenerate_ninja cwd bsc_dir forced =
91439171
begin
91449172
print_endline reason ;
91459173
print_endline "Regenerating build spec";
9146-
let config = Bsb_config_parse.interpret_json ~bsc_dir ~cwd in
9174+
let config =
9175+
Bsb_config_parse.interpret_json
9176+
~override_package_specs:!Bsb_config.cmd_package_specs
9177+
~bsc_dir cwd in
91479178
begin
91489179
Bsb_gen.output_ninja ~cwd ~bsc_dir config ;
91499180
Literals.bsconfig_json :: config.globbed_dirs

jscomp/bsb/bsb_config.ml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,29 @@ let no_dev = ref false
5151

5252
let install = ref false
5353

54+
55+
let cmd_package_specs = ref None
56+
57+
type package_specs = String_set.t
58+
5459
let supported_format x =
5560
x = Literals.amdjs ||
5661
x = Literals.commonjs ||
5762
x = Literals.goog ||
5863
x = Literals.es6
5964

65+
66+
let cmd_override_package_specs str =
67+
let lst = Ext_string.split ~keep_empty:false str ',' in
68+
cmd_package_specs :=
69+
Some (List.fold_left (fun acc x ->
70+
let v =
71+
if supported_format x then String_set.add x acc
72+
else
73+
failwith ("Unkonwn package spec" ^ x) in
74+
v
75+
) String_set.empty lst)
76+
6077
let bs_package_output = "-bs-package-output"
6178

6279
(** Assume input is valid
@@ -90,5 +107,6 @@ let package_output ~format:s output=
90107
(* output_file_sans_extension ^ Literals.suffix_js *)
91108

92109

93-
type package_specs = String_set.t
110+
111+
94112

jscomp/bsb/bsb_config.mli

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ val package_output : format:string -> string -> string
4545

4646
type package_specs = String_set.t
4747

48+
val cmd_package_specs : package_specs option ref
49+
50+
val cmd_override_package_specs : string -> unit

jscomp/bsb/bsb_config_parse.ml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,12 @@ let revise_merlin new_content =
100100

101101
let bsppx_exe = "bsppx.exe"
102102

103-
let interpret_json ~bsc_dir ~cwd : Bsb_config_types.t =
103+
let interpret_json
104+
~override_package_specs
105+
~bsc_dir
106+
cwd
107+
108+
: Bsb_config_types.t =
104109
let builddir = Bsb_config.lib_bs in
105110
let () = Bsb_build_util.mkp builddir in
106111
let update_queue = ref [] in
@@ -230,7 +235,9 @@ let interpret_json ~bsc_dir ~cwd : Bsb_config_types.t =
230235
refmt = Bsb_default.(get_refmt ());
231236
refmt_flags = Bsb_default.(get_refmt_flags ());
232237
js_post_build_cmd = Bsb_default.(get_js_post_build_cmd ());
233-
package_specs = (Bsb_default.get_package_specs());
238+
package_specs =
239+
(match override_package_specs with None -> Bsb_default.get_package_specs()
240+
| Some x -> x );
234241
globbed_dirs = !globbed_dirs;
235242
bs_file_groups = !bs_file_groups;
236243
files_to_install = String_hash_set.create 96

jscomp/bsb/bsb_config_parse.mli

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525

2626

2727
val interpret_json :
28+
override_package_specs:Bsb_config.package_specs option ->
2829
bsc_dir:string ->
29-
cwd:string ->
30+
string ->
3031
Bsb_config_types.t
3132

3233

jscomp/bsb/bsb_default.ml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,14 @@ let set_ninja ~cwd p =
103103

104104

105105
let package_specs = ref (String_set.singleton Literals.commonjs)
106-
let package_specs_overriden = ref false
106+
(* let package_specs_overriden = ref false *)
107107

108108
let get_package_specs () = !package_specs
109109

110110

111111

112112
let set_package_specs_from_array arr =
113-
if not !package_specs_overriden then
113+
(* if not !package_specs_overriden then *)
114114
let new_package_specs =
115115
arr
116116
|> get_list_string
@@ -125,7 +125,7 @@ let set_package_specs_from_array arr =
125125

126126

127127

128-
128+
(*
129129
let internal_override_package_specs str =
130130
package_specs_overriden := true ;
131131
let lst = Ext_string.split ~keep_empty:false str ',' in
@@ -137,7 +137,7 @@ let internal_override_package_specs str =
137137
failwith ("Unkonwn package spec" ^ x) in
138138
v
139139
) String_set.empty lst
140-
140+
*)
141141

142142
let generate_merlin = ref true
143143

jscomp/bsb/bsb_default.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ val set_ninja : cwd:string -> string -> unit
6161

6262
val get_package_specs : unit -> Bsb_config.package_specs
6363
val set_package_specs_from_array : Ext_json.t array -> unit
64-
val internal_override_package_specs : string -> unit
64+
6565

6666

6767
val get_generate_merlin : unit -> bool

jscomp/bsb/bsb_main.ml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ let bsb_main_flags =
120120
regen, Arg.Set force_regenerate,
121121
" Always regenerate build.ninja no matter bsconfig.json is changed or not (for debugging purpose)"
122122
;
123-
internal_package_specs, Arg.String Bsb_default.internal_override_package_specs,
123+
internal_package_specs, Arg.String Bsb_config.cmd_override_package_specs,
124124
" (internal)Overide package specs (in combination with -regen)";
125125
"-clean-world", Arg.Unit clean_bs_deps,
126126
" Clean all bs dependencies";
@@ -143,7 +143,10 @@ let regenerate_ninja cwd bsc_dir forced =
143143
begin
144144
print_endline reason ;
145145
print_endline "Regenerating build spec";
146-
let config = Bsb_config_parse.interpret_json ~bsc_dir ~cwd in
146+
let config =
147+
Bsb_config_parse.interpret_json
148+
~override_package_specs:!Bsb_config.cmd_package_specs
149+
~bsc_dir cwd in
147150
begin
148151
Bsb_gen.output_ninja ~cwd ~bsc_dir config ;
149152
Literals.bsconfig_json :: config.globbed_dirs

0 commit comments

Comments
 (0)