@@ -11,6 +11,8 @@ use crate::config::config_file::ConfigFile;
1111use crate :: config:: { Config , Settings } ;
1212use crate :: tera:: { BASE_CONTEXT , get_tera} ;
1313use crate :: ui:: multi_progress_report:: MultiProgressReport ;
14+ use crate :: ui:: progress_report:: SingleReport ;
15+ use crate :: ui:: style;
1416
1517type StepOutput = ( DepsStepResult , Vec < PathBuf > ) ;
1618type JobOutput = Result < ( String , DepsStepResult , Vec < PathBuf > ) , ( String , eyre:: Report ) > ;
@@ -405,14 +407,21 @@ impl DepsEngine {
405407 . collect ( ) ;
406408
407409 crate :: parallel:: parallel ( to_run_with_context, |( job, mpr, toolset_env) | async move {
408- let pr = mpr. add ( & job. cmd . description ) ;
409- match Self :: execute_command ( & job. cmd , & toolset_env, job. timeout ) {
410+ let ( stdout_prefix, stderr_prefix) = Self :: deps_prefixes ( & job. id ) ;
411+ let pr = mpr. add ( & stderr_prefix) ;
412+ match Self :: execute_command (
413+ & job. cmd ,
414+ & toolset_env,
415+ job. timeout ,
416+ Some ( ( & stdout_prefix, & stderr_prefix) ) ,
417+ Some ( pr. as_ref ( ) ) ,
418+ ) {
410419 Ok ( ( ) ) => {
411- pr. finish_with_message ( format ! ( "{} done", job . cmd . description ) ) ;
420+ pr. finish_with_message ( " done". to_string ( ) ) ;
412421 Ok ( ( DepsStepResult :: Ran ( job. id ) , job. outputs ) )
413422 }
414423 Err ( e) => {
415- pr. finish_with_message ( format ! ( "{} failed: {}" , job . cmd . description , e ) ) ;
424+ pr. finish_with_message ( format ! ( "failed: {e}" ) ) ;
416425 Err ( e)
417426 }
418427 }
@@ -550,31 +559,32 @@ impl DepsEngine {
550559 let toolset_env = toolset_env. clone( ) ;
551560
552561 let handle = join_set. spawn( async move {
553- let pr = mpr. add( & job. cmd. description) ;
554562 let id = job. id;
563+ let ( stdout_prefix, stderr_prefix) = Self :: deps_prefixes( & id) ;
564+ let pr = mpr. add( & stderr_prefix) ;
555565 let result = std:: panic:: catch_unwind( std:: panic:: AssertUnwindSafe ( || {
556- Self :: execute_command( & job. cmd, & toolset_env, job. timeout)
566+ Self :: execute_command(
567+ & job. cmd,
568+ & toolset_env,
569+ job. timeout,
570+ Some ( ( & stdout_prefix, & stderr_prefix) ) ,
571+ Some ( pr. as_ref( ) ) ,
572+ )
557573 } ) ) ;
558574 drop( permit) ;
559575
560576 match result {
561577 Ok ( Ok ( ( ) ) ) => {
562- pr. finish_with_message( format! ( "{} done", job . cmd . description ) ) ;
578+ pr. finish_with_message( " done". to_string ( ) ) ;
563579 let step = DepsStepResult :: Ran ( id. clone( ) ) ;
564580 Ok ( ( id, step, job. outputs) )
565581 }
566582 Ok ( Err ( e) ) => {
567- pr. finish_with_message( format!(
568- "{} failed: {}" ,
569- job. cmd. description, e
570- ) ) ;
583+ pr. finish_with_message( format!( "failed: {e}" ) ) ;
571584 Err ( ( id, e) )
572585 }
573586 Err ( _) => {
574- pr. finish_with_message( format!(
575- "{} panicked" ,
576- job. cmd. description
577- ) ) ;
587+ pr. finish_with_message( "panicked" . to_string( ) ) ;
578588 Err ( ( id, eyre:: eyre!( "task panicked" ) ) )
579589 }
580590 }
@@ -696,6 +706,8 @@ impl DepsEngine {
696706 cmd : & super :: DepsCommand ,
697707 toolset_env : & BTreeMap < String , String > ,
698708 timeout : Option < std:: time:: Duration > ,
709+ prefixes : Option < ( & str , & str ) > ,
710+ progress : Option < & dyn SingleReport > ,
699711 ) -> Result < ( ) > {
700712 let cwd = match cmd. cwd . clone ( ) {
701713 Some ( dir) => dir,
@@ -742,7 +754,41 @@ impl DepsEngine {
742754 runner = runner. raw ( true ) ;
743755 }
744756
757+ if let Some ( ( stdout_prefix, stderr_prefix) ) = prefixes
758+ && !Settings :: get ( ) . raw
759+ {
760+ let stdout_prefix = stdout_prefix. to_string ( ) ;
761+ let stderr_prefix = stderr_prefix. to_string ( ) ;
762+ runner = runner
763+ . with_on_stdout ( move |line| {
764+ if let Some ( progress) = progress {
765+ progress. set_message ( line. clone ( ) ) ;
766+ }
767+ if console:: colors_enabled ( ) {
768+ prefix_println ! ( stdout_prefix, "{line}\x1b [0m" ) ;
769+ } else {
770+ prefix_println ! ( stdout_prefix, "{line}" ) ;
771+ }
772+ } )
773+ . with_on_stderr ( move |line| {
774+ if console:: colors_enabled_stderr ( ) {
775+ prefix_eprintln ! ( stderr_prefix, "{line}\x1b [0m" ) ;
776+ } else {
777+ prefix_eprintln ! ( stderr_prefix, "{line}" ) ;
778+ }
779+ } ) ;
780+ }
781+
745782 runner. execute ( ) ?;
746783 Ok ( ( ) )
747784 }
785+
786+ fn deps_prefixes ( id : & str ) -> ( String , String ) {
787+ let name = format ! ( "deps.{id}" ) ;
788+ let prefix = format ! ( "[{name}]" ) ;
789+ (
790+ style:: prefix ( & prefix, & name, false ) ,
791+ style:: prefix ( prefix, name, true ) ,
792+ )
793+ }
748794}
0 commit comments