Upgrade to latest Rust

Also, remove dependency on the Regex library by replacing the one place it was used with standard code that should hopefully be faster anyway.
This commit is contained in:
Ben S 2015-01-05 14:41:43 +00:00
parent ba36d4f7f0
commit d400231de5
3 changed files with 51 additions and 37 deletions

37
Cargo.lock generated
View File

@ -2,21 +2,25 @@
name = "exa"
version = "0.1.0"
dependencies = [
"ansi_term 0.4.0 (git+https://github.com/ogham/rust-ansi-term.git)",
"natord 1.0.2 (git+https://github.com/lifthrasiir/rust-natord.git)",
"ansi_term 0.4.1 (git+https://github.com/ogham/rust-ansi-term.git)",
"natord 1.0.3 (git+https://github.com/lifthrasiir/rust-natord.git)",
"number_prefix 0.2.0 (git+https://github.com/ogham/rust-number-prefix.git)",
"users 0.1.1 (git+https://github.com/ogham/rust-users.git)",
"users 0.2.0 (git+https://github.com/ogham/rust-users.git)",
]
[[package]]
name = "ansi_term"
version = "0.4.0"
source = "git+https://github.com/ogham/rust-ansi-term.git#df6fcf773bae488c2c3a1456295531d6803e638a"
version = "0.4.1"
source = "git+https://github.com/ogham/rust-ansi-term.git#6db0b81cf4517e482293351c133cf07cced8c703"
dependencies = [
"regex 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"regex_macros 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "natord"
version = "1.0.2"
source = "git+https://github.com/lifthrasiir/rust-natord.git#6a42c8c168646c9de390af734a2e9dbe48bfdb91"
version = "1.0.3"
source = "git+https://github.com/lifthrasiir/rust-natord.git#b3a70271270effd7233fc36aef97215015d53af4"
[[package]]
name = "number_prefix"
@ -24,7 +28,20 @@ version = "0.2.0"
source = "git+https://github.com/ogham/rust-number-prefix.git#e4b56f7661c7d1b414b62af36a0e592f77911e4f"
[[package]]
name = "users"
version = "0.1.1"
source = "git+https://github.com/ogham/rust-users.git#c2911ab96a2b2459333029dde3728bfb5847ef04"
name = "regex"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "regex_macros"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"regex 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "users"
version = "0.2.0"
source = "git+https://github.com/ogham/rust-users.git#63d2760c52ee0a8c1e5592dea088dc90fc069f26"

View File

@ -1,6 +1,5 @@
#![feature(phase, globs)]
extern crate regex;
#[phase(plugin)] extern crate regex_macros;
#![feature(globs)]
extern crate ansi_term;
extern crate number_prefix;
extern crate unicode;
@ -116,11 +115,11 @@ fn lines_view(files: Vec<File>) {
fn fit_into_grid(across: bool, console_width: uint, files: &Vec<File>) -> Option<(uint, Vec<uint>)> {
// TODO: this function could almost certainly be optimised...
// surely not *all* of the numbers of lines are worth searching through!
// Instead of numbers of columns, try to find the fewest number of *lines*
// that the output will fit in.
for num_lines in range(1, files.len()) {
// The number of columns is the number of files divided by the number
// of lines, *rounded up*.
let mut num_columns = files.len() / num_lines;

View File

@ -1,6 +1,5 @@
use std::io::{fs, IoResult};
use std::io;
use std::str::CowString;
use ansi_term::{ANSIString, Colour, Style};
use ansi_term::Style::Plain;
@ -49,16 +48,15 @@ impl<'a> File<'a> {
dir: parent,
stat: stat,
name: filename.to_string(),
ext: File::ext(filename),
ext: File::ext(filename.as_slice()),
}
}
fn ext(name: CowString) -> Option<String> {
fn ext(name: &'a str) -> Option<String> {
// The extension is the series of characters after a dot at
// the end of a filename. This deliberately also counts
// dotfiles - the ".git" folder has the extension "git".
let re = regex!(r"\.([^.]+)$");
re.captures(name.as_slice()).map(|caps| caps.at(1).to_string())
name.rfind('.').map(|pos| name.slice_from(pos + 1).to_string())
}
pub fn is_dotfile(&self) -> bool {
@ -209,7 +207,7 @@ impl<'a> File<'a> {
dir: self.dir,
stat: stat,
name: filename.to_string(),
ext: File::ext(filename.clone()),
ext: File::ext(filename.as_slice()),
});
// Statting a path usually fails because the file at the
@ -232,19 +230,19 @@ impl<'a> File<'a> {
GREY.paint("-").to_string()
}
else {
let result = match size_format {
SizeFormat::DecimalBytes => decimal_prefix(self.stat.size as f64),
SizeFormat::BinaryBytes => binary_prefix(self.stat.size as f64),
SizeFormat::JustBytes => return Green.bold().paint(self.stat.size.to_string().as_slice()).to_string(),
};
match result {
Standalone(bytes) => Green.bold().paint(bytes.to_string().as_slice()).to_string(),
Prefixed(prefix, n) => {
let number = if n < 10f64 { format!("{:.1}", n) } else { format!("{:.0}", n) };
format!("{}{}", Green.bold().paint(number.as_slice()), Green.paint(prefix.symbol()))
}
}
let result = match size_format {
SizeFormat::DecimalBytes => decimal_prefix(self.stat.size as f64),
SizeFormat::BinaryBytes => binary_prefix(self.stat.size as f64),
SizeFormat::JustBytes => return Green.bold().paint(self.stat.size.to_string().as_slice()).to_string(),
};
match result {
Standalone(bytes) => Green.bold().paint(bytes.to_string().as_slice()).to_string(),
Prefixed(prefix, n) => {
let number = if n < 10f64 { format!("{:.1}", n) } else { format!("{:.0}", n) };
format!("{}{}", Green.bold().paint(number.as_slice()), Green.paint(prefix.symbol()))
}
}
}
}
@ -270,10 +268,10 @@ impl<'a> File<'a> {
fn permissions_string(&self) -> String {
let bits = self.stat.perm;
let executable_colour = match self.stat.kind {
io::FileType::RegularFile => Green.bold().underline(),
_ => Green.bold(),
io::FileType::RegularFile => Green.bold().underline(),
_ => Green.bold(),
};
return format!("{}{}{}{}{}{}{}{}{}{}",
self.type_char(),