Skip to content

Commit 3df9444

Browse files
authored
perf(date): wrap stdout in BufWriter to improve batch processing (#9994)
1 parent 730b0a6 commit 3df9444

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

src/uu/date/locales/en-US.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,4 @@ date-error-setting-date-not-supported-macos = setting the date is not supported
105105
date-error-setting-date-not-supported-redox = setting the date is not supported by Redox
106106
date-error-cannot-set-date = cannot set date
107107
date-error-extra-operand = extra operand '{$operand}'
108+
date-error-write = write error: {$error}

src/uu/date/locales/fr-FR.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,4 @@ date-error-setting-date-not-supported-macos = la définition de la date n'est pa
100100
date-error-setting-date-not-supported-redox = la définition de la date n'est pas prise en charge par Redox
101101
date-error-cannot-set-date = impossible de définir la date
102102
date-error-extra-operand = opérande supplémentaire '{$operand}'
103+
date-error-write = erreur d'écriture: {$error}

src/uu/date/src/date.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use jiff::tz::{TimeZone, TimeZoneDatabase};
1313
use jiff::{Timestamp, Zoned};
1414
use std::collections::HashMap;
1515
use std::fs::File;
16-
use std::io::{BufRead, BufReader};
16+
use std::io::{BufRead, BufReader, BufWriter, Write};
1717
use std::path::PathBuf;
1818
use std::sync::OnceLock;
1919
use uucore::display::Quotable;
@@ -428,24 +428,31 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
428428
};
429429

430430
let format_string = make_format_string(&settings);
431+
let mut stdout = BufWriter::new(std::io::stdout().lock());
431432

432433
// Format all the dates
433434
for date in dates {
434435
match date {
435436
// TODO: Switch to lenient formatting.
436437
Ok(date) => match strtime::format(format_string, &date) {
437-
Ok(s) => println!("{s}"),
438+
Ok(s) => writeln!(stdout, "{s}").map_err(|e| {
439+
USimpleError::new(1, translate!("date-error-write", "error" => e))
440+
})?,
438441
Err(e) => {
442+
let _ = stdout.flush();
439443
return Err(USimpleError::new(
440444
1,
441445
translate!("date-error-invalid-format", "format" => format_string, "error" => e),
442446
));
443447
}
444448
},
445-
Err((input, _err)) => show!(USimpleError::new(
446-
1,
447-
translate!("date-error-invalid-date", "date" => input)
448-
)),
449+
Err((input, _err)) => {
450+
let _ = stdout.flush();
451+
show!(USimpleError::new(
452+
1,
453+
translate!("date-error-invalid-date", "date" => input)
454+
));
455+
}
449456
}
450457
}
451458

0 commit comments

Comments
 (0)