From ba335bb6e7d8924571ed9a4450bb6ef4f78b0be9 Mon Sep 17 00:00:00 2001 From: Benjamin Sago Date: Wed, 5 Jul 2017 21:54:43 +0100 Subject: [PATCH] Separate TimeFormat from the Environment By moving it outside of the Environment::load_all() constructor, it can be set to different values. --- src/options/view.rs | 2 ++ src/output/table.rs | 17 +++++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/options/view.rs b/src/options/view.rs index 48ea834..734685f 100644 --- a/src/options/view.rs +++ b/src/options/view.rs @@ -6,6 +6,7 @@ use output::Colours; use output::{grid, details}; use output::table::{TimeTypes, Environment, SizeFormat, Options as TableOptions}; use output::file_name::Classify; +use output::time::TimeFormat; use options::Misfire; use fs::feature::xattr; @@ -198,6 +199,7 @@ impl TableOptions { fn deduce(matches: &getopts::Matches) -> Result { Ok(TableOptions { env: Environment::load_all(), + time_format: TimeFormat::deduce(), size_format: SizeFormat::deduce(matches)?, time_types: TimeTypes::deduce(matches)?, inode: matches.opt_present("inode"), diff --git a/src/output/table.rs b/src/output/table.rs index f5dce9d..0df306d 100644 --- a/src/output/table.rs +++ b/src/output/table.rs @@ -22,6 +22,7 @@ use fs::{File, Dir, fields as f}; pub struct Options { pub env: Environment, pub size_format: SizeFormat, + pub time_format: TimeFormat, pub time_types: TimeTypes, pub inode: bool, pub links: bool, @@ -230,9 +231,6 @@ pub struct Environment { /// Localisation rules for formatting numbers. numeric: locale::Numeric, - /// Rules for formatting timestamps. - time_format: TimeFormat, - /// The computer's current time zone. This gets used to determine how to /// offset files' timestamps. tz: Option, @@ -255,14 +253,12 @@ impl Environment { } }; - let time_format = TimeFormat::deduce(); - let numeric = locale::Numeric::load_user_locale() .unwrap_or_else(|_| locale::Numeric::english()); let users = Mutex::new(UsersCache::new()); - Environment { tz, time_format, numeric, users } + Environment { tz, numeric, users } } } @@ -279,6 +275,7 @@ pub struct Table<'a> { colours: &'a Colours, env: &'a Environment, widths: TableWidths, + time_format: &'a TimeFormat, } #[derive(Clone)] @@ -290,7 +287,7 @@ impl<'a, 'f> Table<'a> { pub fn new(options: &'a Options, dir: Option<&'a Dir>, colours: &'a Colours) -> Table<'a> { let colz = options.for_dir(dir); let widths = TableWidths::zero(colz.len()); - Table { columns: colz, colours, env: &options.env, widths } + Table { columns: colz, colours, env: &options.env, widths, time_format: &options.time_format } } pub fn widths(&self) -> &TableWidths { @@ -338,9 +335,9 @@ impl<'a, 'f> Table<'a> { Column::Group => file.group().render(&self.colours, &*self.env.lock_users()), Column::GitStatus => file.git_status().render(&self.colours), - Column::Timestamp(Modified) => file.modified_time().render(&self.colours, &self.env.tz, &self.env.time_format), - Column::Timestamp(Created) => file.created_time().render( &self.colours, &self.env.tz, &self.env.time_format), - Column::Timestamp(Accessed) => file.accessed_time().render(&self.colours, &self.env.tz, &self.env.time_format), + Column::Timestamp(Modified) => file.modified_time().render(&self.colours, &self.env.tz, &self.time_format), + Column::Timestamp(Created) => file.created_time().render( &self.colours, &self.env.tz, &self.time_format), + Column::Timestamp(Accessed) => file.accessed_time().render(&self.colours, &self.env.tz, &self.time_format), } } -- GitLab