diff options
author | Ben S <ogham@bsago.me> | 2015-08-03 18:44:33 +0100 |
---|---|---|
committer | Ben S <ogham@bsago.me> | 2015-08-03 18:44:33 +0100 |
commit | d547c3f5d788f202de353938eaaedbb67a3624df (patch) | |
tree | 84adcb8f14f1b1c53abfdf1d3666d2573a3e3f90 /src | |
parent | e1f4ea92151901d97bfe042564342bc62ef442e5 (diff) |
Fix bug where Git repos were always queried
This is very slow (see #28) at the moment, so there's an option to switch off repo discovery. However, they were still always being queried. Now, if there's no Git option in the flags, it won't try to discover a repo.
Diffstat (limited to 'src')
-rw-r--r-- | src/dir.rs | 4 | ||||
-rw-r--r-- | src/file.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 2 | ||||
-rw-r--r-- | src/options.rs | 17 |
4 files changed, 20 insertions, 5 deletions
@@ -23,11 +23,11 @@ impl Dir { /// Create a new Dir object filled with all the files in the directory /// pointed to by the given path. Fails if the directory can't be read, or /// isn't actually a directory. - pub fn readdir(path: &Path) -> io::Result<Dir> { + pub fn readdir(path: &Path, git: bool) -> io::Result<Dir> { fs::read_dir(path).map(|dir_obj| Dir { contents: dir_obj.map(|entry| entry.unwrap().path()).collect(), path: path.to_path_buf(), - git: Git::scan(path).ok(), + git: if git { Git::scan(path).ok() } else { None }, }) } diff --git a/src/file.rs b/src/file.rs index d3daf8f..391fdc3 100644 --- a/src/file.rs +++ b/src/file.rs @@ -82,7 +82,7 @@ impl<'dir> File<'dir> { // that represents the current File as a directory, if it is a // directory. This is used for the --tree option. let this = if recurse && metadata.is_dir() { - Dir::readdir(path).ok() + Dir::readdir(path, false).ok() } else { None diff --git a/src/main.rs b/src/main.rs index cb357ed..720409d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -144,7 +144,7 @@ impl<'dir> Exa<'dir> { print!("\n"); } - match Dir::readdir(&dir_path) { + match Dir::readdir(&dir_path, self.options.should_scan_for_git()) { Ok(ref dir) => { let mut files = dir.files(false); self.options.transform_files(&mut files); diff --git a/src/options.rs b/src/options.rs index 08e3e9b..3a53343 100644 --- a/src/options.rs +++ b/src/options.rs @@ -110,6 +110,17 @@ impl Options { pub fn transform_files(&self, files: &mut Vec<File>) { self.filter.transform_files(files) } + + /// Whether the View specified in this set of options includes a Git + /// status column. It's only worth trying to discover a repository if the + /// results will end up being displayed. + pub fn should_scan_for_git(&self) -> bool { + match self.view { + View::Details(Details { columns: Some(cols), .. }) => cols.should_scan_for_git(), + View::GridDetails(GridDetails { details: Details { columns: Some(cols), .. }, .. }) => cols.should_scan_for_git(), + _ => false, + } + } } @@ -572,6 +583,10 @@ impl Columns { }) } + pub fn should_scan_for_git(&self) -> bool { + self.git + } + pub fn for_dir(&self, dir: Option<&Dir>) -> Vec<Column> { let mut columns = vec![]; @@ -611,7 +626,7 @@ impl Columns { if cfg!(feature="git") { if let Some(d) = dir { - if self.git && d.has_git_repo() { + if self.should_scan_for_git() && d.has_git_repo() { columns.push(GitStatus); } } |