@@ -67,27 +67,39 @@ func (h *Hook) executeCommand() error {
67
67
return fmt .Errorf ("failed to get stderr pipe: %w" , err )
68
68
}
69
69
70
+ // Create fd 3 for warnings
71
+ warnRead , warnWrite , err := os .Pipe ()
72
+ if err != nil {
73
+ return fmt .Errorf ("failed to create pipe for warnings (fd 3): %w" , err )
74
+ }
75
+
76
+ cmd .ExtraFiles = []* os.File {warnWrite }
77
+
78
+ var wg sync.WaitGroup
79
+
70
80
// Start the command
71
81
if err := cmd .Start (); err != nil {
82
+ warnWrite .Close ()
72
83
return fmt .Errorf ("failed to execute command: %w" , err )
73
84
}
74
85
75
- var wg sync. WaitGroup
86
+ warnWrite . Close ()
76
87
77
- // Print stdout and stderr
78
- wg .Add (1 )
88
+ // Start reading stdout, stderr and fd 3
89
+ wg .Add (3 )
79
90
go h .printStdout (stdout , & wg )
80
- wg .Add (1 )
81
91
go h .printStderr (stderr , & wg )
92
+ go h .printWarn (warnRead , & wg )
93
+
94
+ // Wait for all goroutines to finish
95
+ wg .Wait ()
82
96
83
97
// Wait for the command to finish
84
- if err := cmd .Wait (); err != nil {
98
+ err = cmd .Wait ()
99
+ if err != nil {
85
100
return fmt .Errorf ("%s hook execution failed: %w" , h .Name , err )
86
101
}
87
102
88
- // Wait for all goroutines to finish
89
- wg .Wait ()
90
-
91
103
return nil
92
104
}
93
105
@@ -114,3 +126,15 @@ func (h *Hook) printStderr(pipe io.Reader, wg *sync.WaitGroup) {
114
126
logger .Error ("Error reading stderr: %v" , err )
115
127
}
116
128
}
129
+
130
+ func (h * Hook ) printWarn (pipe io.Reader , wg * sync.WaitGroup ) {
131
+ defer wg .Done ()
132
+ scanner := bufio .NewScanner (pipe )
133
+
134
+ for scanner .Scan () {
135
+ logger .Warning (scanner .Text ())
136
+ }
137
+ if err := scanner .Err (); err != nil {
138
+ logger .Error ("Error reading warnings: %v" , err )
139
+ }
140
+ }
0 commit comments