Skip to content

Commit be04c98

Browse files
committed
feat: support typ 111 in nix log parser
1 parent 0f6e11e commit be04c98

2 files changed

Lines changed: 49 additions & 28 deletions

File tree

cmds/install-secrets/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ fn install(data: &Path) -> anyhow::Result<()> {
200200

201201
if data.is_empty() {
202202
info!("no secrets to install");
203-
return Ok(())
203+
return Ok(());
204204
}
205205

206206
let identity = host_identity()?;

crates/better-command/src/handler.rs

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)