summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIsaacHorvath <isaac.horvath@gmail.com>2022-03-16 16:41:49 -0400
committerGitHub <noreply@github.com>2022-03-16 21:41:49 +0100
commitbae16b525de1f05a7ad125b5f4a8cb8baa7d5fae (patch)
tree02bd70c8141edec3a676e847b878e02737033ecc /src
parent86953272a7f1471e9a3422a7543d97b953406df6 (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.rs2
-rw-r--r--src/modules/git_branch.rs31
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`