summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBen S <ogham@bsago.me>2015-08-03 18:44:33 +0100
committerBen S <ogham@bsago.me>2015-08-03 18:44:33 +0100
commitd547c3f5d788f202de353938eaaedbb67a3624df (patch)
tree84adcb8f14f1b1c53abfdf1d3666d2573a3e3f90 /src
parente1f4ea92151901d97bfe042564342bc62ef442e5 (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.rs4
-rw-r--r--src/file.rs2
-rw-r--r--src/main.rs2
-rw-r--r--src/options.rs17
4 files changed, 20 insertions, 5 deletions
diff --git a/src/dir.rs b/src/dir.rs
index 932b04d..f48bcc4 100644
--- a/src/dir.rs
+++ b/src/dir.rs
@@ -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);
}
}