Skip to content

Commit

Permalink
Warm when git feature is disabled instead of ignoring flags
Browse files Browse the repository at this point in the history
The flags --git and --git-ignore are caught early during options parsing, so no more checking for git feature is done elsewhere.

Since --git-ignore depends on git too since recently, remove it from help when git feature is disabled.

Extended attributes now don’t artificially depends on git feature being enabled.
  • Loading branch information
ariasuni committed Dec 10, 2020
1 parent 39c8c67 commit a740512
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/fs/feature/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ pub mod git {
}

pub fn get(&self, _index: &Path, _prefix_lookup: bool) -> f::Git {
panic!("Tried to query a Git cache, but Git support is disabled")
unreachable!();
}
}
}
4 changes: 1 addition & 3 deletions src/fs/feature/xattr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ use std::io;
use std::path::Path;


pub const ENABLED: bool =
cfg!(feature="git") &&
cfg!(any(target_os = "macos", target_os = "linux"));
pub const ENABLED: bool = cfg!(any(target_os = "macos", target_os = "linux"));


pub trait FileAttributes {
Expand Down
2 changes: 1 addition & 1 deletion src/options/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ pub enum OptionsError {
/// The user supplied an illegal choice to an Argument.
BadArgument(&'static Arg, OsString),

/// The user supplied a set of options
/// The user supplied a set of options that are unsupported
Unsupported(String),

/// An option was given twice or more in strict mode.
Expand Down
28 changes: 18 additions & 10 deletions src/options/help.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::options::flags;
use crate::options::parser::MatchedFlags;


static USAGE: &str = r##"Usage:
static USAGE_PART1: &str = "Usage:
exa [options] [files...]
META OPTIONS
Expand All @@ -32,8 +32,9 @@ FILTERING AND SORTING OPTIONS
-s, --sort SORT_FIELD which field to sort by
--group-directories-first list directories before other files
-D, --only-dirs list only directories
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore
--git-ignore ignore files mentioned in '.gitignore'
-I, --ignore-glob GLOBS glob patterns (pipe-separated) of files to ignore";

static USAGE_PART2: &str = " \
Valid sort fields: name, Name, extension, Extension, size, type,
modified, accessed, created, inode, and none.
date, time, old, and new all refer to modified.
Expand All @@ -56,10 +57,11 @@ LONG VIEW OPTIONS
--octal-permissions list each file's permission in octal format
--no-filesize suppress the filesize field
--no-user suppress the user field
--no-time suppress the time field"##;
--no-time suppress the time field";

static GIT_HELP: &str = r##" --git list each file's Git status, if tracked or ignored"##;
static EXTENDED_HELP: &str = r##" -@, --extended list each file's extended attributes and sizes"##;
static GIT_FILTER_HELP: &str = " --git-ignore ignore files mentioned in '.gitignore'";
static GIT_VIEW_HELP: &str = " --git list each file's Git status, if tracked or ignored";
static EXTENDED_HELP: &str = " -@, --extended list each file's extended attributes and sizes";


/// All the information needed to display the help text, which depends
Expand Down Expand Up @@ -92,14 +94,20 @@ impl fmt::Display for HelpString {
/// Format this help options into an actual string of help
/// text to be displayed to the user.
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
writeln!(f, "{}", USAGE)?;
write!(f, "{}", USAGE_PART1)?;

if cfg!(feature = "git") {
write!(f, "\n{}", GIT_FILTER_HELP)?;
}

write!(f, "\n{}", USAGE_PART2)?;

if cfg!(feature="git") {
writeln!(f, "{}", GIT_HELP)?;
if cfg!(feature = "git") {
write!(f, "\n{}", GIT_VIEW_HELP)?;
}

if xattr::ENABLED {
writeln!(f, "{}", EXTENDED_HELP)?;
write!(f, "\n{}", EXTENDED_HELP)?;
}

Ok(())
Expand Down
7 changes: 7 additions & 0 deletions src/options/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,13 @@ impl Options {
/// Determines the complete set of options based on the given command-line
/// arguments, after they’ve been parsed.
fn deduce<V: Vars>(matches: &MatchedFlags<'_>, vars: &V) -> Result<Self, OptionsError> {
if cfg!(not(feature = "git")) &&
matches.has_where_any(|f| f.matches(&flags::GIT) || f.matches(&flags::GIT_IGNORE)).is_some() {
return Err(OptionsError::Unsupported(format!(
"Options --git and --git-ignore can't be used because `git` feature was disabled in this build of exa"
)));
}

let view = View::deduce(matches, vars)?;
let dir_action = DirAction::deduce(matches, matches!(view.mode, Mode::Details(_)))?;
let filter = FileFilter::deduce(matches)?;
Expand Down
4 changes: 2 additions & 2 deletions src/options/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ impl Mode {
}
}

if cfg!(feature = "git") && matches.has(&flags::GIT)? {
if matches.has(&flags::GIT)? {
return Err(OptionsError::Useless(&flags::GIT, false, &flags::LONG));
}
else if matches.has(&flags::LEVEL)? && ! matches.has(&flags::RECURSE)? && ! matches.has(&flags::TREE)? {
Expand Down Expand Up @@ -192,7 +192,7 @@ impl TableOptions {
impl Columns {
fn deduce(matches: &MatchedFlags<'_>) -> Result<Self, OptionsError> {
let time_types = TimeTypes::deduce(matches)?;
let git = cfg!(feature = "git") && matches.has(&flags::GIT)?;
let git = matches.has(&flags::GIT)?;

let blocks = matches.has(&flags::BLOCKS)?;
let group = matches.has(&flags::GROUP)?;
Expand Down
2 changes: 1 addition & 1 deletion src/output/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ impl Columns {
columns.push(Column::Timestamp(TimeType::Accessed));
}

if cfg!(feature = "git") && self.git && actually_enable_git {
if self.git && actually_enable_git {
columns.push(Column::GitStatus);
}

Expand Down

0 comments on commit a740512

Please sign in to comment.