join: print unsorted line in error message

This expands the error message that is printed if either input file has
an unsorted line. Both the program name (join) and the offending line
are printed out with the message to match the behaviour of the GNU
utility.
This commit is contained in:
Cecylia Bocovich
2022-01-21 11:47:37 -05:00
parent 55a47f6fc0
commit 67878de379
2 changed files with 13 additions and 5 deletions
+7 -4
View File
@@ -235,6 +235,7 @@ impl Spec {
struct Line {
fields: Vec<Vec<u8>>,
string: Vec<u8>,
}
impl Line {
@@ -247,10 +248,10 @@ impl Line {
.map(Vec::from)
.collect(),
Sep::Char(sep) => string.split(|c| *c == sep).map(Vec::from).collect(),
Sep::Line => vec![string],
Sep::Line => vec![string.clone()],
};
Line { fields }
Line { fields, string }
}
/// Get field at index.
@@ -444,9 +445,11 @@ impl<'a> State<'a> {
if diff == Ordering::Greater {
eprintln!(
"{}:{}: is not sorted",
"{}: {}:{}: is not sorted: {}",
uucore::execution_phrase(),
self.file_name.maybe_quote(),
self.line_num
self.line_num,
String::from_utf8_lossy(&line.string)
);
// This is fatal if the check is enabled.
+6 -1
View File
@@ -283,11 +283,16 @@ fn missing_format_fields() {
#[test]
fn wrong_line_order() {
let ts = TestScenario::new(util_name!());
new_ucmd!()
.arg("fields_2.txt")
.arg("fields_4.txt")
.fails()
.stderr_is("fields_4.txt:5: is not sorted");
.stderr_is(&format!(
"{} {}: fields_4.txt:5: is not sorted: 11 g 5 gh",
ts.bin_path.to_string_lossy(),
ts.util_name
));
}
#[test]