mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-09-27 20:59:02 +00:00
Allow --git --tree, too
This works by checking if any of the (immediate) files being listed are under Git, and hiding the column if all aren’t.
This commit is contained in:
parent
9cda05df20
commit
c60ea36a31
@ -212,6 +212,14 @@ fn repo_to_statuses(repo: git2::Repository, workdir: &Path) -> Git {
|
|||||||
Git { statuses }
|
Git { statuses }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The `repo.statuses` call above takes a long time. exa debug output:
|
||||||
|
//
|
||||||
|
// 20.311276 INFO:exa::fs::feature::git: Getting Git statuses for repo with workdir "/vagrant/"
|
||||||
|
// 20.799610 DEBUG:exa::output::table: Getting Git status for file "./Cargo.toml"
|
||||||
|
//
|
||||||
|
// Even inserting another logging line immediately afterwards doesn't make it
|
||||||
|
// look any faster.
|
||||||
|
|
||||||
|
|
||||||
/// Container of Git statuses for all the files in this folder’s Git repository.
|
/// Container of Git statuses for all the files in this folder’s Git repository.
|
||||||
struct Git {
|
struct Git {
|
||||||
|
@ -144,8 +144,12 @@ impl<'a> Render<'a> {
|
|||||||
let mut rows = Vec::new();
|
let mut rows = Vec::new();
|
||||||
|
|
||||||
if let Some(ref table) = self.opts.table {
|
if let Some(ref table) = self.opts.table {
|
||||||
if self.dir.is_none() { git = None }
|
match (git, self.dir) {
|
||||||
if let (Some(g), Some(d)) = (git, self.dir) { if !g.has_anything_for(&d.path) { git = None } }
|
(Some(g), Some(d)) => if !g.has_anything_for(&d.path) { git = None },
|
||||||
|
(Some(g), None) => if !self.files.iter().any(|f| g.has_anything_for(&f.path)) { git = None },
|
||||||
|
(None, _) => {/* Keep Git how it is */},
|
||||||
|
}
|
||||||
|
|
||||||
let mut table = Table::new(&table, git, &self.colours);
|
let mut table = Table::new(&table, git, &self.colours);
|
||||||
|
|
||||||
if self.opts.header {
|
if self.opts.header {
|
||||||
@ -154,7 +158,7 @@ impl<'a> Render<'a> {
|
|||||||
rows.push(self.render_header(header));
|
rows.push(self.render_header(header));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is weird, but I can't find a way around it:
|
// This is weird, but I can’t find a way around it:
|
||||||
// https://internals.rust-lang.org/t/should-option-mut-t-implement-copy/3715/6
|
// https://internals.rust-lang.org/t/should-option-mut-t-implement-copy/3715/6
|
||||||
let mut table = Some(table);
|
let mut table = Some(table);
|
||||||
self.add_files_to_table(&mut table, &mut rows, &self.files, TreeDepth::root());
|
self.add_files_to_table(&mut table, &mut rows, &self.files, TreeDepth::root());
|
||||||
|
@ -168,8 +168,12 @@ impl<'a> Render<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn make_table<'t>(&'a self, options: &'a TableOptions, mut git: Option<&'a GitCache>, drender: &DetailsRender) -> (Table<'a>, Vec<DetailsRow>) {
|
fn make_table<'t>(&'a self, options: &'a TableOptions, mut git: Option<&'a GitCache>, drender: &DetailsRender) -> (Table<'a>, Vec<DetailsRow>) {
|
||||||
if self.dir.is_none() { git = None }
|
match (git, self.dir) {
|
||||||
if let (Some(g), Some(d)) = (git, self.dir) { if !g.has_anything_for(&d.path) { git = None } }
|
(Some(g), Some(d)) => if !g.has_anything_for(&d.path) { git = None },
|
||||||
|
(Some(g), None) => if !self.files.iter().any(|f| g.has_anything_for(&f.path)) { git = None },
|
||||||
|
(None, _) => {/* Keep Git how it is */},
|
||||||
|
}
|
||||||
|
|
||||||
let mut table = Table::new(options, git, self.colours);
|
let mut table = Table::new(options, git, self.colours);
|
||||||
let mut rows = Vec::new();
|
let mut rows = Vec::new();
|
||||||
|
|
||||||
|
1
xtests/git_1_file
Normal file
1
xtests/git_1_file
Normal file
@ -0,0 +1 @@
|
|||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m21[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [36m/testcases/git/moves/[0mthither
|
4
xtests/git_1_files
Normal file
4
xtests/git_1_files
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [32mN[34mM[0m [36m/testcases/git/additions/[0medited .[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m15[0m cassowary [34m 1 Jan 12:34[0m [34mM[38;5;244m-[0m [36m/testcases/git/edits/[0mstaged
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [36m/testcases/git/additions/[0mstaged .[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[34mM[0m [36m/testcases/git/edits/[0munstaged
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [36m/testcases/git/additions/[0munstaged .[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m21[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [36m/testcases/git/moves/[0mthither
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [34mMM[0m [36m/testcases/git/edits/[0mboth [1;34md[33mr[31mw[32mx[0m[33mr[38;5;244m-[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m--[0m [36m/[1;34mtestcases[0m
|
@ -1,11 +1,11 @@
|
|||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [36m/testcases/[1;34mgit[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [32mNN[0m [36m/testcases/[1;34mgit[0m
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m├──[0m [1;34madditions[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [32mNN[0m [38;5;244m├──[0m [1;34madditions[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m edited
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [32mN[34mM[0m [38;5;244m│ ├──[0m edited
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m staged
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [38;5;244m│ ├──[0m staged
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m unstaged
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ └──[0m unstaged
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m├──[0m [1;34medits[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [34mMM[0m [38;5;244m├──[0m [1;34medits[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m both
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [34mMM[0m [38;5;244m│ ├──[0m both
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m15[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m staged
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m15[0m cassowary [34m 1 Jan 12:34[0m [34mM[38;5;244m-[0m [38;5;244m│ ├──[0m staged
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m unstaged
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m20[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[34mM[0m [38;5;244m│ └──[0m unstaged
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m└──[0m [1;34mmoves[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [38;5;244m└──[0m [1;34mmoves[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m21[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m └──[0m thither
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m21[0m cassowary [34m 1 Jan 12:34[0m [32mN[38;5;244m-[0m [38;5;244m └──[0m thither
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [36m/testcases/[1;34mgit2[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [36m/testcases/[1;34mgit2[0m
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m├──[0m [1;34mdeeply[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m├──[0m [1;34mdeeply[0m
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m [1;34mnested[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ └──[0m [1;34mnested[0m
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m [1;34mdirectory[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ ├──[0m [1;34mdirectory[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ │ ├──[0m l8st
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ │ ├──[0m l8st
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m18[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ │ └──[0m upd8d
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m18[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[34mM[0m [38;5;244m│ │ └──[0m upd8d
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m [1;34mrepository[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ └──[0m [1;34mrepository[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m subfile
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m--[0m [38;5;244m│ └──[0m subfile
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m├──[0m [1;34mignoreds[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m├──[0m [1;34mignoreds[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ ├──[0m [38;5;92mmusic.m4a[0m
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m-[32mN[0m [38;5;244m│ ├──[0m [38;5;92mmusic.m4a[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m│ └──[0m [38;5;92mmusic.mp3[0m
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m--[0m [38;5;244m│ └──[0m [38;5;92mmusic.mp3[0m
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m└──[0m [1;34mtarget[0m
|
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m--[0m [38;5;244m└──[0m [1;34mtarget[0m
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m └──[0m another ignored file
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 1 Jan 12:34[0m [38;5;244m--[0m [38;5;244m └──[0m another ignored file
|
||||||
|
@ -188,13 +188,14 @@ COLUMNS=80 $exa_binary --colour=never $testcases/file-names-exts | diff -q -
|
|||||||
|
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
$exa $testcases/git -l --git 2>&1 | diff -q - $results/git_1_long || exit 1
|
$exa $testcases/git -l --git 2>&1 | diff -q - $results/git_1_long || exit 1
|
||||||
$exa $testcases/git -l 2>&1 | diff -q - $results/git_1_nogit || exit 1
|
$exa $testcases/git -l 2>&1 | diff -q - $results/git_1_nogit || exit 1
|
||||||
$exa $testcases/git --tree -l --git 2>&1 | diff -q - $results/git_1_tree || exit 1
|
$exa $testcases/git --recurse -l --git 2>&1 | diff -q - $results/git_1_recurse || exit 1
|
||||||
$exa $testcases/git --recurse -l --git 2>&1 | diff -q - $results/git_1_recurse || exit 1
|
$exa $testcases/git --tree -l --git 2>&1 | diff -q - $results/git_1_tree || exit 1
|
||||||
$exa $testcases/git/additions -l --git 2>&1 | diff -q - $results/git_1_additions || exit 1
|
$exa $testcases/git/moves/thither --tree -l --git 2>&1 | diff -q - $results/git_1_file || exit 1
|
||||||
$exa $testcases/git/edits -l --git 2>&1 | diff -q - $results/git_1_edits || exit 1
|
$exa $testcases/git/additions -l --git 2>&1 | diff -q - $results/git_1_additions || exit 1
|
||||||
$exa $testcases/git/{additions,edits} -l --git 2>&1 | diff -q - $results/git_1_both || exit 1
|
$exa $testcases/git/edits -l --git 2>&1 | diff -q - $results/git_1_edits || exit 1
|
||||||
|
$exa $testcases/git/{additions,edits} -l --git 2>&1 | diff -q - $results/git_1_both || exit 1
|
||||||
|
|
||||||
$exa $testcases/git2 -l --git 2>&1 | diff -q - $results/git_2_long || exit 1
|
$exa $testcases/git2 -l --git 2>&1 | diff -q - $results/git_2_long || exit 1
|
||||||
$exa $testcases/git2 -l 2>&1 | diff -q - $results/git_2_nogit || exit 1
|
$exa $testcases/git2 -l 2>&1 | diff -q - $results/git_2_nogit || exit 1
|
||||||
@ -205,6 +206,8 @@ $exa $testcases/git2/target -l --git 2>&1 | diff -q - $results
|
|||||||
$exa $testcases/git2/deeply/nested/repository -l --git 2>&1 | diff -q - $results/git_2_repository || exit 1
|
$exa $testcases/git2/deeply/nested/repository -l --git 2>&1 | diff -q - $results/git_2_repository || exit 1
|
||||||
$exa $testcases/git2/{deeply,ignoreds,target} -l --git 2>&1 | diff -q - $results/git_2_all || exit 1
|
$exa $testcases/git2/{deeply,ignoreds,target} -l --git 2>&1 | diff -q - $results/git_2_all || exit 1
|
||||||
|
|
||||||
|
COLUMNS=150 $exa $testcases/git/**/* $testcases --git --long --grid -d | diff -q - $results/git_1_files || exit 1
|
||||||
|
|
||||||
$exa $testcases/git $testcases/git2 --git --long | diff -q - $results/git_12 || exit 1
|
$exa $testcases/git $testcases/git2 --git --long | diff -q - $results/git_12 || exit 1
|
||||||
|
|
||||||
$exa $testcases/git/additions $testcases/git2/deeply \
|
$exa $testcases/git/additions $testcases/git2/deeply \
|
||||||
|
Loading…
Reference in New Issue
Block a user