summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBen S <ogham@bsago.me>2016-02-10 15:22:43 +0000
committerBen S <ogham@bsago.me>2016-02-10 15:22:43 +0000
commit75b2748ab19a27f5340f43d755a53b02beb0daf0 (patch)
tree76c8e70012de88ff19a3790b6b67846697891c1b /src
parente1d2c3f46e0284bb05d00289feefd262fe34872c (diff)
Update packages to latest versions
- Users v0.5.1, which renames OSUsers to UsersCache - Locale v0.2, which returns to libc v0.1 - Datetime v0.4.2, which mimics the locale update, and puts timezone definitions in: - Zoneinfo-data, which is needed to obtain the current timezone
Diffstat (limited to 'src')
-rw-r--r--src/main.rs1
-rw-r--r--src/output/details.rs65
-rw-r--r--src/output/grid_details.rs6
3 files changed, 33 insertions, 39 deletions
diff --git a/src/main.rs b/src/main.rs
index e290853..99f386a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -14,6 +14,7 @@ extern crate scoped_threadpool;
extern crate term_grid;
extern crate unicode_width;
extern crate users;
+extern crate zoneinfo_data;
#[cfg(feature="git")] extern crate git2;
#[macro_use] extern crate lazy_static;
diff --git a/src/output/details.rs b/src/output/details.rs
index c292217..9bd4cb0 100644
--- a/src/output/details.rs
+++ b/src/output/details.rs
@@ -71,7 +71,6 @@
//! are used in place of the filename.
-use std::error::Error;
use std::io;
use std::ops::Add;
use std::path::PathBuf;
@@ -80,13 +79,14 @@ use std::sync::{Arc, Mutex};
use ansi_term::Style;
-use datetime::format::DateFormat;
-use datetime::local::{LocalDateTime, DatePiece};
-use datetime::zoned::TimeZone;
+use datetime::fmt::DateFormat;
+use datetime::{LocalDateTime, DatePiece};
+use datetime::TimeZone;
+use zoneinfo_data::ZoneinfoData;
use locale;
-use users::{OSUsers, Users, Groups};
+use users::{Users, Groups, UsersCache};
use dir::Dir;
use feature::xattr::{Attribute, FileAttributes};
@@ -162,14 +162,14 @@ pub struct Environment<U: Users+Groups> {
users: Mutex<U>,
}
-impl Default for Environment<OSUsers> {
+impl Default for Environment<UsersCache> {
fn default() -> Self {
Environment {
current_year: LocalDateTime::now().year(),
numeric: locale::Numeric::load_user_locale().unwrap_or_else(|_| locale::Numeric::english()),
time: locale::Time::load_user_locale().unwrap_or_else(|_| locale::Time::english()),
- tz: TimeZone::localtime().unwrap(),
- users: Mutex::new(OSUsers::empty_cache()),
+ tz: TimeZone::system().expect("Unable to determine time zone"),
+ users: Mutex::new(UsersCache::new()),
}
}
}
@@ -188,7 +188,7 @@ impl Details {
};
// Then, retrieve various environment variables.
- let env = Arc::new(Environment::<OSUsers>::default());
+ let env = Arc::new(Environment::<UsersCache>::default());
// Build the table to put rows in.
let mut table = Table {
@@ -577,7 +577,7 @@ impl<'a, U: Users+Groups+'a> Table<'a, U> {
#[allow(trivial_numeric_casts)]
fn render_time(&self, timestamp: f::Time) -> TextCell {
- let date = self.env.tz.at(LocalDateTime::at(timestamp.0 as i64));
+ let date = self.env.tz.to_zoned(LocalDateTime::at(timestamp.0 as i64));
let datestamp = if date.year() == self.env.current_year {
DATE_AND_TIME.format(&date, &self.env.time)
@@ -613,7 +613,7 @@ impl<'a, U: Users+Groups+'a> Table<'a, U> {
let user_name = match users.get_user_by_uid(user.0) {
- Some(user) => (*user.name).clone(),
+ Some(user) => user.name().to_owned(),
None => user.0.to_string(),
};
@@ -623,6 +623,8 @@ impl<'a, U: Users+Groups+'a> Table<'a, U> {
}
fn render_group(&self, group: f::Group) -> TextCell {
+ use users::os::unix::GroupExt;
+
let mut style = self.opts.colours.users.group_not_yours;
let users = self.env.users.lock().unwrap();
@@ -633,13 +635,13 @@ impl<'a, U: Users+Groups+'a> Table<'a, U> {
let current_uid = users.get_current_uid();
if let Some(current_user) = users.get_user_by_uid(current_uid) {
- if current_user.primary_group == group.gid
- || group.members.contains(&current_user.name) {
+ if current_user.primary_group_id() == group.gid()
+ || group.members().contains(&current_user.name().to_owned()) {
style = self.opts.colours.users.group_yours;
}
}
- TextCell::paint(style, (*group.name).clone())
+ TextCell::paint(style, group.name().to_owned())
}
/// Render the table as a vector of Cells, to be displayed on standard output.
@@ -720,6 +722,7 @@ pub mod test {
pub use users::{User, Group, uid_t, gid_t};
pub use users::mock::MockUsers;
+ pub use users::os::unix::{UserExt, GroupExt};
pub use ansi_term::Style;
pub use ansi_term::Colour::*;
@@ -727,7 +730,8 @@ pub mod test {
impl Default for Environment<MockUsers> {
fn default() -> Self {
use locale;
- use datetime::zoned::TimeZone;
+ use datetime::TimeZone;
+ use zoneinfo_data::ZoneinfoData;
use users::mock::MockUsers;
use std::sync::Mutex;
@@ -735,7 +739,7 @@ pub mod test {
current_year: 1234,
numeric: locale::Numeric::english(),
time: locale::Time::english(),
- tz: TimeZone::localtime().unwrap(),
+ tz: TimeZone::system().unwrap(),
users: Mutex::new(MockUsers::with_current_uid(0)),
}
}
@@ -752,19 +756,6 @@ pub mod test {
}
}
-
- pub fn newser(uid: uid_t, name: &str, group: gid_t) -> User {
- use std::sync::Arc;
-
- User {
- uid: uid,
- name: Arc::new(name.to_string()),
- primary_group: group,
- home_dir: String::new(),
- shell: String::new(),
- }
- }
-
mod users {
#![allow(unused_results)]
use super::*;
@@ -779,7 +770,7 @@ pub mod test {
let mut table = new_table(&columns, &details);
let mut users = MockUsers::with_current_uid(1000);
- users.add_user(newser(1000, "enoch", 100));
+ users.add_user(User::new(1000, "enoch", 100));
Arc::get_mut(&mut table.env).unwrap().users = Mutex::new(users);
let user = f::User(1000);
@@ -811,7 +802,7 @@ pub mod test {
let table = new_table(&columns, &details);
- table.env.users.lock().unwrap().add_user(newser(1000, "enoch", 100));
+ table.env.users.lock().unwrap().add_user(User::new(1000, "enoch", 100));
let user = f::User(1000);
let expected = TextCell::paint_str(Green.bold(), "enoch");
@@ -859,7 +850,7 @@ pub mod test {
let mut table = new_table(&columns, &details);
let mut users = MockUsers::with_current_uid(1000);
- users.add_group(Group { gid: 100, name: Arc::new("folk".to_string()), members: vec![] });
+ users.add_group(Group::new(100, "folk"));
Arc::get_mut(&mut table.env).unwrap().users = Mutex::new(users);
let group = f::Group(100);
@@ -892,8 +883,8 @@ pub mod test {
let mut table = new_table(&columns, &details);
let mut users = MockUsers::with_current_uid(2);
- users.add_user(newser(2, "eve", 100));
- users.add_group(Group { gid: 100, name: Arc::new("folk".to_string()), members: vec![] });
+ users.add_user(User::new(2, "eve", 100));
+ users.add_group(Group::new(100, "folk"));
Arc::get_mut(&mut table.env).unwrap().users = Mutex::new(users);
let group = f::Group(100);
@@ -910,8 +901,10 @@ pub mod test {
let mut table = new_table(&columns, &details);
let mut users = MockUsers::with_current_uid(2);
- users.add_user(newser(2, "eve", 666));
- users.add_group(Group { gid: 100, name: Arc::new("folk".to_string()), members: vec![ "eve".to_string() ] });
+ users.add_user(User::new(2, "eve", 666));
+
+ let test_group = Group::new(100, "folk").add_member("eve");
+ users.add_group(test_group);
Arc::get_mut(&mut table.env).unwrap().users = Mutex::new(users);
let group = f::Group(100);
diff --git a/src/output/grid_details.rs b/src/output/grid_details.rs
index d3cda3e..422fc35 100644
--- a/src/output/grid_details.rs
+++ b/src/output/grid_details.rs
@@ -1,7 +1,7 @@
use std::sync::Arc;
use ansi_term::ANSIStrings;
-use users::OSUsers;
+use users::UsersCache;
use term_grid as grid;
use dir::Dir;
@@ -70,7 +70,7 @@ impl GridDetails {
}
}
- fn make_table<'a>(&'a self, env: Arc<Environment<OSUsers>>, columns_for_dir: &'a [Column]) -> Table<OSUsers> {
+ fn make_table<'a>(&'a self, env: Arc<Environment<UsersCache>>, columns_for_dir: &'a [Column]) -> Table<UsersCache> {
let mut table = Table {
columns: columns_for_dir,
opts: &self.details,
@@ -83,7 +83,7 @@ impl GridDetails {
table
}
- fn make_grid<'a>(&'a self, env: Arc<Environment<OSUsers>>, column_count: usize, columns_for_dir: &'a [Column], file_names: &[TextCell], cells: Vec<Vec<TextCell>>) -> grid::Grid {
+ fn make_grid<'a>(&'a self, env: Arc<Environment<UsersCache>>, column_count: usize, columns_for_dir: &'a [Column], file_names: &[TextCell], cells: Vec<Vec<TextCell>>) -> grid::Grid {
let mut tables = Vec::new();
for _ in 0 .. column_count {
tables.push(self.make_table(env.clone(), columns_for_dir));