|
|
@@ -2,6 +2,7 @@ use ansiterm::Style;
|
|
|
use uzers::{Groups, Users};
|
|
|
|
|
|
use crate::fs::fields as f;
|
|
|
+use crate::fs::fields::User;
|
|
|
use crate::output::cell::TextCell;
|
|
|
use crate::output::table::{GroupFormat, UserFormat};
|
|
|
|
|
|
@@ -12,6 +13,7 @@ pub trait Render {
|
|
|
users: &U,
|
|
|
user_format: UserFormat,
|
|
|
group_format: GroupFormat,
|
|
|
+ file_user: Option<User>,
|
|
|
) -> TextCell;
|
|
|
}
|
|
|
|
|
|
@@ -22,6 +24,7 @@ impl Render for Option<f::Group> {
|
|
|
users: &U,
|
|
|
user_format: UserFormat,
|
|
|
group_format: GroupFormat,
|
|
|
+ file_user: Option<User>,
|
|
|
) -> TextCell {
|
|
|
use uzers::os::unix::GroupExt;
|
|
|
|
|
|
@@ -53,20 +56,15 @@ impl Render for Option<f::Group> {
|
|
|
UserFormat::Numeric => group.gid().to_string(),
|
|
|
};
|
|
|
|
|
|
- group_name = match group_format {
|
|
|
- GroupFormat::Smart => {
|
|
|
- if let Some(current_user) = users.get_user_by_uid(current_uid) {
|
|
|
- if current_user.name() == group.name() {
|
|
|
- ":".to_string()
|
|
|
- } else {
|
|
|
- group_name
|
|
|
+ if let GroupFormat::Smart = group_format {
|
|
|
+ if let Some(file_uid) = file_user {
|
|
|
+ if let Some(file_user) = users.get_user_by_uid(file_uid.0) {
|
|
|
+ if file_user.name().to_string_lossy() == group.name().to_string_lossy() {
|
|
|
+ group_name = ":".to_string();
|
|
|
}
|
|
|
- } else {
|
|
|
- group_name
|
|
|
}
|
|
|
}
|
|
|
- GroupFormat::Regular => group_name,
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
TextCell::paint(style, group_name)
|
|
|
}
|
|
|
@@ -109,20 +107,28 @@ pub mod test {
|
|
|
users.add_group(Group::new(100, "folk"));
|
|
|
|
|
|
let group = Some(f::Group(100));
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), "folk");
|
|
|
+ let file_user = Some(f::User(1000));
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), "folk");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Regular)
|
|
|
+ group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
+ )
|
|
|
);
|
|
|
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), "100");
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), "100");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
group.render(
|
|
|
&TestColours,
|
|
|
&users,
|
|
|
UserFormat::Numeric,
|
|
|
- GroupFormat::Regular
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
)
|
|
|
);
|
|
|
}
|
|
|
@@ -132,10 +138,17 @@ pub mod test {
|
|
|
let users = MockUsers::with_current_uid(1000);
|
|
|
|
|
|
let group = Some(f::Group(100));
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), "100");
|
|
|
+ let file_user = Some(f::User(1000));
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), "100");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Regular)
|
|
|
+ group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
+ )
|
|
|
);
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
@@ -143,7 +156,8 @@ pub mod test {
|
|
|
&TestColours,
|
|
|
&users,
|
|
|
UserFormat::Numeric,
|
|
|
- GroupFormat::Regular
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
)
|
|
|
);
|
|
|
}
|
|
|
@@ -155,10 +169,17 @@ pub mod test {
|
|
|
users.add_group(Group::new(100, "folk"));
|
|
|
|
|
|
let group = Some(f::Group(100));
|
|
|
- let expected = TextCell::paint_str(Fixed(80).normal(), "folk");
|
|
|
+ let file_user = Some(f::User(2));
|
|
|
+ let expected = TextCell::paint_str(TestColours.yours(), "folk");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Regular)
|
|
|
+ group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
+ )
|
|
|
)
|
|
|
}
|
|
|
|
|
|
@@ -171,24 +192,33 @@ pub mod test {
|
|
|
users.add_group(test_group);
|
|
|
|
|
|
let group = Some(f::Group(100));
|
|
|
- let expected = TextCell::paint_str(Fixed(80).normal(), "folk");
|
|
|
+ let file_user = Some(f::User(2));
|
|
|
+ let expected = TextCell::paint_str(TestColours.yours(), "folk");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Regular)
|
|
|
+ group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
+ )
|
|
|
)
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn overflow() {
|
|
|
let group = Some(f::Group(2_147_483_648));
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), "2147483648");
|
|
|
+ let file_user = Some(f::User(1000));
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), "2147483648");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
group.render(
|
|
|
&TestColours,
|
|
|
&MockUsers::with_current_uid(0),
|
|
|
UserFormat::Numeric,
|
|
|
- GroupFormat::Regular
|
|
|
+ GroupFormat::Regular,
|
|
|
+ file_user
|
|
|
)
|
|
|
);
|
|
|
}
|
|
|
@@ -196,33 +226,61 @@ pub mod test {
|
|
|
#[test]
|
|
|
fn smart() {
|
|
|
let mut users = MockUsers::with_current_uid(1000);
|
|
|
- users.add_user(User::new(1000, "user", 110));
|
|
|
+ users.add_user(User::new(1000, "user", 100));
|
|
|
+ users.add_user(User::new(1001, "http", 101));
|
|
|
users.add_group(Group::new(100, "user"));
|
|
|
users.add_group(Group::new(101, "http"));
|
|
|
|
|
|
- let same_group = Some(f::Group(100));
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), ":");
|
|
|
+ let user_group = Some(f::Group(100));
|
|
|
+ let user_file = Some(f::User(1000));
|
|
|
+ let expected = TextCell::paint_str(TestColours.yours(), ":");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- same_group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Smart)
|
|
|
+ user_group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Smart,
|
|
|
+ user_file
|
|
|
+ )
|
|
|
);
|
|
|
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), ":");
|
|
|
+ let expected = TextCell::paint_str(TestColours.yours(), ":");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- same_group.render(
|
|
|
+ user_group.render(
|
|
|
&TestColours,
|
|
|
&users,
|
|
|
UserFormat::Numeric,
|
|
|
- GroupFormat::Smart
|
|
|
+ GroupFormat::Smart,
|
|
|
+ user_file
|
|
|
)
|
|
|
);
|
|
|
|
|
|
let http_group = Some(f::Group(101));
|
|
|
- let expected = TextCell::paint_str(Fixed(81).normal(), "http");
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), "http");
|
|
|
assert_eq!(
|
|
|
expected,
|
|
|
- http_group.render(&TestColours, &users, UserFormat::Name, GroupFormat::Smart)
|
|
|
+ http_group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Smart,
|
|
|
+ user_file
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ let http_file = Some(f::User(1001));
|
|
|
+ let expected = TextCell::paint_str(TestColours.not_yours(), ":");
|
|
|
+ assert_eq!(
|
|
|
+ expected,
|
|
|
+ http_group.render(
|
|
|
+ &TestColours,
|
|
|
+ &users,
|
|
|
+ UserFormat::Name,
|
|
|
+ GroupFormat::Smart,
|
|
|
+ http_file
|
|
|
+ )
|
|
|
);
|
|
|
}
|
|
|
}
|