mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
tail: Refactor paths::Input::from method, Settings::inputs now use Vec instead of VecDeque
This commit is contained in:
parent
89d6b8dfea
commit
08e8b40e45
3 changed files with 17 additions and 23 deletions
|
@ -12,7 +12,6 @@ use clap::{Arg, ArgAction, ArgMatches, Command};
|
|||
use fundu::DurationParser;
|
||||
use is_terminal::IsTerminal;
|
||||
use same_file::Handle;
|
||||
use std::collections::VecDeque;
|
||||
use std::ffi::OsString;
|
||||
use std::time::Duration;
|
||||
use uucore::error::{UResult, USimpleError, UUsageError};
|
||||
|
@ -141,7 +140,8 @@ pub struct Settings {
|
|||
pub use_polling: bool,
|
||||
pub verbose: bool,
|
||||
pub presume_input_pipe: bool,
|
||||
pub inputs: VecDeque<Input>,
|
||||
/// `FILE(s)` positional arguments
|
||||
pub inputs: Vec<Input>,
|
||||
}
|
||||
|
||||
impl Default for Settings {
|
||||
|
@ -173,11 +173,11 @@ impl Settings {
|
|||
}
|
||||
settings.mode = FilterMode::from_obsolete_args(args);
|
||||
let input = if let Some(name) = name {
|
||||
Input::from(&name)
|
||||
Input::from(name)
|
||||
} else {
|
||||
Input::default()
|
||||
};
|
||||
settings.inputs.push_back(input);
|
||||
settings.inputs.push(input);
|
||||
settings
|
||||
}
|
||||
|
||||
|
@ -282,19 +282,13 @@ impl Settings {
|
|||
}
|
||||
}
|
||||
|
||||
let mut inputs: VecDeque<Input> = matches
|
||||
.get_many::<String>(options::ARG_FILES)
|
||||
.map(|v| v.map(|string| Input::from(&string)).collect())
|
||||
.unwrap_or_default();
|
||||
settings.inputs = matches
|
||||
.get_raw(options::ARG_FILES)
|
||||
.map(|v| v.map(Input::from).collect())
|
||||
.unwrap_or_else(|| vec![Input::default()]);
|
||||
|
||||
// apply default and add '-' to inputs if none is present
|
||||
if inputs.is_empty() {
|
||||
inputs.push_front(Input::default());
|
||||
}
|
||||
|
||||
settings.verbose = inputs.len() > 1 && !matches.get_flag(options::verbosity::QUIET);
|
||||
|
||||
settings.inputs = inputs;
|
||||
settings.verbose =
|
||||
settings.inputs.len() > 1 && !matches.get_flag(options::verbosity::QUIET);
|
||||
|
||||
Ok(settings)
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ use crate::follow::files::{FileHandling, PathData};
|
|||
use crate::paths::{Input, InputKind, MetadataExtTail, PathExtTail};
|
||||
use crate::{platform, text};
|
||||
use notify::{RecommendedWatcher, RecursiveMode, Watcher, WatcherKind};
|
||||
use std::collections::VecDeque;
|
||||
use std::io::BufRead;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::mpsc::{self, channel, Receiver};
|
||||
|
@ -270,7 +269,7 @@ impl Observer {
|
|||
self.follow_name() && self.retry
|
||||
}
|
||||
|
||||
fn init_files(&mut self, inputs: &VecDeque<Input>) -> UResult<()> {
|
||||
fn init_files(&mut self, inputs: &Vec<Input>) -> UResult<()> {
|
||||
if let Some(watcher_rx) = &mut self.watcher_rx {
|
||||
for input in inputs {
|
||||
match input.kind() {
|
||||
|
|
|
@ -27,20 +27,21 @@ pub struct Input {
|
|||
}
|
||||
|
||||
impl Input {
|
||||
pub fn from<T: AsRef<OsStr>>(string: &T) -> Self {
|
||||
let kind = if string.as_ref() == Path::new(text::DASH) {
|
||||
pub fn from<T: AsRef<OsStr>>(string: T) -> Self {
|
||||
let string = string.as_ref();
|
||||
let kind = if string == OsStr::new(text::DASH) {
|
||||
InputKind::Stdin
|
||||
} else {
|
||||
InputKind::File(PathBuf::from(string.as_ref()))
|
||||
InputKind::File(PathBuf::from(string))
|
||||
};
|
||||
|
||||
let display_name = match kind {
|
||||
InputKind::File(_) => string.as_ref().to_string_lossy().to_string(),
|
||||
InputKind::File(_) => string.to_string_lossy().to_string(),
|
||||
InputKind::Stdin => {
|
||||
if cfg!(unix) {
|
||||
text::STDIN_HEADER.to_string()
|
||||
} else {
|
||||
string.as_ref().to_string_lossy().to_string()
|
||||
string.to_string_lossy().to_string()
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue