Skip to content

Commit

Permalink
Fix bug where Git repos were always queried
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
ogham committed Aug 3, 2015
1 parent e1f4ea9 commit d547c3f
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/dir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
})
}

Expand Down
2 changes: 1 addition & 1 deletion src/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
17 changes: 16 additions & 1 deletion src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
}
}


Expand Down Expand Up @@ -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![];

Expand Down Expand Up @@ -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);
}
}
Expand Down

0 comments on commit d547c3f

Please sign in to comment.