@@ -33,7 +33,7 @@ use tokio::{
33
33
} ;
34
34
use tracing:: { debug, trace} ;
35
35
36
- use super :: Command ;
36
+ use super :: { Command , PtySize } ;
37
37
38
38
#[ derive( Debug ) ]
39
39
pub enum ChildState {
@@ -135,22 +135,17 @@ impl ChildHandle {
135
135
}
136
136
137
137
#[ tracing:: instrument( skip( command) ) ]
138
- pub fn spawn_pty ( command : Command ) -> io:: Result < SpawnResult > {
139
- use portable_pty:: PtySize ;
140
-
138
+ pub fn spawn_pty ( command : Command , size : PtySize ) -> io:: Result < SpawnResult > {
141
139
let keep_stdin_open = command. will_open_stdin ( ) ;
142
140
143
141
let command = portable_pty:: CommandBuilder :: from ( command) ;
144
142
let pty_system = native_pty_system ( ) ;
145
- let size =
146
- console:: Term :: stdout ( )
147
- . size_checked ( )
148
- . map_or_else ( PtySize :: default, |( rows, cols) | PtySize {
149
- rows,
150
- cols,
151
- pixel_width : 0 ,
152
- pixel_height : 0 ,
153
- } ) ;
143
+ let size = portable_pty:: PtySize {
144
+ rows : size. rows ,
145
+ cols : size. cols ,
146
+ pixel_width : 0 ,
147
+ pixel_height : 0 ,
148
+ } ;
154
149
let pair = pty_system
155
150
. openpty ( size)
156
151
. map_err ( |err| match err. downcast ( ) {
@@ -438,15 +433,15 @@ impl Child {
438
433
pub fn spawn (
439
434
command : Command ,
440
435
shutdown_style : ShutdownStyle ,
441
- use_pty : bool ,
436
+ pty_size : Option < PtySize > ,
442
437
) -> io:: Result < Self > {
443
438
let label = command. label ( ) ;
444
439
let SpawnResult {
445
440
handle : mut child,
446
441
io : ChildIO { stdin, output } ,
447
442
controller,
448
- } = if use_pty {
449
- ChildHandle :: spawn_pty ( command)
443
+ } = if let Some ( size ) = pty_size {
444
+ ChildHandle :: spawn_pty ( command, size )
450
445
} else {
451
446
ChildHandle :: spawn_normal ( command)
452
447
} ?;
@@ -832,7 +827,10 @@ mod test {
832
827
use turbopath:: AbsoluteSystemPathBuf ;
833
828
834
829
use super :: { Child , ChildInput , ChildOutput , ChildState , Command } ;
835
- use crate :: process:: child:: { ChildExit , ShutdownStyle } ;
830
+ use crate :: process:: {
831
+ child:: { ChildExit , ShutdownStyle } ,
832
+ PtySize ,
833
+ } ;
836
834
837
835
const STARTUP_DELAY : Duration = Duration :: from_millis ( 500 ) ;
838
836
// We skip testing PTY usage on Windows
@@ -855,7 +853,8 @@ mod test {
855
853
let script = find_script_dir ( ) . join_component ( "hello_world.js" ) ;
856
854
let mut cmd = Command :: new ( "node" ) ;
857
855
cmd. args ( [ script. as_std_path ( ) ] ) ;
858
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
856
+ let mut child =
857
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
859
858
860
859
assert_matches ! ( child. pid( ) , Some ( _) ) ;
861
860
child. stop ( ) . await ;
@@ -872,7 +871,8 @@ mod test {
872
871
let script = find_script_dir ( ) . join_component ( "hello_world.js" ) ;
873
872
let mut cmd = Command :: new ( "node" ) ;
874
873
cmd. args ( [ script. as_std_path ( ) ] ) ;
875
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
874
+ let mut child =
875
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
876
876
877
877
let exit1 = child. wait ( ) . await ;
878
878
let exit2 = child. wait ( ) . await ;
@@ -892,7 +892,8 @@ mod test {
892
892
cmd
893
893
} ;
894
894
895
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
895
+ let mut child =
896
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
896
897
897
898
{
898
899
let state = child. state . read ( ) . await ;
@@ -917,7 +918,8 @@ mod test {
917
918
let mut cmd = Command :: new ( "node" ) ;
918
919
cmd. args ( [ script. as_std_path ( ) ] ) ;
919
920
cmd. open_stdin ( ) ;
920
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
921
+ let mut child =
922
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
921
923
922
924
tokio:: time:: sleep ( STARTUP_DELAY ) . await ;
923
925
@@ -959,7 +961,8 @@ mod test {
959
961
let mut cmd = Command :: new ( "node" ) ;
960
962
cmd. args ( [ script. as_std_path ( ) ] ) ;
961
963
cmd. open_stdin ( ) ;
962
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
964
+ let mut child =
965
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
963
966
964
967
tokio:: time:: sleep ( STARTUP_DELAY ) . await ;
965
968
@@ -1006,7 +1009,7 @@ mod test {
1006
1009
let mut child = Child :: spawn (
1007
1010
cmd,
1008
1011
ShutdownStyle :: Graceful ( Duration :: from_millis ( 500 ) ) ,
1009
- use_pty,
1012
+ use_pty. then ( PtySize :: default ) ,
1010
1013
)
1011
1014
. unwrap ( ) ;
1012
1015
@@ -1043,7 +1046,7 @@ mod test {
1043
1046
let mut child = Child :: spawn (
1044
1047
cmd,
1045
1048
ShutdownStyle :: Graceful ( Duration :: from_millis ( 500 ) ) ,
1046
- use_pty,
1049
+ use_pty. then ( PtySize :: default ) ,
1047
1050
)
1048
1051
. unwrap ( ) ;
1049
1052
@@ -1073,7 +1076,7 @@ mod test {
1073
1076
let mut child = Child :: spawn (
1074
1077
cmd,
1075
1078
ShutdownStyle :: Graceful ( Duration :: from_millis ( 500 ) ) ,
1076
- use_pty,
1079
+ use_pty. then ( PtySize :: default ) ,
1077
1080
)
1078
1081
. unwrap ( ) ;
1079
1082
@@ -1122,7 +1125,8 @@ mod test {
1122
1125
let mut cmd = Command :: new ( "node" ) ;
1123
1126
cmd. args ( [ script. as_std_path ( ) ] ) ;
1124
1127
cmd. open_stdin ( ) ;
1125
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
1128
+ let mut child =
1129
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
1126
1130
1127
1131
let mut out = Vec :: new ( ) ;
1128
1132
@@ -1144,7 +1148,8 @@ mod test {
1144
1148
let mut cmd = Command :: new ( "node" ) ;
1145
1149
cmd. args ( [ script. as_std_path ( ) ] ) ;
1146
1150
cmd. open_stdin ( ) ;
1147
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
1151
+ let mut child =
1152
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
1148
1153
1149
1154
let mut buffer = Vec :: new ( ) ;
1150
1155
@@ -1168,7 +1173,8 @@ mod test {
1168
1173
let mut cmd = Command :: new ( "node" ) ;
1169
1174
cmd. args ( [ script. as_std_path ( ) ] ) ;
1170
1175
cmd. open_stdin ( ) ;
1171
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
1176
+ let mut child =
1177
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
1172
1178
1173
1179
let mut out = Vec :: new ( ) ;
1174
1180
@@ -1189,7 +1195,8 @@ mod test {
1189
1195
let mut cmd = Command :: new ( "node" ) ;
1190
1196
cmd. args ( [ script. as_std_path ( ) ] ) ;
1191
1197
cmd. open_stdin ( ) ;
1192
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
1198
+ let mut child =
1199
+ Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default) ) . unwrap ( ) ;
1193
1200
1194
1201
let mut out = Vec :: new ( ) ;
1195
1202
@@ -1217,7 +1224,7 @@ mod test {
1217
1224
let mut child = Child :: spawn (
1218
1225
cmd,
1219
1226
ShutdownStyle :: Graceful ( Duration :: from_millis ( 100 ) ) ,
1220
- use_pty,
1227
+ use_pty. then ( PtySize :: default ) ,
1221
1228
)
1222
1229
. unwrap ( ) ;
1223
1230
@@ -1233,7 +1240,7 @@ mod test {
1233
1240
async fn test_orphan_process ( ) {
1234
1241
let mut cmd = Command :: new ( "sh" ) ;
1235
1242
cmd. args ( [ "-c" , "echo hello; sleep 120; echo done" ] ) ;
1236
- let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , false ) . unwrap ( ) ;
1243
+ let mut child = Child :: spawn ( cmd, ShutdownStyle :: Kill , None ) . unwrap ( ) ;
1237
1244
1238
1245
tokio:: time:: sleep ( STARTUP_DELAY ) . await ;
1239
1246
@@ -1267,7 +1274,7 @@ mod test {
1267
1274
let script = find_script_dir ( ) . join_component ( "hello_world.js" ) ;
1268
1275
let mut cmd = Command :: new ( "node" ) ;
1269
1276
cmd. args ( [ script. as_std_path ( ) ] ) ;
1270
- let child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty) . unwrap ( ) ;
1277
+ let child = Child :: spawn ( cmd, ShutdownStyle :: Kill , use_pty. then ( PtySize :: default ) ) . unwrap ( ) ;
1271
1278
1272
1279
let mut stops = FuturesUnordered :: new ( ) ;
1273
1280
for _ in 1 ..10 {
0 commit comments