mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-06-19 07:32:20 +00:00
Use curlies consistently
This commit is contained in:
parent
e1d3512a69
commit
6ade060eb6
26
src/file.rs
26
src/file.rs
|
@ -37,7 +37,7 @@ impl<'a> File<'a> {
|
||||||
// encounters a link that's target is non-existent.
|
// encounters a link that's target is non-existent.
|
||||||
fs::lstat(&path).map(|stat| File::with_stat(stat, path.clone(), parent))
|
fs::lstat(&path).map(|stat| File::with_stat(stat, path.clone(), parent))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_stat(stat: io::FileStat, path: Path, parent: Option<&'a Dir<'a>>) -> File<'a> {
|
pub fn with_stat(stat: io::FileStat, path: Path, parent: Option<&'a Dir<'a>>) -> File<'a> {
|
||||||
let v = path.filename().unwrap(); // fails if / or . or ..
|
let v = path.filename().unwrap(); // fails if / or . or ..
|
||||||
let filename = String::from_utf8(v.to_vec()).unwrap_or_else(|_| panic!("Name was not valid UTF-8"));
|
let filename = String::from_utf8(v.to_vec()).unwrap_or_else(|_| panic!("Name was not valid UTF-8"));
|
||||||
|
@ -79,7 +79,7 @@ impl<'a> File<'a> {
|
||||||
if self.ext.is_none() {
|
if self.ext.is_none() {
|
||||||
return vec![];
|
return vec![];
|
||||||
}
|
}
|
||||||
|
|
||||||
let ext = self.ext.clone().unwrap();
|
let ext = self.ext.clone().unwrap();
|
||||||
match ext.as_slice() {
|
match ext.as_slice() {
|
||||||
"class" => vec![self.path.with_extension("java")], // Java
|
"class" => vec![self.path.with_extension("java")], // Java
|
||||||
|
@ -107,11 +107,11 @@ impl<'a> File<'a> {
|
||||||
Permissions => {
|
Permissions => {
|
||||||
self.permissions_string()
|
self.permissions_string()
|
||||||
},
|
},
|
||||||
|
|
||||||
FileName => {
|
FileName => {
|
||||||
self.file_name()
|
self.file_name()
|
||||||
},
|
},
|
||||||
|
|
||||||
FileSize(use_iec) => {
|
FileSize(use_iec) => {
|
||||||
self.file_size(use_iec)
|
self.file_size(use_iec)
|
||||||
},
|
},
|
||||||
|
@ -127,7 +127,7 @@ impl<'a> File<'a> {
|
||||||
Inode => {
|
Inode => {
|
||||||
Purple.paint(self.stat.unstable.inode.to_string().as_slice())
|
Purple.paint(self.stat.unstable.inode.to_string().as_slice())
|
||||||
},
|
},
|
||||||
|
|
||||||
Blocks => {
|
Blocks => {
|
||||||
if self.stat.kind == io::TypeFile || self.stat.kind == io::TypeSymlink {
|
if self.stat.kind == io::TypeFile || self.stat.kind == io::TypeSymlink {
|
||||||
Cyan.paint(self.stat.unstable.blocks.to_string().as_slice())
|
Cyan.paint(self.stat.unstable.blocks.to_string().as_slice())
|
||||||
|
@ -146,7 +146,7 @@ impl<'a> File<'a> {
|
||||||
let style = if unix.uid == uid { Yellow.bold() } else { Plain };
|
let style = if unix.uid == uid { Yellow.bold() } else { Plain };
|
||||||
style.paint(user_name.as_slice())
|
style.paint(user_name.as_slice())
|
||||||
},
|
},
|
||||||
|
|
||||||
Group => {
|
Group => {
|
||||||
let gid = self.stat.unstable.gid as u32;
|
let gid = self.stat.unstable.gid as u32;
|
||||||
unix.load_group(gid);
|
unix.load_group(gid);
|
||||||
|
@ -184,7 +184,8 @@ impl<'a> File<'a> {
|
||||||
fn target_file_name_and_arrow(&self, target_path: Path) -> String {
|
fn target_file_name_and_arrow(&self, target_path: Path) -> String {
|
||||||
let v = target_path.filename().unwrap();
|
let v = target_path.filename().unwrap();
|
||||||
let filename = String::from_utf8_lossy(v).to_string();
|
let filename = String::from_utf8_lossy(v).to_string();
|
||||||
|
|
||||||
|
// Use stat instead of lstat - we *want* to follow links.
|
||||||
let link_target = fs::stat(&target_path).map(|stat| File {
|
let link_target = fs::stat(&target_path).map(|stat| File {
|
||||||
path: target_path.clone(),
|
path: target_path.clone(),
|
||||||
dir: self.dir,
|
dir: self.dir,
|
||||||
|
@ -212,10 +213,12 @@ impl<'a> File<'a> {
|
||||||
// at one of those numbers and gained any information from it.
|
// at one of those numbers and gained any information from it.
|
||||||
if self.stat.kind == io::TypeDirectory {
|
if self.stat.kind == io::TypeDirectory {
|
||||||
GREY.paint("-")
|
GREY.paint("-")
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
let (size, suffix) = if use_iec_prefixes {
|
let (size, suffix) = if use_iec_prefixes {
|
||||||
format_IEC_bytes(self.stat.size)
|
format_IEC_bytes(self.stat.size)
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
format_metric_bytes(self.stat.size)
|
format_metric_bytes(self.stat.size)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -237,7 +240,7 @@ impl<'a> File<'a> {
|
||||||
pub fn file_colour(&self) -> Style {
|
pub fn file_colour(&self) -> Style {
|
||||||
self.get_type().style()
|
self.get_type().style()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn has_multiple_links(&self) -> bool {
|
fn has_multiple_links(&self) -> bool {
|
||||||
self.stat.kind == io::TypeFile && self.stat.unstable.nlink > 1
|
self.stat.kind == io::TypeFile && self.stat.unstable.nlink > 1
|
||||||
}
|
}
|
||||||
|
@ -264,7 +267,8 @@ impl<'a> File<'a> {
|
||||||
fn permission_bit(bits: io::FilePermission, bit: io::FilePermission, character: &'static str, style: Style) -> String {
|
fn permission_bit(bits: io::FilePermission, bit: io::FilePermission, character: &'static str, style: Style) -> String {
|
||||||
if bits.contains(bit) {
|
if bits.contains(bit) {
|
||||||
style.paint(character.as_slice())
|
style.paint(character.as_slice())
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
GREY.paint("-".as_slice())
|
GREY.paint("-".as_slice())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,6 @@ pub struct Options {
|
||||||
pub view: View,
|
pub view: View,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl Options {
|
impl Options {
|
||||||
pub fn getopts(args: Vec<String>) -> Result<Options, int> {
|
pub fn getopts(args: Vec<String>) -> Result<Options, int> {
|
||||||
let opts = [
|
let opts = [
|
||||||
|
@ -59,7 +58,7 @@ impl Options {
|
||||||
getopts::optflag("x", "across", "sort multi-column view entries across"),
|
getopts::optflag("x", "across", "sort multi-column view entries across"),
|
||||||
getopts::optflag("?", "help", "show list of command-line options"),
|
getopts::optflag("?", "help", "show list of command-line options"),
|
||||||
];
|
];
|
||||||
|
|
||||||
let matches = match getopts::getopts(args.tail(), &opts) {
|
let matches = match getopts::getopts(args.tail(), &opts) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -67,7 +66,7 @@ impl Options {
|
||||||
return Err(1);
|
return Err(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if matches.opt_present("help") {
|
if matches.opt_present("help") {
|
||||||
println!("exa - ls with more features\n\n{}", getopts::usage("Usage:\n exa [options] [files...]", &opts))
|
println!("exa - ls with more features\n\n{}", getopts::usage("Usage:\n exa [options] [files...]", &opts))
|
||||||
return Err(2);
|
return Err(2);
|
||||||
|
@ -83,7 +82,7 @@ impl Options {
|
||||||
view: Options::view(&matches),
|
view: Options::view(&matches),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn view(matches: &getopts::Matches) -> View {
|
fn view(matches: &getopts::Matches) -> View {
|
||||||
if matches.opt_present("long") {
|
if matches.opt_present("long") {
|
||||||
View::Details(Options::columns(matches))
|
View::Details(Options::columns(matches))
|
||||||
|
@ -98,7 +97,7 @@ impl Options {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn columns(matches: &getopts::Matches) -> Vec<Column> {
|
fn columns(matches: &getopts::Matches) -> Vec<Column> {
|
||||||
let mut columns = vec![];
|
let mut columns = vec![];
|
||||||
|
|
||||||
|
@ -111,7 +110,7 @@ impl Options {
|
||||||
if matches.opt_present("links") {
|
if matches.opt_present("links") {
|
||||||
columns.push(HardLinks);
|
columns.push(HardLinks);
|
||||||
}
|
}
|
||||||
|
|
||||||
columns.push(FileSize(matches.opt_present("binary")));
|
columns.push(FileSize(matches.opt_present("binary")));
|
||||||
|
|
||||||
if matches.opt_present("blocks") {
|
if matches.opt_present("blocks") {
|
||||||
|
|
|
@ -24,7 +24,8 @@ impl SortPart {
|
||||||
Some(num) => Numeric(num),
|
Some(num) => Numeric(num),
|
||||||
None => Stringular(slice.to_string()),
|
None => Stringular(slice.to_string()),
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
SortPart::Stringular(slice.to_ascii_lower())
|
SortPart::Stringular(slice.to_ascii_lower())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
18
src/unix.rs
18
src/unix.rs
|
@ -104,25 +104,21 @@ impl Unix {
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
|
|
||||||
// The list of members is a pointer to a pointer of
|
// The list of members is a pointer to a pointer of
|
||||||
// characters, terminated by a null pointer. So the first call
|
// characters, terminated by a null pointer.
|
||||||
// to `as_ref` will always succeed, as that memory is
|
|
||||||
// guaranteed to be there (unless we go past the end of RAM).
|
|
||||||
// The second call will return None if it's a null pointer.
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match unsafe { group.offset(i).as_ref() } {
|
match unsafe { group.offset(i).as_ref() } {
|
||||||
Some(&username) => {
|
Some(&username) => {
|
||||||
if username == ptr::null() {
|
if username == ptr::null() {
|
||||||
return false;
|
return false; // username was null, weird
|
||||||
}
|
}
|
||||||
else if unsafe { String::from_raw_buf(username as *const u8) } == *uname {
|
else if unsafe { String::from_raw_buf(username as *const u8) } == *uname {
|
||||||
return true;
|
return true; // group found!
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
i += 1;
|
i += 1; // try again with the next group
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
None => return false,
|
None => return false, // no more groups to check, and none found
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,9 +133,9 @@ impl Unix {
|
||||||
let group_name = unsafe { Some(String::from_raw_buf(r.gr_name as *const u8)) };
|
let group_name = unsafe { Some(String::from_raw_buf(r.gr_name as *const u8)) };
|
||||||
if !self.groups.contains_key(&gid) {
|
if !self.groups.contains_key(&gid) {
|
||||||
self.groups.insert(gid, Unix::group_membership(r.gr_mem, &self.username));
|
self.groups.insert(gid, Unix::group_membership(r.gr_mem, &self.username));
|
||||||
}
|
}
|
||||||
self.group_names.insert(gid, group_name);
|
self.group_names.insert(gid, group_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user