@@ -105,7 +105,7 @@ impl Handler for NixHandler {
105105 let log: NixLog = match serde_json:: from_str ( e) {
106106 Ok ( l) => l,
107107 Err ( err) => {
108- warn ! ( "failed to parse nix log line {:?}: {}" , e , err ) ;
108+ warn ! ( "failed to parse nix log line {e :?}: {err}" ) ;
109109 return ;
110110 }
111111 } ;
@@ -141,13 +141,13 @@ impl Handler for NixHandler {
141141 drv = pkg;
142142 }
143143 }
144- info ! ( target: "nix" , "building {}" , drv ) ;
144+ info ! ( target: "nix" , "building {drv}" ) ;
145145 let span = info_span ! ( "build" , drv) ;
146146 #[ cfg( feature = "indicatif" ) ]
147147 span. pb_start ( ) ;
148148 self . spans . insert ( id, span) ;
149149 } else {
150- warn ! ( "bad build log: {:?}" , log )
150+ warn ! ( "bad build log: {log :?}" )
151151 }
152152 }
153153 NixLog :: Start {
@@ -168,13 +168,13 @@ impl Handler for NixHandler {
168168 drv = pkg;
169169 }
170170 }
171- info ! ( target: "nix" , "copying {} {} -> {}" , drv , from , to ) ;
171+ info ! ( target: "nix" , "copying {drv } {from } -> {to}" ) ;
172172 let span = info_span ! ( "copy" , from, to, drv) ;
173173 #[ cfg( feature = "indicatif" ) ]
174174 span. pb_start ( ) ;
175175 self . spans . insert ( id, span) ;
176176 } else {
177- warn ! ( "bad copy log: {:?}" , log )
177+ warn ! ( "bad copy log: {log :?}" )
178178 }
179179 }
180180 NixLog :: Start { text, typ, id, .. }
@@ -193,7 +193,7 @@ impl Handler for NixHandler {
193193 span. pb_set_message ( & process_message ( text. trim ( ) ) ) ;
194194 }
195195 self . spans . insert ( id, span) ;
196- info ! ( target: "nix" , "{}" , text ) ;
196+ info ! ( target: "nix" , "{text}" ) ;
197197 }
198198 }
199199 NixLog :: Start {
@@ -243,30 +243,30 @@ impl Handler for NixHandler {
243243 id,
244244 ..
245245 } if text. starts_with ( "waiting for lock on " ) => {
246- let mut drv = text. strip_prefix ( "waiting for lock on " ) . unwrap ( ) ;
247- if let Some ( txt) = drv. strip_prefix ( "\u{1b} [35;1m'" ) {
248- drv = txt;
249- }
250- if let Some ( txt) = drv. strip_suffix ( "'\u{1b} [0m" ) {
251- drv = txt;
252- }
253- if let Some ( txt) = drv. split ( "', '" ) . next ( ) {
254- drv = txt;
255- }
256- if let Some ( pkg) = drv. strip_prefix ( "/nix/store/" ) {
257- let mut it = pkg. splitn ( 2 , '-' ) ;
258- it. next ( ) ;
259- if let Some ( pkg) = it. next ( ) {
260- drv = pkg;
261- }
262- }
263- let span = info_span ! ( "waiting on drv" , drv) ;
246+ let drv = strip_drv ( text. strip_prefix ( "waiting for lock on " ) . unwrap ( ) ) ;
247+
248+ let span = info_span ! ( "waiting for lock on drv" , drv) ;
264249 #[ cfg( feature = "indicatif" ) ]
265250 span. pb_start ( ) ;
266251 self . spans . insert ( id, span) ;
267252 // Concurrent build of the same message
268253 }
269- NixLog :: Stop { id, .. } => {
254+ NixLog :: Start {
255+ text,
256+ level : 1 ,
257+ fields,
258+ typ : 111 ,
259+ id,
260+ ..
261+ } if text. starts_with ( "waiting for a free build user ID for " ) && fields. is_empty ( ) => {
262+ let drv = strip_drv ( text. strip_prefix ( "waiting for a free build user ID for " ) . unwrap ( ) ) ;
263+
264+ let span = info_span ! ( "waiting for a free build user ID on drv" , drv) ;
265+ #[ cfg( feature = "indicatif" ) ]
266+ span. pb_start ( ) ;
267+ self . spans . insert ( id, span) ;
268+ }
269+ NixLog :: Stop { id, .. } => {
270270 self . spans . remove ( & id) ;
271271 }
272272 NixLog :: Result { fields, id, typ } if typ == 101 && !fields. is_empty ( ) => {
@@ -278,7 +278,7 @@ impl Handler for NixHandler {
278278 {
279279 let _span = span. enter ( ) ;
280280 info ! ( "{}" , process_message( s) ) ;
281- }
281+ }
282282 } else {
283283 warn ! ( "bad fields: {fields:?}" ) ;
284284 }
@@ -310,7 +310,7 @@ impl Handler for NixHandler {
310310 NixLog :: Result { typ, .. } if typ == 104 || typ == 106 => {
311311 // Set phase, expected
312312 }
313- _ => warn ! ( "unknown log: {:?}" , log ) ,
313+ log => warn ! ( "unknown log: {log :?}" ) ,
314314 } ;
315315 } else {
316316 let e = e. trim ( ) ;
@@ -321,3 +321,24 @@ impl Handler for NixHandler {
321321 }
322322 }
323323}
324+
325+ fn strip_drv ( mut drv : & str ) -> & str {
326+ if let Some ( txt) = drv. strip_prefix ( "\u{1b} [35;1m'" ) {
327+ drv = txt;
328+ }
329+ if let Some ( txt) = drv. strip_suffix ( "'\u{1b} [0m" ) {
330+ drv = txt;
331+ }
332+ if let Some ( txt) = drv. split ( "', '" ) . next ( ) {
333+ drv = txt;
334+ }
335+ if let Some ( pkg) = drv. strip_prefix ( "/nix/store/" ) {
336+ let mut it = pkg. splitn ( 2 , '-' ) ;
337+ it. next ( ) ;
338+ if let Some ( pkg) = it. next ( ) {
339+ drv = pkg;
340+ }
341+ }
342+
343+ drv
344+ }
0 commit comments