diff --git a/src/sort/sort.rs b/src/sort/sort.rs index 1abb854b5..ac0a17401 100644 --- a/src/sort/sort.rs +++ b/src/sort/sort.rs @@ -123,6 +123,7 @@ With no FILE, or when FILE is -, read standard input.", NAME, VERSION); } fn exec(files: Vec, settings: &Settings) { + let mut lines = Vec::new(); for path in &files { let (reader, _) = match open(path) { Some(x) => x, @@ -130,7 +131,6 @@ fn exec(files: Vec, settings: &Settings) { }; let buf_reader = BufReader::new(reader); - let mut lines = Vec::new(); for line in buf_reader.lines() { match line { @@ -140,26 +140,26 @@ fn exec(files: Vec, settings: &Settings) { _ => break } } - - match settings.mode { - SortMode::Numeric => lines.sort_by(numeric_compare), - SortMode::HumanNumeric => lines.sort_by(human_numeric_size_compare), - SortMode::Month => lines.sort_by(month_compare), - SortMode::Version => lines.sort_by(version_compare), - SortMode::Default => lines.sort() - } - - if settings.unique { - lines.dedup() - } - - let iter = lines.iter(); - if settings.reverse { - print_sorted(iter.rev(), &settings.outfile); - } else { - print_sorted(iter, &settings.outfile) - }; } + + match settings.mode { + SortMode::Numeric => lines.sort_by(numeric_compare), + SortMode::HumanNumeric => lines.sort_by(human_numeric_size_compare), + SortMode::Month => lines.sort_by(month_compare), + SortMode::Version => lines.sort_by(version_compare), + SortMode::Default => lines.sort() + } + + if settings.unique { + lines.dedup() + } + + let iter = lines.iter(); + if settings.reverse { + print_sorted(iter.rev(), &settings.outfile); + } else { + print_sorted(iter, &settings.outfile) + }; } /// Parse the beginning string into an f64, returning -inf instead of NaN on errors. diff --git a/tests/fixtures/sort/multiple_files.expected b/tests/fixtures/sort/multiple_files.expected new file mode 100644 index 000000000..071939893 --- /dev/null +++ b/tests/fixtures/sort/multiple_files.expected @@ -0,0 +1,9 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 diff --git a/tests/fixtures/sort/multiple_files1.txt b/tests/fixtures/sort/multiple_files1.txt new file mode 100644 index 000000000..8cb0f1f46 --- /dev/null +++ b/tests/fixtures/sort/multiple_files1.txt @@ -0,0 +1,4 @@ +3 +7 +2 +5 diff --git a/tests/fixtures/sort/multiple_files2.txt b/tests/fixtures/sort/multiple_files2.txt new file mode 100644 index 000000000..7f0581d7c --- /dev/null +++ b/tests/fixtures/sort/multiple_files2.txt @@ -0,0 +1,5 @@ +4 +8 +1 +9 +6 diff --git a/tests/test_sort.rs b/tests/test_sort.rs index 50e22d80f..cd2035710 100644 --- a/tests/test_sort.rs +++ b/tests/test_sort.rs @@ -52,6 +52,16 @@ fn test_version() { test_helper("version", "-V"); } +#[test] +fn test_multiple_files() { + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-n"); + ucmd.arg("multiple_files1.txt"); + ucmd.arg("multiple_files2.txt"); + let out = ucmd.run().stdout; + assert_eq!(out, at.read("multiple_files.expected")); +} + fn test_helper(file_name: &str, args: &str) { let (at, mut ucmd) = testing(UTIL_NAME); ucmd.arg(args);