@@ -6,6 +6,7 @@ import 'dart:async';
6
6
import 'dart:io' ;
7
7
import 'dart:isolate' ;
8
8
9
+ import 'package:args/command_runner.dart' ;
9
10
import 'package:logging/logging.dart' ;
10
11
import 'package:path/path.dart' as p;
11
12
@@ -14,26 +15,44 @@ import 'package:build_runner/src/entrypoint/options.dart';
14
15
import 'package:build_runner/src/logging/std_io_logging.dart' ;
15
16
16
17
Future <Null > main (List <String > args) async {
17
- var logListener = Logger .root.onRecord.listen (stdIOLogListener);
18
-
19
18
// Use the actual command runner to parse the args and immediately print the
20
19
// usage information if there is no command provided or the help command was
21
20
// explicitly invoked.
22
- var commandRunner = new BuildCommandRunner ([]);
21
+ var commandRunner = new BuildCommandRunner ([])
22
+ ..addCommand (new _GenerateBuildScript ());
23
23
var parsedArgs = commandRunner.parse (args);
24
24
var commandName = parsedArgs.command? .name;
25
25
if (commandName == null || commandName == 'help' ) {
26
26
commandRunner.printUsage ();
27
27
return ;
28
28
}
29
29
30
+ StreamSubscription logListener;
31
+ if (commandName != _generateCommand) {
32
+ logListener = Logger .root.onRecord.listen (stdIOLogListener);
33
+ }
30
34
var buildScript = await generateBuildScript ();
31
35
var scriptFile = new File (scriptLocation)..createSync (recursive: true );
32
36
scriptFile.writeAsStringSync (buildScript);
37
+ if (commandName == _generateCommand) {
38
+ print (p.absolute (scriptLocation));
39
+ return ;
40
+ }
33
41
34
42
var exitPort = new ReceivePort ();
35
43
await Isolate .spawnUri (new Uri .file (p.absolute (scriptLocation)), args, null ,
36
44
onExit: exitPort.sendPort);
37
45
await exitPort.first;
38
- await logListener.cancel ();
46
+ await logListener? .cancel ();
47
+ }
48
+
49
+ const _generateCommand = 'generate-build-script' ;
50
+
51
+ class _GenerateBuildScript extends Command {
52
+ @override
53
+ final description = 'Generate a script to run builds and print the file path '
54
+ 'with no other logging. Useful for wrapping builds with other tools.' ;
55
+
56
+ @override
57
+ final name = _generateCommand;
39
58
}
0 commit comments