mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-25 13:27:33 +00:00
Add a --git-ignore option that doesn’t do anything
!!
This commit is contained in:
parent
2b099d8ba0
commit
07443e87ba
@ -30,6 +30,7 @@ exa’s options are almost, but not quite, entirely unlike `ls`'s.
|
|||||||
- **-r**, **--reverse**: reverse the sort order
|
- **-r**, **--reverse**: reverse the sort order
|
||||||
- **-s**, **--sort=(field)**: which field to sort by
|
- **-s**, **--sort=(field)**: which field to sort by
|
||||||
- **--group-directories-first**: list directories before other files
|
- **--group-directories-first**: list directories before other files
|
||||||
|
- **--git-ignore**: ignore files mentioned in `.gitignore`
|
||||||
- **-I**, **--ignore-glob=(globs)**: glob patterns (pipe-separated) of files to ignore
|
- **-I**, **--ignore-glob=(globs)**: glob patterns (pipe-separated) of files to ignore
|
||||||
|
|
||||||
Pass the `--all` option twice to also show the `.` and `..` directories.
|
Pass the `--all` option twice to also show the `.` and `..` directories.
|
||||||
|
@ -17,6 +17,7 @@ complete -c exa -l 'colour-scale' -d "Highlight levels of file sizes dist
|
|||||||
|
|
||||||
# Filtering and sorting options
|
# Filtering and sorting options
|
||||||
complete -c exa -l 'group-directories-first' -d "Sort directories before other files"
|
complete -c exa -l 'group-directories-first' -d "Sort directories before other files"
|
||||||
|
complete -c exa -l 'git-ignore' -d "Ignore files mentioned in '.gitignore'"
|
||||||
complete -c exa -s 'a' -l 'all' -d "Show and 'dot' files"
|
complete -c exa -s 'a' -l 'all' -d "Show and 'dot' files"
|
||||||
complete -c exa -s 'd' -l 'list-dirs' -d "List directories like regular files"
|
complete -c exa -s 'd' -l 'list-dirs' -d "List directories like regular files"
|
||||||
complete -c exa -s 'L' -l 'level' -d "Limit the depth of recursion" -a "1 2 3 4 5 6 7 8 9"
|
complete -c exa -s 'L' -l 'level' -d "Limit the depth of recursion" -a "1 2 3 4 5 6 7 8 9"
|
||||||
|
@ -14,6 +14,7 @@ __exa() {
|
|||||||
{--color,--colour}"[When to use terminal colours]" \
|
{--color,--colour}"[When to use terminal colours]" \
|
||||||
{--color,--colour}-scale"[Highlight levels of file sizes distinctly]" \
|
{--color,--colour}-scale"[Highlight levels of file sizes distinctly]" \
|
||||||
--group-directories-first"[Sort directories before other files]" \
|
--group-directories-first"[Sort directories before other files]" \
|
||||||
|
--git-ignore"[Ignore files mentioned in '.gitignore']" \
|
||||||
{-a,--all}"[Show hidden and 'dot' files]" \
|
{-a,--all}"[Show hidden and 'dot' files]" \
|
||||||
{-d,--list-dirs}"[List directories like regular files]" \
|
{-d,--list-dirs}"[List directories like regular files]" \
|
||||||
{-L,--level}"+[Limit the depth of recursion]" \
|
{-L,--level}"+[Limit the depth of recursion]" \
|
||||||
|
@ -88,6 +88,11 @@ Glob patterns, pipe-separated, of files to ignore
|
|||||||
.RS
|
.RS
|
||||||
.RE
|
.RE
|
||||||
.TP
|
.TP
|
||||||
|
.B \-\-git\-ignore
|
||||||
|
ignore files mentioned in '.gitignore'
|
||||||
|
.RS
|
||||||
|
.RE
|
||||||
|
.TP
|
||||||
.B \-\-group\-directories\-first
|
.B \-\-group\-directories\-first
|
||||||
list directories before other files
|
list directories before other files
|
||||||
.RS
|
.RS
|
||||||
|
@ -305,6 +305,26 @@ impl IgnorePatterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Whether to ignore or display files that are mentioned in `.gitignore` files.
|
||||||
|
#[derive(PartialEq, Debug, Copy, Clone)]
|
||||||
|
pub enum GitIgnore {
|
||||||
|
|
||||||
|
/// Ignore files that Git would ignore. This means doing a check for a
|
||||||
|
/// `.gitignore` file, possibly recursively up the filesystem tree.
|
||||||
|
CheckAndIgnore,
|
||||||
|
|
||||||
|
/// Display files, even if Git would ignore them.
|
||||||
|
Off,
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is not fully baked yet. The `ignore` crate lists a lot more files that
|
||||||
|
// we aren’t checking:
|
||||||
|
//
|
||||||
|
// > By default, all ignore files found are respected. This includes .ignore,
|
||||||
|
// > .gitignore, .git/info/exclude and even your global gitignore globs,
|
||||||
|
// > usually found in $XDG_CONFIG_HOME/git/ignore.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test_ignores {
|
mod test_ignores {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Parsing the options for `FileFilter`.
|
//! Parsing the options for `FileFilter`.
|
||||||
|
|
||||||
use fs::DotFilter;
|
use fs::DotFilter;
|
||||||
use fs::filter::{FileFilter, SortField, SortCase, IgnorePatterns};
|
use fs::filter::{FileFilter, SortField, SortCase, IgnorePatterns, GitIgnore};
|
||||||
|
|
||||||
use options::{flags, Misfire};
|
use options::{flags, Misfire};
|
||||||
use options::parser::MatchedFlags;
|
use options::parser::MatchedFlags;
|
||||||
@ -180,6 +180,14 @@ impl IgnorePatterns {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl GitIgnore {
|
||||||
|
pub fn deduce(matches: &MatchedFlags) -> Result<Self, Misfire> {
|
||||||
|
Ok(if matches.has(&flags::GIT_IGNORE)? { GitIgnore::CheckAndIgnore }
|
||||||
|
else { GitIgnore::Off })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
@ -196,7 +204,7 @@ mod test {
|
|||||||
use options::test::parse_for_test;
|
use options::test::parse_for_test;
|
||||||
use options::test::Strictnesses::*;
|
use options::test::Strictnesses::*;
|
||||||
|
|
||||||
static TEST_ARGS: &[&Arg] = &[ &flags::SORT, &flags::ALL, &flags::TREE, &flags::IGNORE_GLOB ];
|
static TEST_ARGS: &[&Arg] = &[ &flags::SORT, &flags::ALL, &flags::TREE, &flags::IGNORE_GLOB, &flags::GIT_IGNORE ];
|
||||||
for result in parse_for_test($inputs.as_ref(), TEST_ARGS, $stricts, |mf| $type::deduce(mf)) {
|
for result in parse_for_test($inputs.as_ref(), TEST_ARGS, $stricts, |mf| $type::deduce(mf)) {
|
||||||
assert_eq!(result, $result);
|
assert_eq!(result, $result);
|
||||||
}
|
}
|
||||||
@ -275,4 +283,12 @@ mod test {
|
|||||||
test!(overridden_3: IgnorePatterns <- ["-I=*.ogg", "-I", "*.mp3"]; Complain => Err(Misfire::Duplicate(Flag::Short(b'I'), Flag::Short(b'I'))));
|
test!(overridden_3: IgnorePatterns <- ["-I=*.ogg", "-I", "*.mp3"]; Complain => Err(Misfire::Duplicate(Flag::Short(b'I'), Flag::Short(b'I'))));
|
||||||
test!(overridden_4: IgnorePatterns <- ["-I", "*.OGG", "-I*.MP3"]; Complain => Err(Misfire::Duplicate(Flag::Short(b'I'), Flag::Short(b'I'))));
|
test!(overridden_4: IgnorePatterns <- ["-I", "*.OGG", "-I*.MP3"]; Complain => Err(Misfire::Duplicate(Flag::Short(b'I'), Flag::Short(b'I'))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mod git_ignores {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
test!(off: GitIgnore <- []; Both => Ok(GitIgnore::Off));
|
||||||
|
test!(on: GitIgnore <- ["--git-ignore"]; Both => Ok(GitIgnore::CheckAndIgnore));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ pub static LEVEL: Arg = Arg { short: Some(b'L'), long: "level", take
|
|||||||
pub static REVERSE: Arg = Arg { short: Some(b'r'), long: "reverse", takes_value: TakesValue::Forbidden };
|
pub static REVERSE: Arg = Arg { short: Some(b'r'), long: "reverse", takes_value: TakesValue::Forbidden };
|
||||||
pub static SORT: Arg = Arg { short: Some(b's'), long: "sort", takes_value: TakesValue::Necessary(Some(SORTS)) };
|
pub static SORT: Arg = Arg { short: Some(b's'), long: "sort", takes_value: TakesValue::Necessary(Some(SORTS)) };
|
||||||
pub static IGNORE_GLOB: Arg = Arg { short: Some(b'I'), long: "ignore-glob", takes_value: TakesValue::Necessary(None) };
|
pub static IGNORE_GLOB: Arg = Arg { short: Some(b'I'), long: "ignore-glob", takes_value: TakesValue::Necessary(None) };
|
||||||
|
pub static GIT_IGNORE: Arg = Arg { short: None, long: "git-ignore", takes_value: TakesValue::Forbidden };
|
||||||
pub static DIRS_FIRST: Arg = Arg { short: None, long: "group-directories-first", takes_value: TakesValue::Forbidden };
|
pub static DIRS_FIRST: Arg = Arg { short: None, long: "group-directories-first", takes_value: TakesValue::Forbidden };
|
||||||
const SORTS: Values = &[ "name", "Name", "size", "extension",
|
const SORTS: Values = &[ "name", "Name", "size", "extension",
|
||||||
"Extension", "modified", "accessed",
|
"Extension", "modified", "accessed",
|
||||||
@ -60,7 +61,8 @@ pub static ALL_ARGS: Args = Args(&[
|
|||||||
&ONE_LINE, &LONG, &GRID, &ACROSS, &RECURSE, &TREE, &CLASSIFY,
|
&ONE_LINE, &LONG, &GRID, &ACROSS, &RECURSE, &TREE, &CLASSIFY,
|
||||||
&COLOR, &COLOUR, &COLOR_SCALE, &COLOUR_SCALE,
|
&COLOR, &COLOUR, &COLOR_SCALE, &COLOUR_SCALE,
|
||||||
|
|
||||||
&ALL, &LIST_DIRS, &LEVEL, &REVERSE, &SORT, &IGNORE_GLOB, &DIRS_FIRST,
|
&ALL, &LIST_DIRS, &LEVEL, &REVERSE, &SORT, &DIRS_FIRST,
|
||||||
|
&IGNORE_GLOB, &GIT_IGNORE,
|
||||||
|
|
||||||
&BINARY, &BYTES, &GROUP, &HEADER, &INODE, &LINKS, &MODIFIED, &BLOCKS,
|
&BINARY, &BYTES, &GROUP, &HEADER, &INODE, &LINKS, &MODIFIED, &BLOCKS,
|
||||||
&TIME, &ACCESSED, &CREATED, &TIME_STYLE,
|
&TIME, &ACCESSED, &CREATED, &TIME_STYLE,
|
||||||
|
@ -27,6 +27,7 @@ FILTERING AND SORTING OPTIONS
|
|||||||
-s, --sort SORT_FIELD which field to sort by
|
-s, --sort SORT_FIELD which field to sort by
|
||||||
--group-directories-first list directories before other files
|
--group-directories-first list directories before other files
|
||||||
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
|
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
|
||||||
|
--git-ignore Ignore files mentioned in '.gitignore'
|
||||||
Valid sort fields: name, Name, extension, Extension, size, type,
|
Valid sort fields: name, Name, extension, Extension, size, type,
|
||||||
modified, accessed, created, inode, and none.
|
modified, accessed, created, inode, and none.
|
||||||
date, time, old, and new all refer to modified.
|
date, time, old, and new all refer to modified.
|
||||||
|
@ -22,6 +22,7 @@ FILTERING AND SORTING OPTIONS
|
|||||||
-s, --sort SORT_FIELD which field to sort by
|
-s, --sort SORT_FIELD which field to sort by
|
||||||
--group-directories-first list directories before other files
|
--group-directories-first list directories before other files
|
||||||
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
|
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
|
||||||
|
--git-ignore Ignore files mentioned in '.gitignore'
|
||||||
Valid sort fields: name, Name, extension, Extension, size, type,
|
Valid sort fields: name, Name, extension, Extension, size, type,
|
||||||
modified, accessed, created, inode, and none.
|
modified, accessed, created, inode, and none.
|
||||||
date, time, old, and new all refer to modified.
|
date, time, old, and new all refer to modified.
|
||||||
|
Loading…
Reference in New Issue
Block a user