diff options
author | IsaacHorvath <isaac.horvath@gmail.com> | 2022-03-16 16:41:49 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-16 21:41:49 +0100 |
commit | bae16b525de1f05a7ad125b5f4a8cb8baa7d5fae (patch) | |
tree | 02bd70c8141edec3a676e847b878e02737033ecc /src | |
parent | 86953272a7f1471e9a3422a7543d97b953406df6 (diff) |
feat(git_branch): add 'ignore_branches' option (#3753)
* git-branch: Add option 'ignore_branches'
* git-branch: add 'ignore_branches' test
* git-branch: comma-separated to toml array
* git-branch: update ignore_branches test
* git_branch: fix formatting
* git-branch: fix formatting again
* Initialize ignore_branches as empty
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
* Use iter().any and branch_name as suggested
* Fix formatting
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/configs/git_branch.rs | 2 | ||||
-rw-r--r-- | src/modules/git_branch.rs | 31 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/configs/git_branch.rs b/src/configs/git_branch.rs index d9c40c9ad..c20321592 100644 --- a/src/configs/git_branch.rs +++ b/src/configs/git_branch.rs @@ -12,6 +12,7 @@ pub struct GitBranchConfig<'a> { pub truncation_symbol: &'a str, pub only_attached: bool, pub always_show_remote: bool, + pub ignore_branches: Vec<&'a str>, pub disabled: bool, } @@ -25,6 +26,7 @@ impl<'a> Default for GitBranchConfig<'a> { truncation_symbol: "…", only_attached: false, always_show_remote: false, + ignore_branches: vec![], disabled: false, } } diff --git a/src/modules/git_branch.rs b/src/modules/git_branch.rs index 9962cb268..715f342ad 100644 --- a/src/modules/git_branch.rs +++ b/src/modules/git_branch.rs @@ -37,6 +37,14 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { let branch_name = repo.branch.as_ref()?; let mut graphemes: Vec<&str> = branch_name.graphemes(true).collect(); + if config + .ignore_branches + .iter() + .any(|ignored| branch_name.eq(ignored)) + { + return None; + } + let mut remote_branch_graphemes: Vec<&str> = Vec::new(); let mut remote_name_graphemes: Vec<&str> = Vec::new(); if let Some(remote) = repo.remote.as_ref() { @@ -365,6 +373,29 @@ mod tests { repo_dir.close() } + #[test] + fn test_ignore_branches() -> io::Result<()> { + let repo_dir = fixture_repo(FixtureProvider::Git)?; + + create_command("git")? + .args(&["checkout", "-b", "test_branch"]) + .current_dir(repo_dir.path()) + .output()?; + + let actual = ModuleRenderer::new("git_branch") + .config(toml::toml! { + [git_branch] + ignore_branches = ["dummy", "test_branch"] + }) + .path(&repo_dir.path()) + .collect(); + + let expected = None; + + assert_eq!(expected, actual); + repo_dir.close() + } + // This test is not possible until we switch to `git status --porcelain` // where we can mock the env for the specific git process. This is because // git2 does not care about our mocking and when we set the real `GIT_DIR` |