mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-11-28 15:56:28 +00:00
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>
This commit is contained in:
parent
86953272a7
commit
bae16b525d
@ -1374,6 +1374,7 @@ The `git_branch` module shows the active branch of the repo in your current dire
|
|||||||
| `truncation_length` | `2^63 - 1` | Truncates a git branch to `N` graphemes. |
|
| `truncation_length` | `2^63 - 1` | Truncates a git branch to `N` graphemes. |
|
||||||
| `truncation_symbol` | `"…"` | The symbol used to indicate a branch name was truncated. You can use `""` for no symbol. |
|
| `truncation_symbol` | `"…"` | The symbol used to indicate a branch name was truncated. You can use `""` for no symbol. |
|
||||||
| `only_attached` | `false` | Only show the branch name when not in a detached `HEAD` state. |
|
| `only_attached` | `false` | Only show the branch name when not in a detached `HEAD` state. |
|
||||||
|
| `ignore_branches` | `[]` | A list of names to avoid displaying. Useful for "master" or "main". |
|
||||||
| `disabled` | `false` | Disables the `git_branch` module. |
|
| `disabled` | `false` | Disables the `git_branch` module. |
|
||||||
|
|
||||||
### Variables
|
### Variables
|
||||||
@ -1397,6 +1398,7 @@ The `git_branch` module shows the active branch of the repo in your current dire
|
|||||||
symbol = "🌱 "
|
symbol = "🌱 "
|
||||||
truncation_length = 4
|
truncation_length = 4
|
||||||
truncation_symbol = ""
|
truncation_symbol = ""
|
||||||
|
ignore_branches = ["master", "main"]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Git Commit
|
## Git Commit
|
||||||
|
@ -12,6 +12,7 @@ pub struct GitBranchConfig<'a> {
|
|||||||
pub truncation_symbol: &'a str,
|
pub truncation_symbol: &'a str,
|
||||||
pub only_attached: bool,
|
pub only_attached: bool,
|
||||||
pub always_show_remote: bool,
|
pub always_show_remote: bool,
|
||||||
|
pub ignore_branches: Vec<&'a str>,
|
||||||
pub disabled: bool,
|
pub disabled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,6 +26,7 @@ impl<'a> Default for GitBranchConfig<'a> {
|
|||||||
truncation_symbol: "…",
|
truncation_symbol: "…",
|
||||||
only_attached: false,
|
only_attached: false,
|
||||||
always_show_remote: false,
|
always_show_remote: false,
|
||||||
|
ignore_branches: vec![],
|
||||||
disabled: false,
|
disabled: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,14 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|||||||
let branch_name = repo.branch.as_ref()?;
|
let branch_name = repo.branch.as_ref()?;
|
||||||
let mut graphemes: Vec<&str> = branch_name.graphemes(true).collect();
|
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_branch_graphemes: Vec<&str> = Vec::new();
|
||||||
let mut remote_name_graphemes: Vec<&str> = Vec::new();
|
let mut remote_name_graphemes: Vec<&str> = Vec::new();
|
||||||
if let Some(remote) = repo.remote.as_ref() {
|
if let Some(remote) = repo.remote.as_ref() {
|
||||||
@ -365,6 +373,29 @@ mod tests {
|
|||||||
repo_dir.close()
|
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`
|
// 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
|
// 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`
|
// git2 does not care about our mocking and when we set the real `GIT_DIR`
|
||||||
|
Loading…
Reference in New Issue
Block a user