Просмотр исходного кода

Upgrade to latest Rust

Still missing a few Beta features, but it compiles!

- Copy requires Clone
- current_dir returns a Path now
- num_cpus moved to a crate
Benjamin Sago 11 лет назад
Родитель
Сommit
f885568145
11 измененных файлов с 83 добавлено и 60 удалено
  1. 54 41
      Cargo.lock
  2. 1 0
      Cargo.toml
  3. 1 1
      src/column.rs
  4. 1 1
      src/feature/xattr_darwin.rs
  5. 1 1
      src/feature/xattr_linux.rs
  6. 12 3
      src/file.rs
  7. 1 1
      src/filetype.rs
  8. 2 2
      src/main.rs
  9. 8 8
      src/options.rs
  10. 1 1
      src/output/details.rs
  11. 1 1
      src/output/grid.rs

+ 54 - 41
Cargo.lock

@@ -2,21 +2,22 @@
 name = "exa"
 version = "0.2.0"
 dependencies = [
- "ansi_term 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ansi_term 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "datetime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "getopts 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "git2 0.2.6 (git+https://github.com/alexcrichton/git2-rs.git)",
+ "getopts 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "git2 0.2.8 (git+https://github.com/alexcrichton/git2-rs.git)",
  "locale 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "natord 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "number_prefix 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "pad 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "users 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ansi_term"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -31,49 +32,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "locale 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "pad 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex_macros 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex_macros 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "gcc"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "getopts"
-version = "0.2.5"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "log 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "git2"
-version = "0.2.6"
-source = "git+https://github.com/alexcrichton/git2-rs.git#e79e709310196873a4e6a8e5893295ea9d0fab56"
+version = "0.2.8"
+source = "git+https://github.com/alexcrichton/git2-rs.git#1f2cb994360df26a7a84c8ed17dd14929ba7dcd7"
 dependencies = [
  "bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libgit2-sys 0.2.7 (git+https://github.com/alexcrichton/git2-rs.git)",
- "url 0.2.28 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libgit2-sys 0.2.10 (git+https://github.com/alexcrichton/git2-rs.git)",
+ "url 0.2.29 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "libc"
-version = "0.1.3"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "libgit2-sys"
-version = "0.2.7"
-source = "git+https://github.com/alexcrichton/git2-rs.git#e79e709310196873a4e6a8e5893295ea9d0fab56"
+version = "0.2.10"
+source = "git+https://github.com/alexcrichton/git2-rs.git#1f2cb994360df26a7a84c8ed17dd14929ba7dcd7"
 dependencies = [
- "libc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libssh2-sys 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libssh2-sys 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "libz-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl-sys 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -86,13 +87,13 @@ dependencies = [
 
 [[package]]
 name = "libssh2-sys"
-version = "0.1.15"
+version = "0.1.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libz-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "openssl-sys 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -100,7 +101,7 @@ name = "libz-sys"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "pkg-config 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -110,8 +111,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "log"
-version = "0.2.5"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
 
 [[package]]
 name = "matches"
@@ -123,6 +127,15 @@ name = "natord"
 version = "1.0.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
+[[package]]
+name = "num_cpus"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "gcc 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
 [[package]]
 name = "number_prefix"
 version = "0.2.3"
@@ -130,13 +143,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "openssl-sys"
-version = "0.5.2"
+version = "0.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "gcc 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gcc 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "libressl-pnacl-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pkg-config 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -146,7 +159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "pkg-config"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -156,36 +169,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "regex"
-version = "0.1.21"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "regex_macros"
-version = "0.1.13"
+version = "0.1.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "regex 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rustc-serialize"
-version = "0.3.7"
+version = "0.3.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "url"
-version = "0.2.28"
+version = "0.2.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-serialize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "users"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "libc 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 

+ 1 - 0
Cargo.toml

@@ -12,6 +12,7 @@ datetime = "0.1.3"
 getopts = "0.2.1"
 locale = "0.1.2"
 natord = "1.0.7"
+num_cpus = "*"
 number_prefix = "0.2.3"
 pad = "0.1.1"
 users = "0.3.1"

+ 1 - 1
src/column.rs

@@ -21,7 +21,7 @@ pub enum Column {
 
 /// Each column can pick its own **Alignment**. Usually, numbers are
 /// right-aligned, and text is left-aligned.
-#[derive(Copy)]
+#[derive(Copy, Clone)]
 pub enum Alignment {
     Left, Right,
 }

+ 1 - 1
src/feature/xattr_darwin.rs

@@ -23,7 +23,7 @@ extern "C" {
 }
 
 /// Attributes which can be passed to `Attribute::list_with_flags`
-#[derive(Copy)]
+#[derive(Copy, Clone)]
 pub enum ListFlags {
     /// Don't follow symbolic links
     NoFollow = XATTR_NOFOLLOW as isize,

+ 1 - 1
src/feature/xattr_linux.rs

@@ -20,7 +20,7 @@ extern "C" {
 }
 
 /// Attributes which can be passed to `Attribute::list_with_flags`
-#[derive(Copy)]
+#[derive(Copy, Clone)]
 pub enum FollowSymlinks {
     Yes,
     No

+ 12 - 3
src/file.rs

@@ -9,7 +9,7 @@ use std::old_io as io;
 use std::old_path::GenericPath;
 use std::old_path::posix::Path;
 use std::ascii::AsciiExt;
-use std::os::getcwd;
+use std::env::current_dir;
 use unicode::str::UnicodeStr;
 
 use ansi_term::{ANSIString, ANSIStrings, Colour, Style};
@@ -458,10 +458,19 @@ impl<'a> File<'a> {
     }
 
     fn git_status(&self) -> Cell {
+        use std::os::unix::ffi::OsStrExt;
+        use std::ffi::AsOsStr;
+
         let status = match self.dir {
-            Some(d) => d.git_status(&getcwd().unwrap_or(Path::new(".")).join(&self.path),
-                                    self.is_directory()),
             None    => GREY.paint("--").to_string(),
+            Some(d) => {
+                let cwd = match current_dir() {
+                    Err(_)  => Path::new(".").join(&self.path),
+                    Ok(dir) => Path::new(dir.as_os_str().as_bytes()).join(&self.path),
+                };
+
+                d.git_status(&cwd, self.is_directory())
+            },
         };
 
         Cell { text: status, length: 2 }

+ 1 - 1
src/filetype.rs

@@ -7,7 +7,7 @@ use ansi_term::Style;
 use ansi_term::Style::Plain;
 use ansi_term::Colour::{Red, Green, Yellow, Blue, Cyan, Fixed};
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug)]
 pub enum FileType {
     Normal, Directory, Executable, Immediate, Compiled, Symlink, Special,
     Image, Video, Music, Lossless, Compressed, Document, Temp, Crypto,

+ 2 - 2
src/main.rs

@@ -10,6 +10,7 @@ extern crate datetime;
 extern crate getopts;
 extern crate locale;
 extern crate natord;
+extern crate num_cpus;
 extern crate number_prefix;
 extern crate pad;
 extern crate unicode;
@@ -22,7 +23,6 @@ use std::env;
 use std::old_io::{fs, FileType};
 use std::old_path::GenericPath;
 use std::old_path::posix::Path;
-use std::os::num_cpus;
 use std::sync::mpsc::{channel, sync_channel};
 use std::thread;
 
@@ -68,7 +68,7 @@ impl<'a> Exa<'a> {
         let total_files = files.len();
 
         // Denotes the maxinum number of concurrent threads
-        let (thread_capacity_tx, thread_capacity_rs) = sync_channel(8 * num_cpus());
+        let (thread_capacity_tx, thread_capacity_rs) = sync_channel(8 * num_cpus::get());
 
         // Communication between consumer thread and producer threads
         enum StatResult<'a> {

+ 8 - 8
src/options.rs

@@ -19,14 +19,14 @@ use self::Misfire::*;
 
 /// The *Options* struct represents a parsed version of the user's
 /// command-line options.
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct Options {
     pub dir_action: DirAction,
     pub filter: FileFilter,
     pub view: View,
 }
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct FileFilter {
     list_dirs_first: bool,
     reverse: bool,
@@ -34,7 +34,7 @@ pub struct FileFilter {
     sort_field: SortField,
 }
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub enum View {
     Details(Details),
     Lines,
@@ -160,7 +160,7 @@ impl FileFilter {
 }
 
 /// User-supplied field to sort by.
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub enum SortField {
     Unsorted, Name, Extension, Size, FileInode,
     ModifiedDate, AccessedDate, CreatedDate,
@@ -362,7 +362,7 @@ impl TimeType {
     }
 }
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct TimeTypes {
     accessed: bool,
     modified: bool,
@@ -413,7 +413,7 @@ impl TimeTypes {
 }
 
 /// What to do when encountering a directory?
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub enum DirAction {
     AsFile,
     List,
@@ -458,7 +458,7 @@ impl DirAction {
     }
 }
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct RecurseOptions {
     pub tree:      bool,
     pub max_depth: Option<usize>,
@@ -492,7 +492,7 @@ impl RecurseOptions {
     }
 }
 
-#[derive(PartialEq, Copy, Debug)]
+#[derive(PartialEq, Copy, Clone, Debug)]
 pub struct Columns {
     size_format: SizeFormat,
     time_types: TimeTypes,

+ 1 - 1
src/output/details.rs

@@ -19,7 +19,7 @@ use ansi_term::Style::Plain;
 ///
 /// Almost all the heavy lifting is done in a Table object, which handles the
 /// columns for each row.
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct Details {
 
     /// A Columns object that says which columns should be included in the

+ 1 - 1
src/output/grid.rs

@@ -5,7 +5,7 @@ use super::lines::lines_view;
 use std::cmp::max;
 use std::iter::{AdditiveIterator, repeat};
 
-#[derive(PartialEq, Debug, Copy)]
+#[derive(PartialEq, Debug, Copy, Clone)]
 pub struct Grid {
     pub across: bool,
     pub console_width: usize,