mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
sort --merge --unique
This uses Itertools' dedup() rather than Vec::dedup(). There is probably a cleaner, more polymorphic way to do this. Suggestions welcome.
This commit is contained in:
parent
e1af1520e7
commit
3531c46fb8
3 changed files with 30 additions and 6 deletions
|
@ -11,6 +11,7 @@ path = "sort.rs"
|
||||||
getopts = "*"
|
getopts = "*"
|
||||||
libc = "*"
|
libc = "*"
|
||||||
semver = "*"
|
semver = "*"
|
||||||
|
itertools = "*"
|
||||||
uucore = { path="../uucore" }
|
uucore = { path="../uucore" }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|
|
@ -17,6 +17,8 @@ extern crate semver;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate itertools;
|
||||||
|
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
use std::collections::BinaryHeap;
|
use std::collections::BinaryHeap;
|
||||||
|
@ -26,6 +28,7 @@ use std::mem::replace;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use uucore::fs::is_stdin_interactive;
|
use uucore::fs::is_stdin_interactive;
|
||||||
use semver::Version;
|
use semver::Version;
|
||||||
|
use itertools::Itertools; // for Iterator::dedup()
|
||||||
|
|
||||||
static NAME: &'static str = "sort";
|
static NAME: &'static str = "sort";
|
||||||
static VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
static VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
||||||
|
@ -261,10 +264,6 @@ fn exec(files: Vec<String>, settings: &Settings) -> i32 {
|
||||||
|
|
||||||
sort_by(&mut lines, &settings);
|
sort_by(&mut lines, &settings);
|
||||||
|
|
||||||
if settings.unique {
|
|
||||||
lines.dedup()
|
|
||||||
}
|
|
||||||
|
|
||||||
if settings.check {
|
if settings.check {
|
||||||
for (i, line) in lines.iter().enumerate() {
|
for (i, line) in lines.iter().enumerate() {
|
||||||
if line != &original_lines[i] {
|
if line != &original_lines[i] {
|
||||||
|
@ -274,10 +273,20 @@ fn exec(files: Vec<String>, settings: &Settings) -> i32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if settings.merge {
|
else if settings.merge {
|
||||||
print_sorted(file_merger, &settings.outfile)
|
if settings.unique {
|
||||||
|
print_sorted(file_merger.dedup(), &settings.outfile)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print_sorted(file_merger, &settings.outfile)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print_sorted(lines.iter(), &settings.outfile)
|
if settings.unique {
|
||||||
|
print_sorted(lines.iter().dedup(), &settings.outfile)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print_sorted(lines.iter(), &settings.outfile)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
0
|
0
|
||||||
|
|
|
@ -80,6 +80,20 @@ fn test_merge_interleaved() {
|
||||||
.succeeds().stdout_is_fixture("merge_ints_interleaved.expected");
|
.succeeds().stdout_is_fixture("merge_ints_interleaved.expected");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_merge_unique() {
|
||||||
|
new_ucmd()
|
||||||
|
.arg("-m")
|
||||||
|
.arg("--unique")
|
||||||
|
.arg("merge_ints_interleaved_1.txt")
|
||||||
|
.arg("merge_ints_interleaved_2.txt")
|
||||||
|
.arg("merge_ints_interleaved_3.txt")
|
||||||
|
.arg("merge_ints_interleaved_3.txt")
|
||||||
|
.arg("merge_ints_interleaved_2.txt")
|
||||||
|
.arg("merge_ints_interleaved_1.txt")
|
||||||
|
.succeeds().stdout_is_fixture("merge_ints_interleaved.expected");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_merge_reversed() {
|
fn test_merge_reversed() {
|
||||||
new_ucmd()
|
new_ucmd()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue