Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warm when git feature is disabled instead of ignoring flags #762

Merged
merged 3 commits into from
Mar 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions man/exa.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ Sort fields starting with a capital letter will sort uppercase before lowercase:
`-I`, `--ignore-glob=GLOBS`
: Glob patterns, pipe-separated, of files to ignore.

`--git-ignore`
`--git-ignore` [if exa was built with git support]
: Do not list files that are ignored by Git.

`--group-directories-first`
Expand Down Expand Up @@ -174,7 +174,7 @@ These options are available when running with `--long` (`-l`):
`-@`, `--extended`
: List each file’s extended attributes and sizes.

`--git`
`--git` [if exa was built with git support]
: List each file’s Git status, if tracked.


Expand Down
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
6 changes: 5 additions & 1 deletion src/options/version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@ impl VersionString {

impl fmt::Display for VersionString {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
writeln!(f, "{}", include!(concat!(env!("OUT_DIR"), "/version_string.txt")))
writeln!(
f,
"{} (git support: {})",
include!(concat!(env!("OUT_DIR"), "/version_string.txt")),
if cfg!(feature = "git") { "enabled" } else { "disabled" })
}
}

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