summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Nordholts <enselic@gmail.com>2021-07-27 20:11:58 +0200
committerMartin Nordholts <enselic@gmail.com>2021-07-29 08:27:02 +0200
commitb040efff79b641ba23704e7f34655d11fb91d6e9 (patch)
tree412087671746e89c147dd88e92340327404dfb1a
parenta81009607a304f5eadc96d5d1abf02fe9e3060a7 (diff)
Support a hidden arg --no-custom-assets that skips loading assets from the cache
-rw-r--r--assets/completions/bat.zsh.in1
-rw-r--r--src/bin/bat/app.rs1
-rw-r--r--src/bin/bat/assets.rs10
-rw-r--r--src/bin/bat/clap_app.rs6
-rw-r--r--src/bin/bat/main.rs6
-rw-r--r--src/config.rs4
-rw-r--r--tests/integration_tests.rs11
7 files changed, 33 insertions, 6 deletions
diff --git a/assets/completions/bat.zsh.in b/assets/completions/bat.zsh.in
index e3683e8a..205b1ec9 100644
--- a/assets/completions/bat.zsh.in
+++ b/assets/completions/bat.zsh.in
@@ -45,6 +45,7 @@ _{{PROJECT_EXECUTABLE}}_main() {
'(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
'(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
'(: --no-config)'--no-config'[Do not use the configuration file]'
+ '(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]'
'(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]'
'(: --config-file)'--config-file'[Show path to the configuration file]'
'(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]'
diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs
index ce27b35c..f7613bbe 100644
--- a/src/bin/bat/app.rs
+++ b/src/bin/bat/app.rs
@@ -234,6 +234,7 @@ impl App {
.map(LineRanges::from)
.map(HighlightedLineRanges)
.unwrap_or_default(),
+ use_custom_assets: !self.matches.is_present("no-custom-assets"),
})
}
diff --git a/src/bin/bat/assets.rs b/src/bin/bat/assets.rs
index 38dce43a..b50575dd 100644
--- a/src/bin/bat/assets.rs
+++ b/src/bin/bat/assets.rs
@@ -23,7 +23,7 @@ pub fn clear_assets() {
clear_asset("metadata.yaml", "metadata file");
}
-pub fn assets_from_cache_or_binary() -> Result<HighlightingAssets> {
+pub fn assets_from_cache_or_binary(use_custom_assets: bool) -> Result<HighlightingAssets> {
let cache_dir = PROJECT_DIRS.cache_dir();
if let Some(metadata) = AssetsMetadata::load_from_folder(&cache_dir)? {
if !metadata.is_compatible_with(crate_version!()) {
@@ -41,8 +41,12 @@ pub fn assets_from_cache_or_binary() -> Result<HighlightingAssets> {
}
}
- Ok(HighlightingAssets::from_cache(&cache_dir)
- .unwrap_or_else(|_| HighlightingAssets::from_binary()))
+ let custom_assets = if use_custom_assets {
+ HighlightingAssets::from_cache(&cache_dir).ok()
+ } else {
+ None
+ };
+ Ok(custom_assets.unwrap_or_else(HighlightingAssets::from_binary))
}
fn clear_asset(filename: &str, description: &str) {
diff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs
index ea8efd89..37016f62 100644
--- a/src/bin/bat/clap_app.rs
+++ b/src/bin/bat/clap_app.rs
@@ -451,6 +451,12 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
.help("Do not use the configuration file"),
)
.arg(
+ Arg::with_name("no-custom-assets")
+ .long("no-custom-assets")
+ .hidden(true)
+ .help("Do not load custom assets"),
+ )
+ .arg(
Arg::with_name("config-file")
.long("config-file")
.conflicts_with("list-languages")
diff --git a/src/bin/bat/main.rs b/src/bin/bat/main.rs
index ae4b30e9..7369dc03 100644
--- a/src/bin/bat/main.rs
+++ b/src/bin/bat/main.rs
@@ -80,7 +80,7 @@ fn get_syntax_mapping_to_paths<'a>(
pub fn get_languages(config: &Config) -> Result<String> {
let mut result: String = String::new();
- let assets = assets_from_cache_or_binary()?;
+ let assets = assets_from_cache_or_binary(config.use_custom_assets)?;
let mut languages = assets
.get_syntaxes()?
.iter()
@@ -178,7 +178,7 @@ fn theme_preview_file<'a>() -> Input<'a> {
}
pub fn list_themes(cfg: &Config) -> Result<()> {
- let assets = assets_from_cache_or_binary()?;
+ let assets = assets_from_cache_or_binary(cfg.use_custom_assets)?;
let mut config = cfg.clone();
let mut style = HashSet::new();
style.insert(StyleComponent::Plain);
@@ -219,7 +219,7 @@ pub fn list_themes(cfg: &Config) -> Result<()> {
}
fn run_controller(inputs: Vec<Input>, config: &Config) -> Result<bool> {
- let assets = assets_from_cache_or_binary()?;
+ let assets = assets_from_cache_or_binary(config.use_custom_assets)?;
let controller = Controller::new(&config, &assets);
controller.run(inputs)
}
diff --git a/src/config.rs b/src/config.rs
index 6bb84ab9..2794d5f3 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -82,6 +82,10 @@ pub struct Config<'a> {
/// Ranges of lines which should be highlighted with a special background color
pub highlighted_lines: HighlightedLineRanges,
+
+ /// Whether or not to allow custom assets. If this is false or if custom assets (a.k.a.
+ /// cached assets) are not available, assets from the binary will be used instead.
+ pub use_custom_assets: bool,
}
#[cfg(all(feature = "application", feature = "paging"))]
diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs
index 3e3d029a..f09765b0 100644
--- a/tests/integration_tests.rs
+++ b/tests/integration_tests.rs
@@ -796,6 +796,17 @@ fn does_not_print_unwanted_file_named_cache() {
}
#[test]
+fn accepts_no_custom_assets_arg() {
+ // Just make sure --no-custom-assets is considered a valid arg
+ // Don't bother to actually verify that it works
+ bat()
+ .arg("--no-custom-assets")
+ .arg("test.txt")
+ .assert()
+ .success();
+}
+
+#[test]
fn unicode_wrap() {
bat_with_config()
.arg("unicode-wrap.txt")