mirror of
https://github.com/dandavison/delta.git
synced 2024-10-04 20:07:18 +03:00
parent
5e4faabfd3
commit
3a09926e45
32
src/cli.rs
32
src/cli.rs
@ -55,6 +55,23 @@ A feature name may not contain whitespace. You can activate multiple features:
|
||||
|
||||
If more than one feature sets the same option, the last one wins.
|
||||
|
||||
If an option is present in the [delta] section, then features are not considered at all.
|
||||
|
||||
If you want an option to be fully overridable by a feature and also have a non default value when
|
||||
no features are used, then you need to define a \"default\" feature and include it in the main
|
||||
delta configuration.
|
||||
|
||||
For instance:
|
||||
|
||||
[delta]
|
||||
feature = default-feature
|
||||
|
||||
[delta \"default-feature\"]
|
||||
width = 123
|
||||
|
||||
At this point, you can override features set in the command line or in the environment variables
|
||||
and the \"last one wins\" rules will apply as expected.
|
||||
|
||||
STYLES
|
||||
------
|
||||
|
||||
@ -276,6 +293,10 @@ pub struct Opt {
|
||||
/// intended for other tools that use delta.
|
||||
pub color_only: bool,
|
||||
|
||||
#[arg(long = "config", default_value = "", value_name = "PATH")]
|
||||
/// Load the config file at PATH instead of ~/.gitconfig.
|
||||
pub config: String,
|
||||
|
||||
#[arg(
|
||||
long = "commit-decoration-style",
|
||||
default_value = "",
|
||||
@ -1135,7 +1156,16 @@ impl Opt {
|
||||
git_config: Option<GitConfig>,
|
||||
assets: HighlightingAssets,
|
||||
) -> Self {
|
||||
Self::from_clap_and_git_config(env, Self::command().get_matches(), git_config, assets)
|
||||
let mut final_config = git_config;
|
||||
let matches = Self::command().get_matches();
|
||||
|
||||
if let Some(path) = matches.get_one::<String>("config") {
|
||||
if !path.is_empty() {
|
||||
final_config = Some(GitConfig::try_create_from_path(&env, path));
|
||||
}
|
||||
}
|
||||
|
||||
Self::from_clap_and_git_config(env, matches, final_config, assets)
|
||||
}
|
||||
|
||||
pub fn from_iter_and_git_config<I>(
|
||||
|
@ -5,7 +5,6 @@ pub use git_config_entry::{GitConfigEntry, GitRemoteRepo};
|
||||
use crate::env::DeltaEnv;
|
||||
use regex::Regex;
|
||||
use std::collections::HashMap;
|
||||
#[cfg(test)]
|
||||
use std::path::Path;
|
||||
use std::str::FromStr;
|
||||
|
||||
@ -65,11 +64,41 @@ impl GitConfig {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(test))]
|
||||
pub fn try_create_from_path(env: &DeltaEnv, path: &String) -> Self {
|
||||
use crate::fatal;
|
||||
|
||||
let config = git2::Config::open(Path::new(path));
|
||||
|
||||
match config {
|
||||
Ok(mut config) => {
|
||||
let config = config.snapshot().unwrap_or_else(|err| {
|
||||
fatal(format!("Failed to read git config: {err}"));
|
||||
});
|
||||
|
||||
Self {
|
||||
config,
|
||||
config_from_env_var: parse_config_from_env_var(env),
|
||||
repo: None,
|
||||
enabled: true,
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
fatal(format!("Failed to read git config: {}", e.message()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub fn try_create(_env: &DeltaEnv) -> Option<Self> {
|
||||
unreachable!("GitConfig::try_create() is not available when testing");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub fn try_create_from_path(_env: &DeltaEnv, _path: &String) -> Self {
|
||||
unreachable!("GitConfig::try_create_from_path() is not available when testing");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub fn from_path(env: &DeltaEnv, path: &Path, honor_env_var: bool) -> Self {
|
||||
Self {
|
||||
|
@ -9,7 +9,7 @@ use ProvenancedOptionValue::*;
|
||||
// Look up a value of type `T` associated with `option name`. The search rules are:
|
||||
//
|
||||
// 1. If there is a value associated with `option_name` in the main [delta] git config
|
||||
// section, then stop searching and return that value.
|
||||
// section, then stop searching and return that value (steps 2 and 3 are not executed at all).
|
||||
//
|
||||
// 2. For each feature in the ordered list of enabled features:
|
||||
//
|
||||
|
@ -135,6 +135,7 @@ pub fn set_options(
|
||||
blame_timestamp_format,
|
||||
blame_timestamp_output_format,
|
||||
color_only,
|
||||
config,
|
||||
commit_decoration_style,
|
||||
commit_regex,
|
||||
commit_style,
|
||||
|
Loading…
Reference in New Issue
Block a user