fix: number-of-lines option in config file is ignored (#528)

Co-authored-by: andy.boot <bootandy@gmail.com>
This commit is contained in:
Vaso Putica
2025-10-06 21:22:35 +02:00
committed by GitHub
parent 7974e2eaf0
commit 96e04fe168
2 changed files with 40 additions and 1 deletions

View File

@@ -36,6 +36,7 @@ pub struct Config {
pub output_json: Option<bool>, pub output_json: Option<bool>,
pub print_errors: Option<bool>, pub print_errors: Option<bool>,
pub files0_from: Option<String>, pub files0_from: Option<String>,
pub number_of_lines: Option<usize>,
pub files_from: Option<String>, pub files_from: Option<String>,
} }
@@ -156,6 +157,15 @@ impl Config {
Some(true) == self.output_json || options.output_json Some(true) == self.output_json || options.output_json
} }
pub fn get_number_of_lines(&self, options: &Cli) -> Option<usize> {
let from_cmd_line = options.number_of_lines;
if from_cmd_line.is_none() {
self.number_of_lines
} else {
from_cmd_line
}
}
pub fn get_modified_time_operator(&self, options: &Cli) -> Option<(Operator, i64)> { pub fn get_modified_time_operator(&self, options: &Cli) -> Option<(Operator, i64)> {
get_filter_time_operator(options.mtime.as_ref(), get_current_date_epoch_seconds()) get_filter_time_operator(options.mtime.as_ref(), get_current_date_epoch_seconds())
} }
@@ -389,4 +399,33 @@ mod tests {
fn get_filetime_args(args: Vec<&str>) -> Cli { fn get_filetime_args(args: Vec<&str>) -> Cli {
Cli::parse_from(args) Cli::parse_from(args)
} }
#[test]
fn test_get_number_of_lines() {
// No config and no flag.
let c = Config::default();
let args = get_args(vec![]);
assert_eq!(c.get_number_of_lines(&args), None);
// Config is not defined and flag is defined.
let c = Config::default();
let args = get_args(vec!["dust", "--number-of-lines", "5"]);
assert_eq!(c.get_number_of_lines(&args), Some(5));
// Config is defined and flag is not defined.
let c = Config {
number_of_lines: Some(3),
..Default::default()
};
let args = get_args(vec![]);
assert_eq!(c.get_number_of_lines(&args), Some(3));
// Both config and flag are defined.
let c = Config {
number_of_lines: Some(3),
..Default::default()
};
let args = get_args(vec!["dust", "--number-of-lines", "5"]);
assert_eq!(c.get_number_of_lines(&args), Some(5));
}
} }

View File

@@ -154,7 +154,7 @@ fn main() {
// If depth is set, then we set the default number_of_lines to be max // If depth is set, then we set the default number_of_lines to be max
// instead of screen height // instead of screen height
let number_of_lines = match options.number_of_lines { let number_of_lines = match config.get_number_of_lines(&options) {
Some(val) => val, Some(val) => val,
None => { None => {
if depth != usize::MAX { if depth != usize::MAX {