@@ -45,10 +45,10 @@ const GlobalOptions = struct {
4545const CommandMap = []const Command ;
4646const Command = struct {
4747 []const u8 ,
48- * const fn (GlobalOptions , []const []const u8 ) anyerror ! void ,
48+ * const fn (GlobalOptions , []const []const u8 ) anyerror ! u8 ,
4949};
5050
51- const commands = &.{
51+ const commands : CommandMap = &.{
5252 .{ "dot" , cmd_dot },
5353 .{ "dotall" , cmd_dotall },
5454 .{ "dothtml" , cmd_dothtml },
@@ -88,6 +88,8 @@ pub fn main() !void {
8888
8989 if (args .len < 2 ) {
9090 try stdout .writeAll (usage );
91+ try stdout .flush ();
92+ try stderr .flush ();
9193 return std .process .exit (1 );
9294 }
9395
@@ -115,18 +117,24 @@ pub fn main() !void {
115117
116118 inline for (commands ) | cmd | {
117119 if (std .mem .eql (u8 , args [1 ], cmd [0 ])) {
118- return cmd [1 ](opt , args [2.. ]);
120+ const res = try cmd [1 ](opt , args [2.. ]);
121+ if (res == 0 ) return ;
122+ try stdout .flush ();
123+ try stderr .flush ();
124+ std .process .exit (res );
119125 }
120126 }
121127
122128 try stdout .writeAll (usage );
123129 try stdout .writeAll ("unknown command: " );
124130 try stdout .writeAll (args [1 ]);
125131 try stdout .writeAll ("\n " );
132+ try stdout .flush ();
133+ try stderr .flush ();
126134 return std .process .exit (1 );
127135}
128136
129- pub fn cmd_deppkg (opt : GlobalOptions , args : []const []const u8 ) ! void {
137+ pub fn cmd_deppkg (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
130138 const cmd_usage =
131139 \\usage: zigpkg deppkg <-h|--help|subcommand> [args]
132140 \\
@@ -143,11 +151,11 @@ pub fn cmd_deppkg(opt: GlobalOptions, args: []const []const u8) !void {
143151 ;
144152 if (args .len < 1 ) {
145153 try opt .stdout .writeAll (cmd_usage );
146- return std . process . exit ( 1 ) ;
154+ return 1 ;
147155 }
148156 if (helpArg (args [0.. 1])) {
149157 try opt .stdout .writeAll (cmd_usage );
150- return std . process . exit ( 0 ) ;
158+ return 0 ;
151159 }
152160 inline for (deppkg_commands ) | cmd | {
153161 if (std .mem .eql (u8 , args [0 ], cmd [0 ])) {
@@ -159,7 +167,7 @@ pub fn cmd_deppkg(opt: GlobalOptions, args: []const []const u8) !void {
159167 try opt .stdout .writeAll ("unknown command: " );
160168 try opt .stdout .writeAll (args [0 ]);
161169 try opt .stdout .writeAll ("\n " );
162- return std . process . exit ( 1 ) ;
170+ return 1 ;
163171}
164172
165173pub fn helpArg (args : []const []const u8 ) bool {
@@ -172,34 +180,36 @@ pub fn helpArg(args: []const []const u8) bool {
172180 return false ;
173181}
174182
175- pub fn cmd_extract (opt : GlobalOptions , args : []const []const u8 ) ! void {
183+ pub fn cmd_extract (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
176184 const cmd_usage =
177- \\usage: zigpkg extract <deppkg.tar.gz>
185+ \\usage: zigpkg extract <deppkg.tar.gz> <output_root>
178186 \\
179187 ;
180- if (args .len != 1 ) {
188+ if (args .len != 1 and args . len != 2 ) {
181189 try opt .stdout .writeAll (cmd_usage );
182- return std . process . exit ( 1 ) ;
190+ return 1 ;
183191 }
184192 if (helpArg (args [0.. args .len ])) {
185193 try opt .stdout .writeAll (cmd_usage );
186- return ;
194+ return 0 ;
187195 }
188196 try pkg_extractor .process (.{
189197 .gpa = opt .gpa ,
190198 .zig_exe = opt .zig_exe ,
191199 .filepath = args [0 ],
200+ .root_out_dir = if (args .len == 1 ) null else args [1 ],
192201 });
202+ return 0 ;
193203}
194204
195- pub fn cmd_create (opt : GlobalOptions , args : []const []const u8 ) ! void {
205+ pub fn cmd_create (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
196206 const cmd_usage =
197207 \\usage: zigpkg create <deppkg.tar.gz> <<build root path>|--> [z]
198208 \\
199209 ;
200210 if (args .len < 1 ) {
201211 try opt .stdout .writeAll (cmd_usage );
202- return std . process . exit ( 1 ) ;
212+ return 1 ;
203213 }
204214
205215 const output = try std .fs .path .resolve (opt .gpa , &.{ opt .cwd , args [0 ] });
@@ -241,9 +251,10 @@ pub fn cmd_create(opt: GlobalOptions, args: []const []const u8) !void {
241251 root ,
242252 output ,
243253 );
254+ return 0 ;
244255}
245256
246- pub fn cmd_from_zon (opt : GlobalOptions , args : []const []const u8 ) ! void {
257+ pub fn cmd_from_zon (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
247258 const output = try std .fs .path .resolve (
248259 opt .gpa ,
249260 &.{ opt .cwd , args [0 ] },
@@ -292,9 +303,10 @@ pub fn cmd_from_zon(opt: GlobalOptions, args: []const []const u8) !void {
292303 root ,
293304 output ,
294305 );
306+ return 0 ;
295307}
296308
297- pub fn cmd_dot (opt : GlobalOptions , args : []const []const u8 ) ! void {
309+ pub fn cmd_dot (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
298310 const cmd_usage =
299311 \\usage: zigpkg dot {--help|build_root_path|--} [zig args]
300312 \\
@@ -320,10 +332,11 @@ pub fn cmd_dot(opt: GlobalOptions, args: []const []const u8) !void {
320332 return error .UnknownArgument ;
321333 }
322334 }
323- return runnerCommand (opt , "runner-dot.zig" , root , args [arg_sep .. ]);
335+ try runnerCommand (opt , "runner-dot.zig" , root , args [arg_sep .. ]);
336+ return 0 ;
324337}
325338
326- pub fn cmd_dotall (opt : GlobalOptions , args : []const []const u8 ) ! void {
339+ pub fn cmd_dotall (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
327340 var arg_sep : usize = 0 ;
328341 var root : []const u8 = "." ;
329342 for (args ) | arg | {
@@ -376,16 +389,18 @@ pub fn cmd_dotall(opt: GlobalOptions, args: []const []const u8) !void {
376389 try opt .stdout .writeAll (dot .DotFileWriter .cluster_footer );
377390 }
378391 try opt .stdout .writeAll (dot .DotFileWriter .footer );
392+ return 0 ;
379393}
380394
381- pub fn cmd_dothtml (opt : GlobalOptions , args : []const []const u8 ) ! void {
395+ pub fn cmd_dothtml (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
382396 const b = try zonOutputCmd (opt , args );
383397 defer b .deinit (opt .gpa );
384398
385399 try viz_network .render (b .parsed , opt .stdout );
400+ return 0 ;
386401}
387402
388- pub fn cmd_json (opt : GlobalOptions , args : []const []const u8 ) ! void {
403+ pub fn cmd_json (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
389404 const b = try zonOutputCmd (opt , args );
390405 defer b .deinit (opt .gpa );
391406
@@ -394,9 +409,10 @@ pub fn cmd_json(opt: GlobalOptions, args: []const []const u8) !void {
394409 .emit_null_optional_fields = false ,
395410 }),
396411 });
412+ return 0 ;
397413}
398414
399- pub fn cmd_zon (opt : GlobalOptions , args : []const []const u8 ) ! void {
415+ pub fn cmd_zon (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
400416 const b = try zonOutputCmd (opt , args );
401417 defer b .deinit (opt .gpa );
402418
@@ -405,6 +421,7 @@ pub fn cmd_zon(opt: GlobalOptions, args: []const []const u8) !void {
405421 .emit_default_optional_fields = false ,
406422 }, opt .stdout );
407423 try opt .stdout .writeAll ("\n " );
424+ return 0 ;
408425}
409426
410427pub fn zonOutputCmd (opt : GlobalOptions , args : []const []const u8 ) ! SerializedZonType (Serialize ) {
@@ -551,7 +568,7 @@ pub fn runnerCommand(opt: GlobalOptions, runner: []const u8, root: []const u8, a
551568 }
552569}
553570
554- pub fn cmd_build (opt : GlobalOptions , args : []const []const u8 ) ! void {
571+ pub fn cmd_build (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
555572 _ = args ;
556573 const cmd_usage =
557574 \\usage: zigpkg build <deppkg.tar.gz> <install directory> [zig build args]
@@ -563,7 +580,7 @@ pub fn cmd_build(opt: GlobalOptions, args: []const []const u8) !void {
563580 @panic ("NOT IMPLEMENTED" );
564581}
565582
566- pub fn cmd_checkout (opt : GlobalOptions , args : []const []const u8 ) ! void {
583+ pub fn cmd_checkout (opt : GlobalOptions , args : []const []const u8 ) ! u8 {
567584 _ = args ;
568585 const cmd_usage =
569586 \\usage: zigpkg checkout <empty directory for git deps> {build root path}
0 commit comments